Updated snf-common required version
[pithos] / snf-pithos-backend / setup.py
1 # Copyright 2011 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
40 from distutils.util import convert_path
41 from fnmatch import fnmatchcase
42 from setuptools import setup, find_packages
43
44 HERE = os.path.abspath(os.path.normpath(os.path.dirname(__file__)))
45 try:
46     # try to update the version file
47     from synnefo.util import version
48     version.update_version('pithos.backends', 'version', HERE)
49 except ImportError:
50     pass
51
52 from pithos.backends.version import __version__
53
54 # Package info
55 VERSION = __version__
56 README = open(os.path.join(HERE, 'README')).read()
57 CHANGES = open(os.path.join(HERE, 'Changelog')).read()
58 SHORT_DESCRIPTION = 'Package short description'
59
60 PACKAGES_ROOT = '.'
61 PACKAGES = find_packages(PACKAGES_ROOT)
62
63 # Package meta
64 CLASSIFIERS = []
65
66 # Package requirements
67 INSTALL_REQUIRES = [
68     'snf-common>=0.9.0',
69     'SQLAlchemy==0.6.3',
70 ]
71
72 EXTRAS_REQUIRES = {
73 }
74
75 TESTS_REQUIRES = [
76 ]
77
78
79 # Provided as an attribute, so you can append to these instead
80 # of replicating them:
81 standard_exclude = ["*.py", "*.pyc", "*$py.class", "*~", ".*", "*.bak"]
82 standard_exclude_directories = [
83     ".*", "CVS", "_darcs", "./build", "./dist", "EGG-INFO", "*.egg-info", "snf-0.7"
84 ]
85
86 # (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
87 # Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
88 # Note: you may want to copy this into your setup.py file verbatim, as
89 # you can't import this from another package, when you don't know if
90 # that package is installed yet.
91 def find_package_data(
92     where=".",
93     package="",
94     exclude=standard_exclude,
95     exclude_directories=standard_exclude_directories,
96     only_in_packages=True,
97     show_ignored=False):
98     """
99     Return a dictionary suitable for use in ``package_data``
100     in a distutils ``setup.py`` file.
101
102     The dictionary looks like::
103
104         {"package": [files]}
105
106     Where ``files`` is a list of all the files in that package that
107     don"t match anything in ``exclude``.
108
109     If ``only_in_packages`` is true, then top-level directories that
110     are not packages won"t be included (but directories under packages
111     will).
112
113     Directories matching any pattern in ``exclude_directories`` will
114     be ignored; by default directories with leading ``.``, ``CVS``,
115     and ``_darcs`` will be ignored.
116
117     If ``show_ignored`` is true, then all the files that aren"t
118     included in package data are shown on stderr (for debugging
119     purposes).
120
121     Note patterns use wildcards, or can be exact paths (including
122     leading ``./``), and all searching is case-insensitive.
123     """
124     out = {}
125     stack = [(convert_path(where), "", package, only_in_packages)]
126     while stack:
127         where, prefix, package, only_in_packages = stack.pop(0)
128         for name in os.listdir(where):
129             fn = os.path.join(where, name)
130             if os.path.isdir(fn):
131                 bad_name = False
132                 for pattern in exclude_directories:
133                     if (fnmatchcase(name, pattern)
134                         or fn.lower() == pattern.lower()):
135                         bad_name = True
136                         if show_ignored:
137                             print >> sys.stderr, (
138                                 "Directory %s ignored by pattern %s"
139                                 % (fn, pattern))
140                         break
141                 if bad_name:
142                     continue
143                 if (os.path.isfile(os.path.join(fn, "__init__.py"))
144                     and not prefix):
145                     if not package:
146                         new_package = name
147                     else:
148                         new_package = package + "." + name
149                     stack.append((fn, "", new_package, False))
150                 else:
151                     stack.append((fn, prefix + name + "/", package, only_in_packages))
152             elif package or not only_in_packages:
153                 # is a file
154                 bad_name = False
155                 for pattern in exclude:
156                     if (fnmatchcase(name, pattern)
157                         or fn.lower() == pattern.lower()):
158                         bad_name = True
159                         if show_ignored:
160                             print >> sys.stderr, (
161                                 "File %s ignored by pattern %s"
162                                 % (fn, pattern))
163                         break
164                 if bad_name:
165                     continue
166                 out.setdefault(package, []).append(prefix+name)
167     return out
168
169 setup(
170     name = 'snf-pithos-backend',
171     version = VERSION,
172     license = 'BSD',
173     url = 'http://code.grnet.gr/',
174     description = SHORT_DESCRIPTION,
175     long_description=README + '\n\n' +  CHANGES,
176     classifiers = CLASSIFIERS,
177
178     author = 'Package author',
179     author_email = 'author@grnet.gr',
180     maintainer = 'Package maintainer',
181     maintainer_email = 'maintainer@grnet.gr',
182
183     namespace_packages = ['pithos'],
184     packages = PACKAGES,
185     package_dir= {'': PACKAGES_ROOT},
186     include_package_data = True,
187     package_data = find_package_data('.'),
188     zip_safe = False,
189
190     dependency_links = [
191         'http://docs.dev.grnet.gr/pypi/'],
192
193     install_requires = INSTALL_REQUIRES,
194     extras_require = EXTRAS_REQUIRES,
195     tests_require = TESTS_REQUIRES,
196
197     entry_points = {
198      'console_scripts': [
199          ],
200       },
201 )
202