Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-tools / setup.py @ de1e0489

History | View | Annotate | Download (7.2 kB)

1 f2d7b5ab Antony Chazapis
#!/usr/bin/env python
2 f2d7b5ab Antony Chazapis
3 2e662088 Antony Chazapis
# Copyright 2011-2012 GRNET S.A. All rights reserved.
4 05f6d5c0 chazapis
#
5 05f6d5c0 chazapis
# Redistribution and use in source and binary forms, with or
6 05f6d5c0 chazapis
# without modification, are permitted provided that the following
7 05f6d5c0 chazapis
# conditions are met:
8 05f6d5c0 chazapis
#
9 05f6d5c0 chazapis
#   1. Redistributions of source code must retain the above
10 05f6d5c0 chazapis
#      copyright notice, this list of conditions and the following
11 05f6d5c0 chazapis
#      disclaimer.
12 05f6d5c0 chazapis
#
13 05f6d5c0 chazapis
#   2. Redistributions in binary form must reproduce the above
14 05f6d5c0 chazapis
#      copyright notice, this list of conditions and the following
15 05f6d5c0 chazapis
#      disclaimer in the documentation and/or other materials
16 05f6d5c0 chazapis
#      provided with the distribution.
17 05f6d5c0 chazapis
#
18 05f6d5c0 chazapis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
19 05f6d5c0 chazapis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 05f6d5c0 chazapis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 05f6d5c0 chazapis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
22 05f6d5c0 chazapis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 05f6d5c0 chazapis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 05f6d5c0 chazapis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
25 05f6d5c0 chazapis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 05f6d5c0 chazapis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 05f6d5c0 chazapis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28 05f6d5c0 chazapis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 05f6d5c0 chazapis
# POSSIBILITY OF SUCH DAMAGE.
30 05f6d5c0 chazapis
#
31 05f6d5c0 chazapis
# The views and conclusions contained in the software and
32 05f6d5c0 chazapis
# documentation are those of the authors and should not be
33 05f6d5c0 chazapis
# interpreted as representing official policies, either expressed
34 05f6d5c0 chazapis
# or implied, of GRNET S.A.
35 8c306eab Kostas Papadimitriou
#
36 8c306eab Kostas Papadimitriou
37 8c306eab Kostas Papadimitriou
import distribute_setup
38 8c306eab Kostas Papadimitriou
distribute_setup.use_setuptools()
39 05f6d5c0 chazapis
40 1ad8831f root
import os
41 05f6d5c0 chazapis
42 05f6d5c0 chazapis
from distutils.util import convert_path
43 8c306eab Kostas Papadimitriou
from fnmatch import fnmatchcase
44 1ad8831f root
from setuptools import setup, find_packages
45 8c306eab Kostas Papadimitriou
46 8c306eab Kostas Papadimitriou
HERE = os.path.abspath(os.path.normpath(os.path.dirname(__file__)))
47 f5d58753 Kostas Papadimitriou
try:
48 f5d58753 Kostas Papadimitriou
    # try to update the version file
49 f5d58753 Kostas Papadimitriou
    from synnefo.util import version
50 f5d58753 Kostas Papadimitriou
    version.update_version('pithos.tools', 'version', HERE)
51 f5d58753 Kostas Papadimitriou
except ImportError:
52 f5d58753 Kostas Papadimitriou
    pass
