Mercurial > hg > MakeItSo
annotate makeitso/python.py @ 140:3046e15c3dd7
fix up sectioning
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Tue, 21 Feb 2012 21:06:11 -0800 |
| parents | 4922bee3d080 |
| children | e70421c50d0a |
| rev | line source |
|---|---|
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
2 |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
3 """ |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
4 python package templates for makeitso |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
5 |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
6 Several components are included. |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
7 [TODO] You may use these subtemplates in any combination. |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
8 |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
9 * README.txt : a README in restructured text |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
10 * examples : examples for your package |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
11 * setup.py : setup utility for the full package |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
12 * ./main.py : CLI handler for your webapp |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
13 * ./model.py : model of a persisted object |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
14 * ./template.py : a MakeItSo template for project creation |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
15 * ./tests : doctest suite for the package |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
16 * ./web.py : a webob web handler |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
17 """ |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
18 |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
19 import os |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
20 import sys |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
21 from cli import MakeItSoCLI |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
22 from makeitso import ContentTemplate |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
23 from optparse import OptionParser |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
24 from template import MakeItSoTemplate |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
25 from template import Variable |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
26 |
|
131
4922bee3d080
add single module to registered templates
Jeff Hammel <jhammel@mozilla.com>
parents:
122
diff
changeset
|
27 class PythonModuleTemplate(MakeItSoTemplate): |
|
4922bee3d080
add single module to registered templates
Jeff Hammel <jhammel@mozilla.com>
parents:
122
diff
changeset
|
28 """single module python package""" |
|
4922bee3d080
add single module to registered templates
Jeff Hammel <jhammel@mozilla.com>
parents:
122
diff
changeset
|
29 templates = ['python_module'] |
|
4922bee3d080
add single module to registered templates
Jeff Hammel <jhammel@mozilla.com>
parents:
122
diff
changeset
|
30 |
|
102
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
31 class PythonPackageTemplate(MakeItSoTemplate): |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
32 """ |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
33 python package template |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
34 """ |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
35 name = 'python-package' |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
36 templates = ['python_package'] |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
37 vars = [Variable('description'), |
|
115
7dbc3cdadffe
add a test for the python-package template
Jeff Hammel <jhammel@mozilla.com>
parents:
114
diff
changeset
|
38 Variable('author', 'author of the package'), |
|
7dbc3cdadffe
add a test for the python-package template
Jeff Hammel <jhammel@mozilla.com>
parents:
114
diff
changeset
|
39 Variable('email', "author's email"), |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
40 Variable('url'), |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
41 Variable('repo', 'project repository'), |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
42 ] |
| 111 | 43 look = False |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
44 |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
45 # things that go in setup.py |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
46 dependencies = {'web.py': ['webob'], |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
47 'template.py': ['MakeItSo']} |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
48 console_scripts = {'main.py': '{{project}} = {{project}}.main:main', |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
49 'template.py': '{{project}}-template = {{project}}.template:main' |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
50 } |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
51 |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
52 def __init__(self, **kw): |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
53 MakeItSoTemplate.__init__(self, **kw) |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
54 |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
55 # TODO: get the templates you actually care about [maybe from the CLI?] |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
56 |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
57 def pre(self, variables, output): |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
58 """ |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
59 sanitize some variables |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
60 """ |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
61 |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
62 # get project from output directory |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
63 variables['project'] = os.path.basename(output) |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
64 |
|
114
b8d5d2041fe0
stub out project name -> package name
Jeff Hammel <jhammel@mozilla.com>
parents:
111
diff
changeset
|
65 # get package name from project |
|
b8d5d2041fe0
stub out project name -> package name
Jeff Hammel <jhammel@mozilla.com>
parents:
111
diff
changeset
|
66 # XXX could have looser restrictions with transforms |
|
116
908e9a653668
fix a syntax error in the python template thanks to some friendly tests
Jeff Hammel <jhammel@mozilla.com>
parents:
115
diff
changeset
|
67 assert variables['project'].isalnum(), 'Project name must be just letters, you gave %s' % variables['project'] |
|
114
b8d5d2041fe0
stub out project name -> package name
Jeff Hammel <jhammel@mozilla.com>
parents:
111
diff
changeset
|
68 variables['package'] = variables['project'].lower() |
|
b8d5d2041fe0
stub out project name -> package name
Jeff Hammel <jhammel@mozilla.com>
parents:
111
diff
changeset
|
69 |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
70 # dependencies |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
71 dependencies = set([]) |
| 111 | 72 for template, dependency in self.dependencies.items(): |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
73 dependencies.update(dependency) |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
74 dependencies = list(dependencies) |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
75 variables['dependencies'] = dependencies |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
76 |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
77 # console_scripts |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
78 console_scripts = [] |
| 111 | 79 for template, console_script in self.console_scripts.items(): |
| 80 console_scripts.append(console_script) | |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
81 if console_scripts: |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
82 s = 'setup(' # placeholder string |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
83 script_strings = ['[console_scripts]'] |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
84 for console_script in console_scripts: |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
85 template = ContentTemplate(console_script) |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
86 output = template.substitute(project=variables['project']) |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
87 script_strings.append(output) |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
88 variables['console_scripts'] = '\n'.join([' ' * len(s) + i |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
89 for i in script_strings]) |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
90 else: |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
91 variables['console_scripts'] = '' |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
92 |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
93 |
|
102
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
94 class PythonPackageCLI(MakeItSoCLI): |
|
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
95 """ |
|
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
96 CLI front end for the python package template |
|
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
97 """ |
|
122
b2152efec89a
get the description from the docstring if applicable
Jeff Hammel <jhammel@mozilla.com>
parents:
116
diff
changeset
|
98 usage = '%prog [options] project' |
|
95
e74baa8e6df4
fix CLI interface a bit....write a test for it
Jeff Hammel <jhammel@mozilla.com>
parents:
78
diff
changeset
|
99 |
|
102
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
100 def main(args=sys.argv[1:]): |
|
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
101 cli = PythonPackageCLI(PythonPackageTemplate) |
|
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
102 cli(*args) |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
103 |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
104 if __name__ == '__main__': |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
105 main() |
