Statistics
| Branch: | Tag: | Revision:

root / snf-branding / setup.py @ 4b01493d

History | View | Annotate | Download (6.6 kB)

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

87 00326543 Kostas Papadimitriou
    The dictionary looks like::
88 00326543 Kostas Papadimitriou

89 00326543 Kostas Papadimitriou
        {"package": [files]}
90 00326543 Kostas Papadimitriou

91 00326543 Kostas Papadimitriou
    Where ``files`` is a list of all the files in that package that
92 00326543 Kostas Papadimitriou
    don"t match anything in ``exclude``.
93 00326543 Kostas Papadimitriou

94 00326543 Kostas Papadimitriou
    If ``only_in_packages`` is true, then top-level directories that
95 00326543 Kostas Papadimitriou
    are not packages won"t be included (but directories under packages
96 00326543 Kostas Papadimitriou
    will).
97 00326543 Kostas Papadimitriou

98 00326543 Kostas Papadimitriou
    Directories matching any pattern in ``exclude_directories`` will
99 00326543 Kostas Papadimitriou
    be ignored; by default directories with leading ``.``, ``CVS``,
100 00326543 Kostas Papadimitriou
    and ``_darcs`` will be ignored.
101 00326543 Kostas Papadimitriou

102 00326543 Kostas Papadimitriou
    If ``show_ignored`` is true, then all the files that aren"t
103 00326543 Kostas Papadimitriou
    included in package data are shown on stderr (for debugging
104 00326543 Kostas Papadimitriou
    purposes).
105 00326543 Kostas Papadimitriou

106 00326543 Kostas Papadimitriou
    Note patterns use wildcards, or can be exact paths (including
107 00326543 Kostas Papadimitriou
    leading ``./``), and all searching is case-insensitive.
108 00326543 Kostas Papadimitriou
    """
109 00326543 Kostas Papadimitriou
    out = {}
110 00326543 Kostas Papadimitriou
    stack = [(convert_path(where), "", package, only_in_packages)]
111 00326543 Kostas Papadimitriou
    while stack:
112 00326543 Kostas Papadimitriou
        where, prefix, package, only_in_packages = stack.pop(0)
113 00326543 Kostas Papadimitriou
        for name in os.listdir(where):
114 00326543 Kostas Papadimitriou
            fn = os.path.join(where, name)
115 00326543 Kostas Papadimitriou
            if os.path.isdir(fn):
116 00326543 Kostas Papadimitriou
                bad_name = False
117 00326543 Kostas Papadimitriou
                for pattern in exclude_directories:
118 00326543 Kostas Papadimitriou
                    if (fnmatchcase(name, pattern)
119 00326543 Kostas Papadimitriou
                        or fn.lower() == pattern.lower()):
120 00326543 Kostas Papadimitriou
                        bad_name = True
121 00326543 Kostas Papadimitriou
                        if show_ignored:
122 00326543 Kostas Papadimitriou
                            print >> sys.stderr, (
123 00326543 Kostas Papadimitriou
                                "Directory %s ignored by pattern %s"
124 00326543 Kostas Papadimitriou
                                % (fn, pattern))
125 00326543 Kostas Papadimitriou
                        break
126 00326543 Kostas Papadimitriou
                if bad_name:
127 00326543 Kostas Papadimitriou
                    continue
128 00326543 Kostas Papadimitriou
                if (os.path.isfile(os.path.join(fn, "__init__.py"))
129 00326543 Kostas Papadimitriou
                    and not prefix):
130 00326543 Kostas Papadimitriou
                    if not package:
131 00326543 Kostas Papadimitriou
                        new_package = name
132 00326543 Kostas Papadimitriou
                    else:
133 00326543 Kostas Papadimitriou
                        new_package = package + "." + name
134 00326543 Kostas Papadimitriou
                    stack.append((fn, "", new_package, False))
135 00326543 Kostas Papadimitriou
                else:
136 00326543 Kostas Papadimitriou
                    stack.append((fn, prefix + name + "/", package, only_in_packages))
137 00326543 Kostas Papadimitriou
            elif package or not only_in_packages:
138 00326543 Kostas Papadimitriou
                # is a file
139 00326543 Kostas Papadimitriou
                bad_name = False
140 00326543 Kostas Papadimitriou
                for pattern in exclude:
141 00326543 Kostas Papadimitriou
                    if (fnmatchcase(name, pattern)
142 00326543 Kostas Papadimitriou
                        or fn.lower() == pattern.lower()):
143 00326543 Kostas Papadimitriou
                        bad_name = True
144 00326543 Kostas Papadimitriou
                        if show_ignored:
145 00326543 Kostas Papadimitriou
                            print >> sys.stderr, (
146 00326543 Kostas Papadimitriou
                                "File %s ignored by pattern %s"
147 00326543 Kostas Papadimitriou
                                % (fn, pattern))
148 00326543 Kostas Papadimitriou
                        break
149 00326543 Kostas Papadimitriou
                if bad_name:
150 00326543 Kostas Papadimitriou
                    continue
151 00326543 Kostas Papadimitriou
                out.setdefault(package, []).append(prefix+name)
152 00326543 Kostas Papadimitriou
    return out
153 9d889386 Olga Brani
setup(
154 4b01493d Georgios D. Tsoukalas
    name='snf-branding',
155 9d889386 Olga Brani
    version=VERSION,
156 9d889386 Olga Brani
    license='BSD',
157 9d889386 Olga Brani
    url='http://www.synnefo.org/',
158 9d889386 Olga Brani
    description=SHORT_DESCRIPTION,
159 9d889386 Olga Brani
    long_description=README + '\n\n' + CHANGES,
160 9d889386 Olga Brani
    classifiers=CLASSIFIERS,
161 9d889386 Olga Brani
162 9d889386 Olga Brani
    author='Synnefo development team',
163 9d889386 Olga Brani
    author_email='synnefo-devel@googlegroups.com',
164 9d889386 Olga Brani
    maintainer='Synnefo development team',
165 9d889386 Olga Brani
    maintainer_email='synnefo-devel@googlegroups.com',
166 9d889386 Olga Brani
167 9d889386 Olga Brani
    packages=PACKAGES,
168 9d889386 Olga Brani
    package_dir={'': PACKAGES_ROOT},
169 00326543 Kostas Papadimitriou
    package_data=find_package_data('.'),
170 9d889386 Olga Brani
    include_package_data=True,
171 9d889386 Olga Brani
    zip_safe=False,
172 9d889386 Olga Brani
173 9d889386 Olga Brani
    install_requires=INSTALL_REQUIRES,
174 9d889386 Olga Brani
175 9d889386 Olga Brani
    dependency_links=['http://docs.dev.grnet.gr/pypi'],
176 9d889386 Olga Brani
    entry_points={
177 9d889386 Olga Brani
        'synnefo': [ 
178 9d889386 Olga Brani
             'web_apps = synnefo_branding.synnefo_settings:installed_apps',  
179 9d889386 Olga Brani
             'web_context_processors = synnefo_branding.synnefo_settings:context_processors',
180 9d889386 Olga Brani
             'web_static = synnefo_branding.synnefo_settings:static_files',
181 9d889386 Olga Brani
        ]
182 9d889386 Olga Brani
    }
183 9d889386 Olga Brani
)