Statistics
| Branch: | Tag: | Revision:

root / setup.py @ master

History | View | Annotate | Download (6.2 kB)

1
# Copyright 2012 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34

    
35
import os
36
import sys
37

    
38
from fnmatch import fnmatchcase
39
from distutils.util import convert_path
40
from setuptools import setup, find_packages
41

    
42
from cloudcms.version import __version__
43

    
44
# Package info
45
VERSION = __version__
46

    
47

    
48
INSTALL_REQUIRES = [
49
    'snf-common>0.9',
50
    'snf-webproject',
51
    'Django>=1.4, <1.5',
52
    'South>=0.7',
53
    'feincms>=1.6, <1.7',
54
    'django-pagination >=1.0.5',
55
    'django-mptt >= 0.5.2, <0.6',
56
    'lxml',
57
    'docutils',
58
    'PIL'
59
]
60

    
61
CLASSIFIERS = []
62

    
63

    
64
# Provided as an attribute, so you can append to these instead
65
# of replicating them:
66
standard_exclude = ('*.py', '*.pyc', '*$py.class', '*~', '.*', '*.bak')
67
standard_exclude_directories = ('.*', 'CVS', '_darcs', './build',
68
                                './dist', 'EGG-INFO', '*.egg-info')
69

    
70
def find_package_data(
71
    where='.', package='',
72
    exclude=standard_exclude,
73
    exclude_directories=standard_exclude_directories,
74
    only_in_packages=True,
75
    show_ignored=False):
76
    """
77
    Return a dictionary suitable for use in ``package_data``
78
    in a distutils ``setup.py`` file.
79

80
    The dictionary looks like::
81

82
        {'package': [files]}
83

84
    Where ``files`` is a list of all the files in that package that
85
    don't match anything in ``exclude``.
86

87
    If ``only_in_packages`` is true, then top-level directories that
88
    are not packages won't be included (but directories under packages
89
    will).
90

91
    Directories matching any pattern in ``exclude_directories`` will
92
    be ignored; by default directories with leading ``.``, ``CVS``,
93
    and ``_darcs`` will be ignored.
94

95
    If ``show_ignored`` is true, then all the files that aren't
96
    included in package data are shown on stderr (for debugging
97
    purposes).
98

99
    Note patterns use wildcards, or can be exact paths (including
100
    leading ``./``), and all searching is case-insensitive.
101
    """
102

    
103
    out = {}
104
    stack = [(convert_path(where), '', package, only_in_packages)]
105
    while stack:
106
        where, prefix, package, only_in_packages = stack.pop(0)
107
        for name in os.listdir(where):
108
            fn = os.path.join(where, name)
109
            if os.path.isdir(fn):
110
                bad_name = False
111
                for pattern in exclude_directories:
112
                    if (fnmatchcase(name, pattern)
113
                        or fn.lower() == pattern.lower()):
114
                        bad_name = True
115
                        if show_ignored:
116
                            print >> sys.stderr, (
117
                                "Directory %s ignored by pattern %s"
118
                                % (fn, pattern))
119
                        break
120
                if bad_name:
121
                    continue
122
                if (os.path.isfile(os.path.join(fn, '__init__.py'))
123
                    and not prefix):
124
                    if not package:
125
                        new_package = name
126
                    else:
127
                        new_package = package + '.' + name
128
                    stack.append((fn, '', new_package, False))
129
                else:
130
                    stack.append((fn, prefix + name + '/', package, only_in_packages))
131
            elif package or not only_in_packages:
132
                # is a file
133
                bad_name = False
134
                for pattern in exclude:
135
                    if (fnmatchcase(name, pattern)
136
                        or fn.lower() == pattern.lower()):
137
                        bad_name = True
138
                        if show_ignored:
139
                            print >> sys.stderr, (
140
                                "File %s ignored by pattern %s"
141
                                % (fn, pattern))
142
                        break
143
                if bad_name:
144
                    continue
145
                out.setdefault(package, []).append(prefix+name)
146
    return out
147

    
148
setup(
149
    name = 'snf-cloudcms',
150
    version = VERSION,
151
    license = 'BSD',
152
    url = 'http://code.grnet.gr/',
153
    classifiers = CLASSIFIERS,
154

    
155
    author = 'Package author',
156
    author_email = 'author@grnet.gr',
157
    maintainer = 'Package maintainer',
158
    maintainer_email = 'maintainer@grnet.gr',
159

    
160
    packages = find_packages('.'),
161
    package_dir= {'': '.'},
162
    include_package_data = True,
163
    package_data=find_package_data('.'),
164
    zip_safe = False,
165

    
166
    install_requires = INSTALL_REQUIRES,
167

    
168
    dependency_links = ['http://docs.dev.grnet.gr/pypi'],
169

    
170
    entry_points = {
171
     'synnefo': [
172
         'default_settings = cloudcms.synnefo_settings',
173
         'web_apps = cloudcms.synnefo_settings:cloudcms_apps',
174
         'web_middleware = cloudcms.synnefo_settings:cloudcms_middlewares',
175
         'web_context_processors = cloudcms.synnefo_settings:cloudcms_context_processors',
176
         'urls = cloudcms.urls:urlpatterns',
177
         'web_static = cloudcms.synnefo_settings:cloudcms_staticfiles',
178
         'loggers = cloudcms.synnefo_settings:loggers'
179
         ]
180
    },
181

    
182
)
183