Statistics
| Branch: | Tag: | Revision:

root / snf-webproject / setup.py @ 95059648

History | View | Annotate | Download (6.7 kB)

1
# Copyright 2011, 2012, 2013 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 distribute_setup
36
distribute_setup.use_setuptools()
37

    
38
import os
39
import sys
40

    
41
from distutils.util import convert_path
42
from fnmatch import fnmatchcase
43
from setuptools import setup, find_packages
44

    
45
HERE = os.path.abspath(os.path.normpath(os.path.dirname(__file__)))
46

    
47
from synnefo.versions.webproject import __version__
48

    
49
# Package info
50
VERSION = __version__
51
README = open(os.path.join(HERE, 'README')).read()
52
SHORT_DESCRIPTION = "Synnefo common infrastructure for Django"
53

    
54
PACKAGES_ROOT = "."
55
PACKAGES = find_packages(PACKAGES_ROOT)
56

    
57
# Package meta
58
CLASSIFIERS = []
59

    
60
# Package requirements
61
INSTALL_REQUIRES = [
62
        'Django >=1.2, <1.3',
63
        'snf-common',
64
        'snf-django-lib',
65
]
66

    
67
EXTRAS_REQUIRES = {
68
}
69

    
70
TESTS_REQUIRES = [
71
]
72

    
73
# Provided as an attribute, so you can append to these instead
74
# of replicating them:
75
standard_exclude = ["*.py", "*.pyc", "*$py.class", "*~", ".*", "*.bak"]
76
standard_exclude_directories = [
77
    ".*", "CVS", "_darcs", "./build", "./dist", "EGG-INFO", "*.egg-info",
78
    "snf-0.7"
79
]
80

    
81
# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
82
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
83
# Note: you may want to copy this into your setup.py file verbatim, as
84
# you can't import this from another package, when you don't know if
85
# that package is installed yet.
86
def find_package_data(
87
    where=".",
88
    package="",
89
    exclude=standard_exclude,
90
    exclude_directories=standard_exclude_directories,
91
    only_in_packages=True,
92
    show_ignored=False):
93
    """
94
    Return a dictionary suitable for use in ``package_data``
95
    in a distutils ``setup.py`` file.
96

97
    The dictionary looks like::
98

99
        {"package": [files]}
100

101
    Where ``files`` is a list of all the files in that package that
102
    don"t match anything in ``exclude``.
103

104
    If ``only_in_packages`` is true, then top-level directories that
105
    are not packages won"t be included (but directories under packages
106
    will).
107

108
    Directories matching any pattern in ``exclude_directories`` will
109
    be ignored; by default directories with leading ``.``, ``CVS``,
110
    and ``_darcs`` will be ignored.
111

112
    If ``show_ignored`` is true, then all the files that aren"t
113
    included in package data are shown on stderr (for debugging
114
    purposes).
115

116
    Note patterns use wildcards, or can be exact paths (including
117
    leading ``./``), and all searching is case-insensitive.
118
    """
119
    out = {}
120
    stack = [(convert_path(where), "", package, only_in_packages)]
121
    while stack:
122
        where, prefix, package, only_in_packages = stack.pop(0)
123
        for name in os.listdir(where):
124
            fn = os.path.join(where, name)
125
            if os.path.isdir(fn):
126
                bad_name = False
127
                for pattern in exclude_directories:
128
                    if (fnmatchcase(name, pattern)
129
                        or fn.lower() == pattern.lower()):
130
                        bad_name = True
131
                        if show_ignored:
132
                            print >> sys.stderr, (
133
                                "Directory %s ignored by pattern %s"
134
                                % (fn, pattern))
135
                        break
136
                if bad_name:
137
                    continue
138
                if (os.path.isfile(os.path.join(fn, "__init__.py"))
139
                    and not prefix):
140
                    if not package:
141
                        new_package = name
142
                    else:
143
                        new_package = package + "." + name
144
                    stack.append((fn, "", new_package, False))
145
                else:
146
                    stack.append((fn, prefix + name + "/", package, only_in_packages))
147
            elif package or not only_in_packages:
148
                # is a file
149
                bad_name = False
150
                for pattern in exclude:
151
                    if (fnmatchcase(name, pattern)
152
                        or fn.lower() == pattern.lower()):
153
                        bad_name = True
154
                        if show_ignored:
155
                            print >> sys.stderr, (
156
                                "File %s ignored by pattern %s"
157
                                % (fn, pattern))
158
                        break
159
                if bad_name:
160
                    continue
161
                out.setdefault(package, []).append(prefix+name)
162
    return out
163

    
164
setup(
165
    name='snf-webproject',
166
    version=VERSION,
167
    license='BSD',
168
    url='http://www.synnefo.org/',
169
    description=SHORT_DESCRIPTION,
170
    long_description=README,
171
    classifiers=CLASSIFIERS,
172

    
173
    author='Synnefo development team',
174
    author_email='synnefo-devel@googlegroups.com',
175
    maintainer='Synnefo development team',
176
    maintainer_email='synnefo-devel@googlegroups.com',
177

    
178
    namespace_packages=['synnefo', 'synnefo.versions'],
179
    packages=PACKAGES,
180
    package_dir={'': PACKAGES_ROOT},
181
    include_package_data=True,
182
    package_data=find_package_data('.'),
183
    zip_safe=False,
184

    
185
    install_requires=INSTALL_REQUIRES,
186
    extras_require=EXTRAS_REQUIRES,
187
    tests_require=TESTS_REQUIRES,
188

    
189
    dependency_links=['http://www.synnefo.org/packages/pypi'],
190

    
191
    entry_points={
192
     'console_scripts': [
193
         'snf-manage = synnefo.webproject.manage:main',
194
         ],
195
     'synnefo': [
196
         'default_settings = synnefo.webproject.settings'
197
         ]
198
      },
199
)