53 f5d58753 Kostas Papadimitriou
54 ee71c0d5 Kostas Papadimitriou
from pithos.tools.version import __version__
55 8c306eab Kostas Papadimitriou
56 8c306eab Kostas Papadimitriou
# Package info
57 8c306eab Kostas Papadimitriou
VERSION = __version__
58 8c306eab Kostas Papadimitriou
README = open(os.path.join(HERE, 'README')).read()
59 8c306eab Kostas Papadimitriou
CHANGES = open(os.path.join(HERE, 'Changelog')).read()
60 8c306eab Kostas Papadimitriou
SHORT_DESCRIPTION = 'Package short description'
61 1ad8831f root
62 8c306eab Kostas Papadimitriou
PACKAGES_ROOT = '.'
63 8c306eab Kostas Papadimitriou
PACKAGES = find_packages(PACKAGES_ROOT)
64 5a96180b Antony Chazapis
65 8c306eab Kostas Papadimitriou
# Package meta
66 eed9e431 Kostas Papadimitriou
CLASSIFIERS=[
67 2cee1378 Kostas Papadimitriou
    'Development Status :: 3 - Alpha',
68 2cee1378 Kostas Papadimitriou
    'Operating System :: OS Independent',
69 2cee1378 Kostas Papadimitriou
    'Programming Language :: Python',
70 2cee1378 Kostas Papadimitriou
    'Topic :: Utilities',
71 2cee1378 Kostas Papadimitriou
    'License :: OSI Approved :: BSD License',
72 2cee1378 Kostas Papadimitriou
],
73 5a96180b Antony Chazapis
74 8c306eab Kostas Papadimitriou
# Package requirements
75 5a96180b Antony Chazapis
INSTALL_REQUIRES = [
76 4f60d358 Kostas Papadimitriou
    'snf-common>=0.9.0rc'
77 5a96180b Antony Chazapis
]
78 f2d7b5ab Antony Chazapis
79 8c306eab Kostas Papadimitriou
EXTRAS_REQUIRES = {
80 8c306eab Kostas Papadimitriou
}
81 8c306eab Kostas Papadimitriou
82 8c306eab Kostas Papadimitriou
TESTS_REQUIRES = [
83 8c306eab Kostas Papadimitriou
]
84 05f6d5c0 chazapis
85 8c306eab Kostas Papadimitriou
86 8c306eab Kostas Papadimitriou
# Provided as an attribute, so you can append to these instead
87 8c306eab Kostas Papadimitriou
# of replicating them:
88 8c306eab Kostas Papadimitriou
standard_exclude = ["*.py", "*.pyc", "*$py.class", "*~", ".*", "*.bak"]
89 8c306eab Kostas Papadimitriou
standard_exclude_directories = [
90 8c306eab Kostas Papadimitriou
    ".*", "CVS", "_darcs", "./build", "./dist", "EGG-INFO", "*.egg-info", "snf-0.7"
91 8c306eab Kostas Papadimitriou
]
92 05f6d5c0 chazapis
93 05f6d5c0 chazapis
# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
94 05f6d5c0 chazapis
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
95 05f6d5c0 chazapis
# Note: you may want to copy this into your setup.py file verbatim, as
96 05f6d5c0 chazapis
# you can't import this from another package, when you don't know if
97 05f6d5c0 chazapis
# that package is installed yet.
98 05f6d5c0 chazapis
def find_package_data(
99 8c306eab Kostas Papadimitriou
    where=".",
100 8c306eab Kostas Papadimitriou
    package="",
101 05f6d5c0 chazapis
    exclude=standard_exclude,
102 05f6d5c0 chazapis
    exclude_directories=standard_exclude_directories,
103 05f6d5c0 chazapis
    only_in_packages=True,
104 05f6d5c0 chazapis
    show_ignored=False):
105 05f6d5c0 chazapis
    """
106 05f6d5c0 chazapis
    Return a dictionary suitable for use in ``package_data``
107 05f6d5c0 chazapis
    in a distutils ``setup.py`` file.
108 05f6d5c0 chazapis

109 05f6d5c0 chazapis
    The dictionary looks like::
110 05f6d5c0 chazapis

111 8c306eab Kostas Papadimitriou
        {"package": [files]}
112 05f6d5c0 chazapis

113 05f6d5c0 chazapis
    Where ``files`` is a list of all the files in that package that
114 8c306eab Kostas Papadimitriou
    don"t match anything in ``exclude``.
115 05f6d5c0 chazapis

116 05f6d5c0 chazapis
    If ``only_in_packages`` is true, then top-level directories that
117 8c306eab Kostas Papadimitriou
    are not packages won"t be included (but directories under packages
118 05f6d5c0 chazapis
    will).
119 05f6d5c0 chazapis

120 05f6d5c0 chazapis
    Directories matching any pattern in ``exclude_directories`` will
121 05f6d5c0 chazapis
    be ignored; by default directories with leading ``.``, ``CVS``,
122 05f6d5c0 chazapis
    and ``_darcs`` will be ignored.
123 05f6d5c0 chazapis

124 8c306eab Kostas Papadimitriou
    If ``show_ignored`` is true, then all the files that aren"t
125 05f6d5c0 chazapis
    included in package data are shown on stderr (for debugging
126 05f6d5c0 chazapis
    purposes).
127 05f6d5c0 chazapis

128 05f6d5c0 chazapis
    Note patterns use wildcards, or can be exact paths (including
129 05f6d5c0 chazapis
    leading ``./``), and all searching is case-insensitive.
130 05f6d5c0 chazapis
    """
131 05f6d5c0 chazapis
    out = {}
132 8c306eab Kostas Papadimitriou
    stack = [(convert_path(where), "", package, only_in_packages)]
133 05f6d5c0 chazapis
    while stack:
134 05f6d5c0 chazapis
        where, prefix, package, only_in_packages = stack.pop(0)
135 05f6d5c0 chazapis
        for name in os.listdir(where):
136 05f6d5c0 chazapis
            fn = os.path.join(where, name)
137 05f6d5c0 chazapis
            if os.path.isdir(fn):
138 05f6d5c0 chazapis
                bad_name = False
139 05f6d5c0 chazapis
                for pattern in exclude_directories:
140 05f6d5c0 chazapis
                    if (fnmatchcase(name, pattern)
141 05f6d5c0 chazapis
                        or fn.lower() == pattern.lower()):
142 05f6d5c0 chazapis
                        bad_name = True
143 05f6d5c0 chazapis
                        if show_ignored:
144 05f6d5c0 chazapis
                            print >> sys.stderr, (
145 05f6d5c0 chazapis
                                "Directory %s ignored by pattern %s"
146 05f6d5c0 chazapis
                                % (fn, pattern))
