Statistics
| Branch: | Tag: | Revision:

root / setup.py @ 64cd4730

History | View | Annotate | Download (6.2 kB)

1
#!/usr/bin/env python
2

    
3
# Copyright 2011 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
import os
37
import sys
38

    
39
from fnmatch import fnmatchcase
40
from distutils.util import convert_path
41

    
42
from setuptools import setup, find_packages
43
from astakos import get_version
44

    
45

    
46
VERSION = get_version().replace(' ', '')
47

    
48
INSTALL_REQUIRES = [
49
    'Django==1.2.3',
50
    'South==0.7',
51
    'httplib2==0.6.0'
52
]
53

    
54

    
55
def read(fname):
56
    return open(os.path.join(os.path.dirname(__file__), fname)).read()
57

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

    
64
# Provided as an attribute, so you can append to these instead
65
# of replicating them:
66
standard_exclude = ('*.py', '*.pyc', '*$py.class', '*~', '.*', '*.bak')
67
standard_exclude_directories = ('.*', 'CVS', '_darcs', './build',
68
                                './dist', 'EGG-INFO', '*.egg-info')
69

    
70
def find_package_data(
71
    where='.', package='',
72
    exclude=standard_exclude,
73
    exclude_directories=standard_exclude_directories,
74
    only_in_packages=True,
75
    show_ignored=False):
76
    """
77
    Return a dictionary suitable for use in ``package_data``
78
    in a distutils ``setup.py`` file.
79

80
    The dictionary looks like::
81

82
        {'package': [files]}
83

84
    Where ``files`` is a list of all the files in that package that
85
    don't match anything in ``exclude``.
86

87
    If ``only_in_packages`` is true, then top-level directories that
88
    are not packages won't be included (but directories under packages
89
    will).
90

91
    Directories matching any pattern in ``exclude_directories`` will
92
    be ignored; by default directories with leading ``.``, ``CVS``,
93
    and ``_darcs`` will be ignored.
94

95
    If ``show_ignored`` is true, then all the files that aren't
96
    included in package data are shown on stderr (for debugging
97
    purposes).
98

99
    Note patterns use wildcards, or can be exact paths (including
100
    leading ``./``), and all searching is case-insensitive.
101
    """
102
    
103
    out = {}
104
    stack = [(convert_path(where), '', package, only_in_packages)]
105
    while stack:
106
        where, prefix, package, only_in_packages = stack.pop(0)
107
        for name in os.listdir(where):
108
            fn = os.path.join(where, name)
109
            if os.path.isdir(fn):
110
                bad_name = False
111
                for pattern in exclude_directories:
112
                    if (fnmatchcase(name, pattern)
113
                        or fn.lower() == pattern.lower()):
114
                        bad_name = True
115
                        if show_ignored:
116
                            print >> sys.stderr, (
117
                                "Directory %s ignored by pattern %s"
118
                                % (fn, pattern))
119
                        break
120
                if bad_name:
121
                    continue
122
                if (os.path.isfile(os.path.join(fn, '__init__.py'))
123
                    and not prefix):
124
                    if not package:
125
                        new_package = name
126
                    else:
127
                        new_package = package + '.' + name
128
                    stack.append((fn, '', new_package, False))
129
                else:
130
                    stack.append((fn, prefix + name + '/', package, only_in_packages))
131
            elif package or not only_in_packages:
132
                # is a file
133
                bad_name = False
134
                for pattern in exclude:
135
                    if (fnmatchcase(name, pattern)
136
                        or fn.lower() == pattern.lower()):
137
                        bad_name = True
138
                        if show_ignored:
139
                            print >> sys.stderr, (
140
                                "File %s ignored by pattern %s"
141
                                % (fn, pattern))
142
                        break
143
                if bad_name:
144
                    continue
145
                out.setdefault(package, []).append(prefix+name)
146
    return out
147

    
148
setup(
149
    name='Astakos',
150
    version=VERSION,
151
    license='BSD',
152
    url='http://code.grnet.gr/projects/astakos',
153
    description='Astakos identity management service and tools',
154
        long_description=read('README'),
155
    classifiers=[
156
        'Development Status :: 3 - Alpha',
157
        'Operating System :: OS Independent',
158
        'Programming Language :: Python',
159
        'Topic :: Utilities',
160
        'License :: OSI Approved :: BSD License',
161
    ],
162
    
163
    author='GRNET',
164
    author_email='astakos@grnet.gr',
165
    
166
    packages=find_packages(),
167
    include_package_data=True,
168
    package_data=find_package_data('.'),
169
    zip_safe=False,
170
    
171
    #install_requires = INSTALL_REQUIRES,
172
    
173
    entry_points={
174
        'console_scripts': ['astakos-manage = astakos.manage:main']
175
    }
176
)