Statistics
| Branch: | Tag: | Revision:

root / setup.py @ feba5ad6

History | View | Annotate | Download (6.4 kB)

1 52271184 Kostas Papadimitriou
# Copyright 2012 GRNET S.A. All rights reserved.
2 52271184 Kostas Papadimitriou
#
3 52271184 Kostas Papadimitriou
# Redistribution and use in source and binary forms, with or
4 52271184 Kostas Papadimitriou
# without modification, are permitted provided that the following
5 52271184 Kostas Papadimitriou
# conditions are met:
6 52271184 Kostas Papadimitriou
#
7 52271184 Kostas Papadimitriou
#   1. Redistributions of source code must retain the above
8 52271184 Kostas Papadimitriou
#      copyright notice, this list of conditions and the following
9 52271184 Kostas Papadimitriou
#      disclaimer.
10 52271184 Kostas Papadimitriou
#
11 52271184 Kostas Papadimitriou
#   2. Redistributions in binary form must reproduce the above
12 52271184 Kostas Papadimitriou
#      copyright notice, this list of conditions and the following
13 52271184 Kostas Papadimitriou
#      disclaimer in the documentation and/or other materials
14 52271184 Kostas Papadimitriou
#      provided with the distribution.
15 52271184 Kostas Papadimitriou
#
16 52271184 Kostas Papadimitriou
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 52271184 Kostas Papadimitriou
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 52271184 Kostas Papadimitriou
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 52271184 Kostas Papadimitriou
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 52271184 Kostas Papadimitriou
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 52271184 Kostas Papadimitriou
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 52271184 Kostas Papadimitriou
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 52271184 Kostas Papadimitriou
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 52271184 Kostas Papadimitriou
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 52271184 Kostas Papadimitriou
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 52271184 Kostas Papadimitriou
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 52271184 Kostas Papadimitriou
# POSSIBILITY OF SUCH DAMAGE.
28 52271184 Kostas Papadimitriou
#
29 52271184 Kostas Papadimitriou
# The views and conclusions contained in the software and
30 52271184 Kostas Papadimitriou
# documentation are those of the authors and should not be
31 52271184 Kostas Papadimitriou
# interpreted as representing official policies, either expressed
32 52271184 Kostas Papadimitriou
# or implied, of GRNET S.A.
33 52271184 Kostas Papadimitriou
34 52271184 Kostas Papadimitriou
35 872ca586 Kostas Papadimitriou
import os
36 872ca586 Kostas Papadimitriou
import sys
37 872ca586 Kostas Papadimitriou
38 872ca586 Kostas Papadimitriou
from fnmatch import fnmatchcase
39 872ca586 Kostas Papadimitriou
from distutils.util import convert_path
40 c1468bcc Kostas Papadimitriou
from setuptools import setup, find_packages
41 c1468bcc Kostas Papadimitriou
42 1cf03785 Kostas Papadimitriou
HERE = os.path.abspath(os.path.normpath(os.path.dirname(__file__)))
43 1cf03785 Kostas Papadimitriou
try:
44 1cf03785 Kostas Papadimitriou
    # try to update the version file
45 1cf03785 Kostas Papadimitriou
    from synnefo.util import version
46 1cf03785 Kostas Papadimitriou
    version.update_version('cloudcms', 'version', HERE)
47 1cf03785 Kostas Papadimitriou
except ImportError:
48 1cf03785 Kostas Papadimitriou
    pass
49 1cf03785 Kostas Papadimitriou
50 1cf03785 Kostas Papadimitriou
from cloudcms.version import __version__
51 1cf03785 Kostas Papadimitriou
52 1cf03785 Kostas Papadimitriou
# Package info
53 1cf03785 Kostas Papadimitriou
VERSION = __version__
54 1cf03785 Kostas Papadimitriou
55 1cf03785 Kostas Papadimitriou
56 872ca586 Kostas Papadimitriou
INSTALL_REQUIRES = [
57 feba5ad6 Kostas Papadimitriou
    'snf-common>0.9',
58 d63539ef Kostas Papadimitriou
    'Django >=1.2.3, <1.3',
59 33818d21 Kostas Papadimitriou
    'South>=0.7',
60 15f0902d Kostas Papadimitriou
    'feincms >=1.4.2, <1.4.9',
61 15f0902d Kostas Papadimitriou
    'django-pagination >=1.0.5',
62 cac508bb Kostas Papadimitriou
    'django-mptt >= 0.5.2, <0.6',
63 cac508bb Kostas Papadimitriou
    'lxml'
64 872ca586 Kostas Papadimitriou
]
65 872ca586 Kostas Papadimitriou
CLASSIFIERS = []
66 872ca586 Kostas Papadimitriou
67 d63539ef Kostas Papadimitriou
68 d63539ef Kostas Papadimitriou
# Provided as an attribute, so you can append to these instead
69 d63539ef Kostas Papadimitriou
# of replicating them:
70 d63539ef Kostas Papadimitriou
standard_exclude = ('*.py', '*.pyc', '*$py.class', '*~', '.*', '*.bak')
71 d63539ef Kostas Papadimitriou
standard_exclude_directories = ('.*', 'CVS', '_darcs', './build',
72 d63539ef Kostas Papadimitriou
                                './dist', 'EGG-INFO', '*.egg-info')
