Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-tools / setup.py @ 5adcc57e

History | View | Annotate | Download (6.9 kB)

1
#!/usr/bin/env python
2

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

    
37
import distribute_setup
38
distribute_setup.use_setuptools()
39

    
40
import os
41
import sys
42

    
43
from distutils.util import convert_path
44
from fnmatch import fnmatchcase
45
from setuptools import setup, find_packages
46

    
47
HERE = os.path.abspath(os.path.normpath(os.path.dirname(__file__)))
48

    
49
from pithos.tools.version import __version__
50

    
51
# Package info
52
VERSION = __version__
53
README = open(os.path.join(HERE, 'README')).read()
54
CHANGES = open(os.path.join(HERE, 'Changelog')).read()
55
SHORT_DESCRIPTION = 'Tools for Pithos file storage service'
56

    
57
PACKAGES_ROOT = '.'
58
PACKAGES = find_packages(PACKAGES_ROOT)
59

    
60
# Package meta
61
CLASSIFIERS = []
62

    
63
# Package requirements
64
INSTALL_REQUIRES = [
65
    'snf-common',
66
    'progress>=1.0'
67
]
68

    
69
EXTRAS_REQUIRES = {
70
}
71

    
72
TESTS_REQUIRES = [
73
]
74

    
75

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

    
83
# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
84
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
85
# Note: you may want to copy this into your setup.py file verbatim, as
86
# you can't import this from another package, when you don't know if
87
# that package is installed yet.
88

    
89

    
90
def find_package_data(
91
    where=".",
92
    package="",
93
    exclude=standard_exclude,
94
    exclude_directories=standard_exclude_directories,
95
    only_in_packages=True,
96
        show_ignored=False):
97
    """
98
    Return a dictionary suitable for use in ``package_data``
99
    in a distutils ``setup.py`` file.
100

101
    The dictionary looks like::
102

103
        {"package": [files]}
104

105
    Where ``files`` is a list of all the files in that package that
106
    don"t match anything in ``exclude``.
107

108
    If ``only_in_packages`` is true, then top-level directories that
109
    are not packages won"t be included (but directories under packages
110
    will).
111

112
    Directories matching any pattern in ``exclude_directories`` will
113
    be ignored; by default directories with leading ``.``, ``CVS``,
114
    and ``_darcs`` will be ignored.
115

116
    If ``show_ignored`` is true, then all the files that aren"t
117
    included in package data are shown on stderr (for debugging
118
    purposes).
119

120
    Note patterns use wildcards, or can be exact paths (including
121
    leading ``./``), and all searching is case-insensitive.
122
    """
123
    out = {}
124
    stack = [(convert_path(where), "", package, only_in_packages)]
125
    while stack:
126
        where, prefix, package, only_in_packages = stack.pop(0)
127
        for name in os.listdir(where):
128
            fn = os.path.join(where, name)
129
            if os.path.isdir(fn):
130
                bad_name = False
131
                for pattern in exclude_directories:
132
                    if (fnmatchcase(name, pattern)
133
                            or fn.lower() == pattern.lower()):
134
                        bad_name = True
135
                        if show_ignored:
136
                            print >> sys.stderr, (
137
                                "Directory %s ignored by pattern %s"
138
                                % (fn, pattern))
139
                        break
140
                if bad_name:
141
                    continue
142
                if (os.path.isfile(os.path.join(fn, "__init__.py"))
143
                        and not prefix):
144
                    if not package:
145
                        new_package = name
146
                    else:
147
                        new_package = package + "." + name
148
                    stack.append((fn, "", new_package, False))
149
                else:
150
                    stack.append(
151
                        (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-tools',
171
    version=VERSION,
172
    license='BSD',
173
    url='http://www.synnefo.org/',
174
    description=SHORT_DESCRIPTION,
175
    long_description=README + '\n\n' + CHANGES,
176
    classifiers=CLASSIFIERS,
177

    
178
    author='Synnefo development team',
179
    author_email='synnefo-devel@googlegroups.com',
180
    maintainer='Synnefo development team',
181
    maintainer_email='synnefo-devel@googlegroups.com',
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=['http://docs.dev.grnet.gr/pypi/'],
191

    
192
    install_requires=INSTALL_REQUIRES,
193
    extras_require=EXTRAS_REQUIRES,
194
    tests_require=TESTS_REQUIRES,
195

    
196
    entry_points={
197
        'console_scripts': [
198
            'pithos-sh = pithos.tools.sh:main',
199
            'pithos-sync = pithos.tools.sync:main',
200
            'pithos-test = pithos.tools.test:main',
201
            'pithos-fs = pithos.tools.fs:main',
202
            'pithos-dispatcher = pithos.tools.dispatcher:main',
203
        ],
204
    },
205
)