Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-tools / setup.py @ 473e2b08

History | View | Annotate | Download (7 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 473e2b08 Christos Stavrakakis
    # try to update the version file
49 473e2b08 Christos Stavrakakis
    from synnefo.util import version
50 473e2b08 Christos Stavrakakis
    version.update_version('pithos.tools', 'version', HERE)
51 f5d58753 Kostas Papadimitriou
except ImportError:
52 473e2b08 Christos Stavrakakis
    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 8c306eab Kostas Papadimitriou
CLASSIFIERS = []
67 5a96180b Antony Chazapis
68 8c306eab Kostas Papadimitriou
# Package requirements
69 5a96180b Antony Chazapis
INSTALL_REQUIRES = [
70 8becf803 Kostas Papadimitriou
    'snf-common>0.9.13',
71 6f6cec5a Sofia Papagiannaki
    'progress>=1.0'
72 5a96180b Antony Chazapis
]
73 f2d7b5ab Antony Chazapis
74 8c306eab Kostas Papadimitriou
EXTRAS_REQUIRES = {
75 8c306eab Kostas Papadimitriou
}
76 8c306eab Kostas Papadimitriou
77 8c306eab Kostas Papadimitriou
TESTS_REQUIRES = [
78 8c306eab Kostas Papadimitriou
]
79 05f6d5c0 chazapis
80 8c306eab Kostas Papadimitriou
81 8c306eab Kostas Papadimitriou
# Provided as an attribute, so you can append to these instead
82 8c306eab Kostas Papadimitriou
# of replicating them:
83 8c306eab Kostas Papadimitriou
standard_exclude = ["*.py", "*.pyc", "*$py.class", "*~", ".*", "*.bak"]
84 8c306eab Kostas Papadimitriou
standard_exclude_directories = [
85 8c306eab Kostas Papadimitriou
    ".*", "CVS", "_darcs", "./build", "./dist", "EGG-INFO", "*.egg-info", "snf-0.7"
86 8c306eab Kostas Papadimitriou
]
87 05f6d5c0 chazapis
88 05f6d5c0 chazapis
# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
89 05f6d5c0 chazapis
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
90 05f6d5c0 chazapis
# Note: you may want to copy this into your setup.py file verbatim, as
91 05f6d5c0 chazapis
# you can't import this from another package, when you don't know if
92 05f6d5c0 chazapis
# that package is installed yet.
93 2715ade4 Sofia Papagiannaki
94 2715ade4 Sofia Papagiannaki
95 05f6d5c0 chazapis
def find_package_data(
96 8c306eab Kostas Papadimitriou
    where=".",
97 8c306eab Kostas Papadimitriou
    package="",
98 05f6d5c0 chazapis
    exclude=standard_exclude,
99 05f6d5c0 chazapis
    exclude_directories=standard_exclude_directories,
100 05f6d5c0 chazapis
    only_in_packages=True,
101 2715ade4 Sofia Papagiannaki
        show_ignored=False):
102 05f6d5c0 chazapis
    """
103 05f6d5c0 chazapis
    Return a dictionary suitable for use in ``package_data``
104 05f6d5c0 chazapis
    in a distutils ``setup.py`` file.
105 05f6d5c0 chazapis

106 05f6d5c0 chazapis
    The dictionary looks like::
107 05f6d5c0 chazapis

108 8c306eab Kostas Papadimitriou
        {"package": [files]}
109 05f6d5c0 chazapis

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

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

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

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

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