73 d63539ef Kostas Papadimitriou
74 d63539ef Kostas Papadimitriou
def find_package_data(
75 d63539ef Kostas Papadimitriou
    where='.', package='',
76 d63539ef Kostas Papadimitriou
    exclude=standard_exclude,
77 d63539ef Kostas Papadimitriou
    exclude_directories=standard_exclude_directories,
78 d63539ef Kostas Papadimitriou
    only_in_packages=True,
79 d63539ef Kostas Papadimitriou
    show_ignored=False):
80 d63539ef Kostas Papadimitriou
    """
81 d63539ef Kostas Papadimitriou
    Return a dictionary suitable for use in ``package_data``
82 d63539ef Kostas Papadimitriou
    in a distutils ``setup.py`` file.
83 d63539ef Kostas Papadimitriou

84 d63539ef Kostas Papadimitriou
    The dictionary looks like::
85 d63539ef Kostas Papadimitriou

86 d63539ef Kostas Papadimitriou
        {'package': [files]}
87 d63539ef Kostas Papadimitriou

88 d63539ef Kostas Papadimitriou
    Where ``files`` is a list of all the files in that package that
89 d63539ef Kostas Papadimitriou
    don't match anything in ``exclude``.
90 d63539ef Kostas Papadimitriou

91 d63539ef Kostas Papadimitriou
    If ``only_in_packages`` is true, then top-level directories that
92 d63539ef Kostas Papadimitriou
    are not packages won't be included (but directories under packages
93 d63539ef Kostas Papadimitriou
    will).
94 d63539ef Kostas Papadimitriou

95 d63539ef Kostas Papadimitriou
    Directories matching any pattern in ``exclude_directories`` will
96 d63539ef Kostas Papadimitriou
    be ignored; by default directories with leading ``.``, ``CVS``,
97 d63539ef Kostas Papadimitriou
    and ``_darcs`` will be ignored.
98 d63539ef Kostas Papadimitriou

99 d63539ef Kostas Papadimitriou
    If ``show_ignored`` is true, then all the files that aren't
100 d63539ef Kostas Papadimitriou
    included in package data are shown on stderr (for debugging
101 d63539ef Kostas Papadimitriou
    purposes).
102 d63539ef Kostas Papadimitriou

103 d63539ef Kostas Papadimitriou
    Note patterns use wildcards, or can be exact paths (including
104 d63539ef Kostas Papadimitriou
    leading ``./``), and all searching is case-insensitive.
105 d63539ef Kostas Papadimitriou
    """
106 d63539ef Kostas Papadimitriou
107 d63539ef Kostas Papadimitriou
    out = {}
108 d63539ef Kostas Papadimitriou
    stack = [(convert_path(where), '', package, only_in_packages)]
109 d63539ef Kostas Papadimitriou
    while stack:
110 d63539ef Kostas Papadimitriou
        where, prefix, package, only_in_packages = stack.pop(0)
111 d63539ef Kostas Papadimitriou
        for name in os.listdir(where):
112 d63539ef Kostas Papadimitriou
            fn = os.path.join(where, name)
113 d63539ef Kostas Papadimitriou
            if os.path.isdir(fn):
114 d63539ef Kostas Papadimitriou
                bad_name = False
115 d63539ef Kostas Papadimitriou
                for pattern in exclude_directories:
116 d63539ef Kostas Papadimitriou
                    if (fnmatchcase(name, pattern)
117 d63539ef Kostas Papadimitriou
                        or fn.lower() == pattern.lower()):
118 d63539ef Kostas Papadimitriou
                        bad_name = True
119 d63539ef Kostas Papadimitriou
                        if show_ignored:
120 d63539ef Kostas Papadimitriou
                            print >> sys.stderr, (
121 d63539ef Kostas Papadimitriou
                                "Directory %s ignored by pattern %s"
122 d63539ef Kostas Papadimitriou
                                % (fn, pattern))
123 d63539ef Kostas Papadimitriou
                        break
124 d63539ef Kostas Papadimitriou
                if bad_name:
125 d63539ef Kostas Papadimitriou
                    continue
