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