annotate makeitso/python.py @ 166:0c95d7f25d9b

makeitso/python.py
author Jeff Hammel <jhammel@mozilla.com>
date Tue, 24 Sep 2013 13:07:44 -0700
parents f3e86e06eb12
children 54f42aa651bc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
164
6cd2894bb11c stub: makeitso/script2package.py
Jeff Hammel <jhammel@mozilla.com>
parents: 163
diff changeset
19 # TODO: console_scripts for all of these
6cd2894bb11c stub: makeitso/script2package.py
Jeff Hammel <jhammel@mozilla.com>
parents: 163
diff changeset
20
109
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
21 import os
78
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
22 import sys
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
23 from cli import MakeItSoCLI
109
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
24 from makeitso import ContentTemplate
78
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
25 from optparse import OptionParser
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
26 from template import MakeItSoTemplate
108
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
27 from template import Variable
78
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
28
163
Jeff Hammel <jhammel@mozilla.com>
parents: 162
diff changeset
29
151
e70421c50d0a move to ABC
Jeff Hammel <jhammel@mozilla.com>
parents: 131
diff changeset
30 class PythonTemplate(MakeItSoTemplate):
e70421c50d0a move to ABC
Jeff Hammel <jhammel@mozilla.com>
parents: 131
diff changeset
31 """abstract base class for python-type templates"""
160
Jeff Hammel <jhammel@mozilla.com>
parents: 159
diff changeset
32 vars = [Variable('description'),
Jeff Hammel <jhammel@mozilla.com>
parents: 159
diff changeset
33 Variable('author', 'author of the package'),
Jeff Hammel <jhammel@mozilla.com>
parents: 159
diff changeset
34 Variable('email', "author's email"),
Jeff Hammel <jhammel@mozilla.com>
parents: 159
diff changeset
35 Variable('url', 'project url'),
Jeff Hammel <jhammel@mozilla.com>
parents: 159
diff changeset
36 Variable('repo', 'project repository'),
Jeff Hammel <jhammel@mozilla.com>
parents: 159
diff changeset
37 ]
151
e70421c50d0a move to ABC
Jeff Hammel <jhammel@mozilla.com>
parents: 131
diff changeset
38
161
Jeff Hammel <jhammel@mozilla.com>
parents: 160
diff changeset
39 def output2name(self, path):
Jeff Hammel <jhammel@mozilla.com>
parents: 160
diff changeset
40 return os.path.splitext(os.path.basename(path.rstrip(os.path.sep)))[0]
155
386a44a52139 moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
41
162
Jeff Hammel <jhammel@mozilla.com>
parents: 161
diff changeset
42
155
386a44a52139 moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
43 class PythonScriptTemplate(PythonTemplate):
386a44a52139 moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
44 """template for a single python script"""
159
Jeff Hammel <jhammel@mozilla.com>
parents: 155
diff changeset
45 templates = [('python_package', '{{package}}', '{{main}}.py')]
160
Jeff Hammel <jhammel@mozilla.com>
parents: 159
diff changeset
46 vars = [Variable('description')]
155
386a44a52139 moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
47
162
Jeff Hammel <jhammel@mozilla.com>
parents: 161
diff changeset
48
151
e70421c50d0a move to ABC
Jeff Hammel <jhammel@mozilla.com>
parents: 131
diff changeset
49 class PythonModuleTemplate(PythonTemplate):
131
4922bee3d080 add single module to registered templates
Jeff Hammel <jhammel@mozilla.com>
parents: 122
diff changeset
50 """single module python package"""
155
386a44a52139 moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
51 # TODO: this should use the same files as PythonPackageTemplate
159
Jeff Hammel <jhammel@mozilla.com>
parents: 155
diff changeset
52 templates = ['python_module',
Jeff Hammel <jhammel@mozilla.com>
parents: 155
diff changeset
53 ('python_package', '{{package}}', '{{main}}.py')]
Jeff Hammel <jhammel@mozilla.com>
parents: 155
diff changeset
54 vars = [Variable('description')]
Jeff Hammel <jhammel@mozilla.com>
parents: 155
diff changeset
55 look = False
131
4922bee3d080 add single module to registered templates
Jeff Hammel <jhammel@mozilla.com>
parents: 122
diff changeset
56
159
Jeff Hammel <jhammel@mozilla.com>
parents: 155
diff changeset
57 def pre(self, variables, output):
162
Jeff Hammel <jhammel@mozilla.com>
parents: 161
diff changeset
58 variables['project'] = variables['module'] = variables['main'] = self.output2name(output)
Jeff Hammel <jhammel@mozilla.com>
parents: 161
diff changeset
59
155
386a44a52139 moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
60
151
e70421c50d0a move to ABC
Jeff Hammel <jhammel@mozilla.com>
parents: 131
diff changeset
61 class PythonPackageTemplate(PythonTemplate):
78
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
62 """
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
63 python package template
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
64 """
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
65 name = 'python-package'
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
66 templates = ['python_package']
108
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
67 vars = [Variable('description'),
115
7dbc3cdadffe add a test for the python-package template
Jeff Hammel <jhammel@mozilla.com>
parents: 114
diff changeset
68 Variable('author', 'author of the package'),
7dbc3cdadffe add a test for the python-package template
Jeff Hammel <jhammel@mozilla.com>
parents: 114
diff changeset
69 Variable('email', "author's email"),
159
Jeff Hammel <jhammel@mozilla.com>
parents: 155
diff changeset
70 Variable('url', 'project url'),
108
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
71 Variable('repo', 'project repository'),
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
72 ]
111
bad70fb08b15 minor syntax corrections
Jeff Hammel <jhammel@mozilla.com>
parents: 109
diff changeset
73 look = False
78
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
74
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
75 # things that go in setup.py
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
76 dependencies = {'web.py': ['webob'],
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
77 'template.py': ['MakeItSo']}
166
0c95d7f25d9b makeitso/python.py
Jeff Hammel <jhammel@mozilla.com>
parents: 165
diff changeset
78 console_scripts = {'main.py': '{{project}} = {{package}}.{{main}}:main',
0c95d7f25d9b makeitso/python.py
Jeff Hammel <jhammel@mozilla.com>
parents: 165
diff changeset
79 'template.py': '{{package}}-template = {{package}}.template:main'
78
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
80 }
151
e70421c50d0a move to ABC
Jeff Hammel <jhammel@mozilla.com>
parents: 131
diff changeset
81
78
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
82 def __init__(self, **kw):
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
83 MakeItSoTemplate.__init__(self, **kw)
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
84
109
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
85 # 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
86
108
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
87 def pre(self, variables, output):
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
88 """
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
89 sanitize some variables
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
90 """
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
91
109
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
92 # get project from output directory
161
Jeff Hammel <jhammel@mozilla.com>
parents: 160
diff changeset
93 variables['project'] = self.output2name(output)
109
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
94
114
b8d5d2041fe0 stub out project name -> package name
Jeff Hammel <jhammel@mozilla.com>
parents: 111
diff changeset
95 # get package name from project
b8d5d2041fe0 stub out project name -> package name
Jeff Hammel <jhammel@mozilla.com>
parents: 111
diff changeset
96 # 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
97 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
98 variables['package'] = variables['project'].lower()
b8d5d2041fe0 stub out project name -> package name
Jeff Hammel <jhammel@mozilla.com>
parents: 111
diff changeset
99
159
Jeff Hammel <jhammel@mozilla.com>
parents: 155
diff changeset
100 # name of CLI main file
165
Jeff Hammel <jhammel@mozilla.com>
parents: 164
diff changeset
101 variables['main'] = 'main'
159
Jeff Hammel <jhammel@mozilla.com>
parents: 155
diff changeset
102
108
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
103 # dependencies
109
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
104 dependencies = set([])
111
bad70fb08b15 minor syntax corrections
Jeff Hammel <jhammel@mozilla.com>
parents: 109
diff changeset
105 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
106 dependencies.update(dependency)
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
107 dependencies = list(dependencies)
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
108 variables['dependencies'] = dependencies
155
386a44a52139 moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
109
108
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
110 # console_scripts
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
111 console_scripts = []
111
bad70fb08b15 minor syntax corrections
Jeff Hammel <jhammel@mozilla.com>
parents: 109
diff changeset
112 for template, console_script in self.console_scripts.items():
bad70fb08b15 minor syntax corrections
Jeff Hammel <jhammel@mozilla.com>
parents: 109
diff changeset
113 console_scripts.append(console_script)
109
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
114 if console_scripts:
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
115 s = 'setup(' # placeholder string
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
116 script_strings = ['[console_scripts]']
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
117 for console_script in console_scripts:
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
118 template = ContentTemplate(console_script)
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
119 output = template.substitute(project=variables['project'])
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
120 script_strings.append(output)
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
121 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
122 for i in script_strings])
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
123 else:
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
124 variables['console_scripts'] = ''
697568ba4a22 make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents: 108
diff changeset
125
108
32893f67f85d stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents: 102
diff changeset
126
102
ad5fd3eb6674 template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents: 95
diff changeset
127 class PythonPackageCLI(MakeItSoCLI):
ad5fd3eb6674 template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents: 95
diff changeset
128 """
ad5fd3eb6674 template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents: 95
diff changeset
129 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
130 """
122
b2152efec89a get the description from the docstring if applicable
Jeff Hammel <jhammel@mozilla.com>
parents: 116
diff changeset
131 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
132
102
ad5fd3eb6674 template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents: 95
diff changeset
133 def main(args=sys.argv[1:]):
ad5fd3eb6674 template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents: 95
diff changeset
134 cli = PythonPackageCLI(PythonPackageTemplate)
ad5fd3eb6674 template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents: 95
diff changeset
135 cli(*args)
78
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
136
d4184945f8a8 stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
137 if __name__ == '__main__':
155
386a44a52139 moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
138 main()