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