* Better "motto" display.
[redakcja.git] / setup.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 import os
5 from distutils.core import setup
6
7 RESOURCE_PATHS = ('templates', 'static', 'media', 'locale', 'config')
8
9
10 def is_package(path):
11     return os.path.isdir(path) \
12        and os.path.isfile(os.path.join(path, '__init__.py'))
13
14
15 def find_packages(path, base=""):
16     """ Find all packages in path """
17     packages = {}
18     for item in os.listdir(path):
19         dir = os.path.join(path, item)
20         if is_package(dir):
21             if base:
22                 module_name = "%(base)s.%(item)s" % vars()
23             else:
24                 module_name = item
25             packages[module_name] = dir
26             packages.update(find_packages(dir, module_name))
27     return packages
28
29
30 def files_from(*paths, **kwargs):
31     base = kwargs.pop('base')
32
33     def generator():
34         for path in paths:
35             path = os.path.join(base, path)
36             if not os.path.isdir(path) or is_package(path):
37                 continue
38
39             for dir, _, files in os.walk(path):
40                 for file in files:
41                     yield os.path.relpath(os.path.join(dir, file), base)
42
43     return list(generator())
44
45
46 def django_setup(project, apps=[], apps_dir='apps', package_dir={}, packages=[], package_data={}, **kwargs):
47
48     # directories
49     extra_dirs = dict((app, os.path.join(apps_dir, app)) for app in apps)
50     extra_dirs[project] = project
51     package_dir.update(extra_dirs)
52
53     # applications
54     packages.extend(apps)
55     # with all subpackages
56     for app in apps:
57         packages.extend(find_packages(os.path.join(apps_dir, app), base=app))
58     # and the project
59     packages.append(project)
60
61     # extra data
62     extra_data = {}
63     for app in apps:
64         extra_data[app] = files_from(*RESOURCE_PATHS, base=os.path.join(apps_dir, app))
65     extra_data[project] = files_from(*RESOURCE_PATHS, base=project)
66     package_data.update(extra_data)
67
68     return setup(
69                 package_dir=package_dir,
70                 packages=packages,
71                 package_data=package_data, **kwargs)
72
73
74 #
75 # The real stuff :)
76 #
77 django_setup(
78     name='fnp-redakcja',
79     version='1.1',
80     description='IDE for developing books.',
81     author="Fundacja Nowoczesna Polska",
82     author_email='fundacja@nowoczesnapolska.org.pl',
83     license="GNU Affero General Public License 3",
84     maintainer='Ɓukasz Rekucki',
85     maintainer_email='lrekucki@gmail.com',
86     url='http://github.com/fnp/redakcja',
87     package_dir={'': 'lib'},
88     py_modules=[
89         'wlapi',
90         'vstorage',
91     ],
92     scripts=[
93         'scripts/crop.py',
94         'scripts/imgconv.py',
95     ],
96     # django applications
97     project='platforma',
98     apps_dir='apps',
99     apps=[
100         'compress',
101         'django_cas',
102         'filebrowser',
103         'toolbar',
104         'wiki',
105     ],
106     requires=[
107         "librarian (>=1.3)",
108         "Django (>=1.1.1,<1.2)",
109     ])