147 05f6d5c0 chazapis
                        break
148 05f6d5c0 chazapis
                if bad_name:
149 05f6d5c0 chazapis
                    continue
150 8c306eab Kostas Papadimitriou
                if (os.path.isfile(os.path.join(fn, "__init__.py"))
151 05f6d5c0 chazapis
                    and not prefix):
152 05f6d5c0 chazapis
                    if not package:
153 05f6d5c0 chazapis
                        new_package = name
154 05f6d5c0 chazapis
                    else:
155 8c306eab Kostas Papadimitriou
                        new_package = package + "." + name
156 8c306eab Kostas Papadimitriou
                    stack.append((fn, "", new_package, False))
157 05f6d5c0 chazapis
                else:
158 8c306eab Kostas Papadimitriou
                    stack.append((fn, prefix + name + "/", package, only_in_packages))
159 05f6d5c0 chazapis
            elif package or not only_in_packages:
160 05f6d5c0 chazapis
                # is a file
161 05f6d5c0 chazapis
                bad_name = False
162 05f6d5c0 chazapis
                for pattern in exclude:
163 05f6d5c0 chazapis
                    if (fnmatchcase(name, pattern)
164 05f6d5c0 chazapis
                        or fn.lower() == pattern.lower()):
165 05f6d5c0 chazapis
                        bad_name = True
166 05f6d5c0 chazapis
                        if show_ignored:
167 05f6d5c0 chazapis
                            print >> sys.stderr, (
168 05f6d5c0 chazapis
                                "File %s ignored by pattern %s"
169 05f6d5c0 chazapis
                                % (fn, pattern))
170 05f6d5c0 chazapis
                        break
171 05f6d5c0 chazapis
                if bad_name:
172 05f6d5c0 chazapis
                    continue
173 05f6d5c0 chazapis
                out.setdefault(package, []).append(prefix+name)
174 05f6d5c0 chazapis
    return out
175 05f6d5c0 chazapis
176 f2d7b5ab Antony Chazapis
setup(
177 8c306eab Kostas Papadimitriou
    name = 'snf-pithos-tools',
178 8c306eab Kostas Papadimitriou
    version = VERSION,
179 8c306eab Kostas Papadimitriou
    license = 'BSD',
180 8c306eab Kostas Papadimitriou
    url = 'http://code.grnet.gr/',
181 8c306eab Kostas Papadimitriou
    description = SHORT_DESCRIPTION,
182 8c306eab Kostas Papadimitriou
    long_description=README + '\n\n' +  CHANGES,
183 8c306eab Kostas Papadimitriou
    classifiers = CLASSIFIERS,
184 8c306eab Kostas Papadimitriou
185 8c306eab Kostas Papadimitriou
    author = 'Package author',
186 8c306eab Kostas Papadimitriou
    author_email = 'author@grnet.gr',
187 8c306eab Kostas Papadimitriou
    maintainer = 'Package maintainer',
188 8c306eab Kostas Papadimitriou
    maintainer_email = 'maintainer@grnet.gr',
189 8c306eab Kostas Papadimitriou
190 8c306eab Kostas Papadimitriou
    namespace_packages = ['pithos'],
191 8c306eab Kostas Papadimitriou
    packages = PACKAGES,
192 8c306eab Kostas Papadimitriou
    package_dir= {'': PACKAGES_ROOT},
193 8c306eab Kostas Papadimitriou
    include_package_data = True,
194 8c306eab Kostas Papadimitriou
    package_data = find_package_data('.'),
195 8c306eab Kostas Papadimitriou
    zip_safe = False,
196 8c306eab Kostas Papadimitriou
197 8c306eab Kostas Papadimitriou
    dependency_links = [
198 bd9f302a Kostas Papadimitriou
        'http://docs.dev.grnet.gr/pypi/'],
199 8c306eab Kostas Papadimitriou
200 8c306eab Kostas Papadimitriou
    install_requires = INSTALL_REQUIRES,
201 8c306eab Kostas Papadimitriou
    extras_require = EXTRAS_REQUIRES,
202 8c306eab Kostas Papadimitriou
    tests_require = TESTS_REQUIRES,
203 8c306eab Kostas Papadimitriou
204 8c306eab Kostas Papadimitriou
    entry_points = {
205 8c306eab Kostas Papadimitriou
     'console_scripts': [
206 bd9f302a Kostas Papadimitriou
         'pithos-sh = pithos.tools.sh:main',
207 bd9f302a Kostas Papadimitriou
         'pithos-sync = pithos.tools.sync:main',
208 bd9f302a Kostas Papadimitriou
         'pithos-test = pithos.tools.test:main',
209 bd9f302a Kostas Papadimitriou
         'pithos-fs = pithos.tools.fs:main',
210 bd9f302a Kostas Papadimitriou
         'pithos-dispatcher = pithos.tools.dispatcher:main',
211 8c306eab Kostas Papadimitriou
         ],
212 8c306eab Kostas Papadimitriou
      },
213 f2d7b5ab Antony Chazapis
)