Statistics
| Branch: | Tag: | Revision:

root / snf-branding / setup.py @ 517bd2fc

History | View | Annotate | Download (6.5 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 3d5906fe Giorgos Korfiatis
import sys
40 9d889386 Olga Brani
41 9d889386 Olga Brani
from setuptools import setup, find_packages
42 00326543 Kostas Papadimitriou
from fnmatch import fnmatchcase
43 00326543 Kostas Papadimitriou
from distutils.util import convert_path
44 9d889386 Olga Brani
45 9d889386 Olga Brani
HERE = os.path.abspath(os.path.normpath(os.path.dirname(__file__)))
46 9d889386 Olga Brani
47 9d889386 Olga Brani
from synnefo_branding.version import __version__
48 9d889386 Olga Brani
49 9d889386 Olga Brani
# Package info
50 9d889386 Olga Brani
VERSION = __version__
51 9d889386 Olga Brani
SHORT_DESCRIPTION = 'Synnefo stats grapher'
52 9d889386 Olga Brani
53 9d889386 Olga Brani
PACKAGES_ROOT = '.'
54 9d889386 Olga Brani
PACKAGES = find_packages(PACKAGES_ROOT)
55 9d889386 Olga Brani
56 9d889386 Olga Brani
# Package meta
57 9d889386 Olga Brani
CLASSIFIERS = []
58 9d889386 Olga Brani
59 9d889386 Olga Brani
# Package requirements
60 9d889386 Olga Brani
INSTALL_REQUIRES = [
61 9d889386 Olga Brani
]
62 9d889386 Olga Brani
63 00326543 Kostas Papadimitriou
# Provided as an attribute, so you can append to these instead
64 00326543 Kostas Papadimitriou
# of replicating them:
65 00326543 Kostas Papadimitriou
standard_exclude = ["*.py", "*.pyc", "*$py.class", "*~", ".*", "*.bak"]
66 00326543 Kostas Papadimitriou
standard_exclude_directories = [
67 00326543 Kostas Papadimitriou
    ".*", "CVS", "_darcs", "./build", "./dist", "EGG-INFO", "*.egg-info", "snf-0.7"
68 00326543 Kostas Papadimitriou
]
69 00326543 Kostas Papadimitriou
70 00326543 Kostas Papadimitriou
# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
71 00326543 Kostas Papadimitriou
# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
72 00326543 Kostas Papadimitriou
# Note: you may want to copy this into your setup.py file verbatim, as
73 00326543 Kostas Papadimitriou
# you can't import this from another package, when you don't know if
74 00326543 Kostas Papadimitriou
# that package is installed yet.
75 00326543 Kostas Papadimitriou
def find_package_data(
76 00326543 Kostas Papadimitriou
    where=".",
77 00326543 Kostas Papadimitriou
    package="",
78 00326543 Kostas Papadimitriou
    exclude=standard_exclude,
79 00326543 Kostas Papadimitriou
    exclude_directories=standard_exclude_directories,
80 00326543 Kostas Papadimitriou
    only_in_packages=True,
81 00326543 Kostas Papadimitriou
    show_ignored=False):
82 00326543 Kostas Papadimitriou
    """
83 00326543 Kostas Papadimitriou
    Return a dictionary suitable for use in ``package_data``
84 00326543 Kostas Papadimitriou
    in a distutils ``setup.py`` file.
85 00326543 Kostas Papadimitriou

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

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

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

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

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

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

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