126 d63539ef Kostas Papadimitriou
                if (os.path.isfile(os.path.join(fn, '__init__.py'))
127 d63539ef Kostas Papadimitriou
                    and not prefix):
128 d63539ef Kostas Papadimitriou
                    if not package:
129 d63539ef Kostas Papadimitriou
                        new_package = name
130 d63539ef Kostas Papadimitriou
                    else:
131 d63539ef Kostas Papadimitriou
                        new_package = package + '.' + name
132 d63539ef Kostas Papadimitriou
                    stack.append((fn, '', new_package, False))
133 d63539ef Kostas Papadimitriou
                else:
134 d63539ef Kostas Papadimitriou
                    stack.append((fn, prefix + name + '/', package, only_in_packages))
135 d63539ef Kostas Papadimitriou
            elif package or not only_in_packages:
136 d63539ef Kostas Papadimitriou
                # is a file
137 d63539ef Kostas Papadimitriou
                bad_name = False
138 d63539ef Kostas Papadimitriou
                for pattern in exclude:
139 d63539ef Kostas Papadimitriou
                    if (fnmatchcase(name, pattern)
140 d63539ef Kostas Papadimitriou
                        or fn.lower() == pattern.lower()):
141 d63539ef Kostas Papadimitriou
                        bad_name = True
142 d63539ef Kostas Papadimitriou
                        if show_ignored:
143 d63539ef Kostas Papadimitriou
                            print >> sys.stderr, (
144 d63539ef Kostas Papadimitriou
                                "File %s ignored by pattern %s"
145 d63539ef Kostas Papadimitriou
                                % (fn, pattern))
146 d63539ef Kostas Papadimitriou
                        break
147 d63539ef Kostas Papadimitriou
                if bad_name:
148 d63539ef Kostas Papadimitriou
                    continue
149 d63539ef Kostas Papadimitriou
                out.setdefault(package, []).append(prefix+name)
150 d63539ef Kostas Papadimitriou
    return out
151 d63539ef Kostas Papadimitriou
152 c1468bcc Kostas Papadimitriou
setup(
153 872ca586 Kostas Papadimitriou
    name = 'snf-cloudcms',
154 872ca586 Kostas Papadimitriou
    version = VERSION,
155 872ca586 Kostas Papadimitriou
    license = 'BSD',
156 872ca586 Kostas Papadimitriou
    url = 'http://code.grnet.gr/',
157 872ca586 Kostas Papadimitriou
    classifiers = CLASSIFIERS,
158 872ca586 Kostas Papadimitriou
159 872ca586 Kostas Papadimitriou
    author = 'Package author',
160 872ca586 Kostas Papadimitriou
    author_email = 'author@grnet.gr',
161 872ca586 Kostas Papadimitriou
    maintainer = 'Package maintainer',
162 872ca586 Kostas Papadimitriou
    maintainer_email = 'maintainer@grnet.gr',
163 872ca586 Kostas Papadimitriou
164 872ca586 Kostas Papadimitriou
    packages = find_packages('.'),
165 872ca586 Kostas Papadimitriou
    package_dir= {'': '.'},
166 872ca586 Kostas Papadimitriou
    include_package_data = True,
167 d63539ef Kostas Papadimitriou
    package_data=find_package_data('.'),
168 872ca586 Kostas Papadimitriou
    zip_safe = False,
169 872ca586 Kostas Papadimitriou
170 872ca586 Kostas Papadimitriou
    install_requires = INSTALL_REQUIRES,
171 872ca586 Kostas Papadimitriou
172 872ca586 Kostas Papadimitriou
    dependency_links = ['http://docs.dev.grnet.gr/pypi'],
173 c1468bcc Kostas Papadimitriou
174 c1468bcc Kostas Papadimitriou
    entry_points = {
175 c1468bcc Kostas Papadimitriou
     'synnefo': [
176 872ca586 Kostas Papadimitriou
         'default_settings = cloudcms.synnefo_settings',
177 ae70c3c6 Kostas Papadimitriou
         'web_apps = cloudcms.synnefo_settings:cloudcms_apps',
178 ae70c3c6 Kostas Papadimitriou
         'web_middleware = cloudcms.synnefo_settings:cloudcms_middlewares',
179 ae70c3c6 Kostas Papadimitriou
         'web_context_processors = cloudcms.synnefo_settings:cloudcms_context_processors',
180 feba5ad6 Kostas Papadimitriou
         'urls = cloudcms.urls:urls',
181 ae70c3c6 Kostas Papadimitriou
         'web_static = cloudcms.synnefo_settings:cloudcms_staticfiles'
182 c1468bcc Kostas Papadimitriou
         ]
183 c1468bcc Kostas Papadimitriou
    },
184 c1468bcc Kostas Papadimitriou
185 c1468bcc Kostas Papadimitriou
)