Mercurial > hg > MakeItSo
annotate makeitso/python.py @ 185:0fd0cc154153
STUB: makeitso/makeitso.py setup.py
| author | Jeff Hammel <k0scist@gmail.com> |
|---|---|
| date | Wed, 26 Mar 2014 21:28:47 -0700 |
| parents | 9b78f52afe4e |
| children | 5a2edca13b36 |
| 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 |
|
168
54f42aa651bc
fix single module interpolation
Jeff Hammel <jhammel@mozilla.com>
parents:
166
diff
changeset
|
22 import shutil |
| 177 | 23 import string |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
24 import sys |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
25 from cli import MakeItSoCLI |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
26 from makeitso import ContentTemplate |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
27 from optparse import OptionParser |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
28 from template import MakeItSoTemplate |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
29 from template import Variable |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
30 |
|
179
5bd1c50c6f61
works weirdly but kinda works
Jeff Hammel <k0scist@gmail.com>
parents:
178
diff
changeset
|
31 class SetupPy(MakeItSoTemplate): |
|
5bd1c50c6f61
works weirdly but kinda works
Jeff Hammel <k0scist@gmail.com>
parents:
178
diff
changeset
|
32 """template for setup.py""" |
|
180
9b78f52afe4e
STUB: makeitso/python.py setup.py
Jeff Hammel <k0scist@gmail.com>
parents:
179
diff
changeset
|
33 templates = [('python_package', 'setup.py')] |
| 163 | 34 |
| 151 | 35 class PythonTemplate(MakeItSoTemplate): |
| 36 """abstract base class for python-type templates""" | |
| 160 | 37 vars = [Variable('description'), |
| 38 Variable('author', 'author of the package'), | |
| 39 Variable('email', "author's email"), | |
| 40 Variable('url', 'project url'), | |
| 41 Variable('repo', 'project repository'), | |
| 42 ] | |
| 151 | 43 |
| 161 | 44 def output2name(self, path): |
| 45 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
|
46 |
| 162 | 47 |
|
155
386a44a52139
moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
48 class PythonScriptTemplate(PythonTemplate): |
|
386a44a52139
moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
49 """template for a single python script""" |
| 159 | 50 templates = [('python_package', '{{package}}', '{{main}}.py')] |
| 160 | 51 vars = [Variable('description')] |
|
155
386a44a52139
moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
52 |
| 162 | 53 |
| 151 | 54 class PythonModuleTemplate(PythonTemplate): |
|
131
4922bee3d080
add single module to registered templates
Jeff Hammel <jhammel@mozilla.com>
parents:
122
diff
changeset
|
55 """single module python package""" |
|
155
386a44a52139
moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
56 # TODO: this should use the same files as PythonPackageTemplate |
| 159 | 57 templates = ['python_module', |
| 58 ('python_package', '{{package}}', '{{main}}.py')] | |
| 59 vars = [Variable('description')] | |
| 60 look = False | |
|
131
4922bee3d080
add single module to registered templates
Jeff Hammel <jhammel@mozilla.com>
parents:
122
diff
changeset
|
61 |
| 159 | 62 def pre(self, variables, output): |
| 162 | 63 variables['project'] = variables['module'] = variables['main'] = self.output2name(output) |
| 64 | |
|
168
54f42aa651bc
fix single module interpolation
Jeff Hammel <jhammel@mozilla.com>
parents:
166
diff
changeset
|
65 def post(self, variables, output): |
|
54f42aa651bc
fix single module interpolation
Jeff Hammel <jhammel@mozilla.com>
parents:
166
diff
changeset
|
66 shutil.move(os.path.join(output, '{{main.py}}'), |
|
54f42aa651bc
fix single module interpolation
Jeff Hammel <jhammel@mozilla.com>
parents:
166
diff
changeset
|
67 os.path.join(output, variables['main'])) |
|
155
386a44a52139
moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
68 |
| 151 | 69 class PythonPackageTemplate(PythonTemplate): |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
70 """ |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
71 python package template |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
72 """ |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
73 name = 'python-package' |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
74 templates = ['python_package'] |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
75 vars = [Variable('description'), |
|
115
7dbc3cdadffe
add a test for the python-package template
Jeff Hammel <jhammel@mozilla.com>
parents:
114
diff
changeset
|
76 Variable('author', 'author of the package'), |
|
7dbc3cdadffe
add a test for the python-package template
Jeff Hammel <jhammel@mozilla.com>
parents:
114
diff
changeset
|
77 Variable('email', "author's email"), |
| 159 | 78 Variable('url', 'project url'), |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
79 Variable('repo', 'project repository'), |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
80 ] |
| 111 | 81 look = False |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
82 |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
83 # things that go in setup.py |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
84 dependencies = {'web.py': ['webob'], |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
85 'template.py': ['MakeItSo']} |
| 166 | 86 console_scripts = {'main.py': '{{project}} = {{package}}.{{main}}:main', |
| 87 'template.py': '{{package}}-template = {{package}}.template:main' | |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
88 } |
| 151 | 89 |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
90 def __init__(self, **kw): |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
91 MakeItSoTemplate.__init__(self, **kw) |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
92 |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
93 # 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
|
94 |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
95 def pre(self, variables, output): |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
96 """ |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
97 sanitize some variables |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
98 """ |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
99 |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
100 # get project from output directory |
| 161 | 101 variables['project'] = self.output2name(output) |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
102 |
|
114
b8d5d2041fe0
stub out project name -> package name
Jeff Hammel <jhammel@mozilla.com>
parents:
111
diff
changeset
|
103 # get package name from project |
| 177 | 104 allowable = set(string.letters + string.digits + '_') |
| 105 if not set(variables['project']).issubset(allowable): | |
| 106 raise AssertionError("Illegal fields in package name") | |
|
114
b8d5d2041fe0
stub out project name -> package name
Jeff Hammel <jhammel@mozilla.com>
parents:
111
diff
changeset
|
107 variables['package'] = variables['project'].lower() |
|
b8d5d2041fe0
stub out project name -> package name
Jeff Hammel <jhammel@mozilla.com>
parents:
111
diff
changeset
|
108 |
| 159 | 109 # name of CLI main file |
| 165 | 110 variables['main'] = 'main' |
| 159 | 111 |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
112 # dependencies |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
113 dependencies = set([]) |
| 111 | 114 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
|
115 dependencies.update(dependency) |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
116 dependencies = list(dependencies) |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
117 variables['dependencies'] = dependencies |
|
155
386a44a52139
moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
118 |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
119 # console_scripts |
|
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
120 console_scripts = [] |
| 111 | 121 for template, console_script in self.console_scripts.items(): |
| 122 console_scripts.append(console_script) | |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
123 if console_scripts: |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
124 s = 'setup(' # placeholder string |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
125 script_strings = ['[console_scripts]'] |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
126 for console_script in console_scripts: |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
127 template = ContentTemplate(console_script) |
|
178
d6ef91d49609
hopefully do away with some extra variable reentry
Jeff Hammel <k0scist@gmail.com>
parents:
177
diff
changeset
|
128 output = template.substitute(project=variables['project'], |
|
d6ef91d49609
hopefully do away with some extra variable reentry
Jeff Hammel <k0scist@gmail.com>
parents:
177
diff
changeset
|
129 package=variables['package'], |
|
d6ef91d49609
hopefully do away with some extra variable reentry
Jeff Hammel <k0scist@gmail.com>
parents:
177
diff
changeset
|
130 main=variables['main']) |
|
109
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
131 script_strings.append(output) |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
132 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
|
133 for i in script_strings]) |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
134 else: |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
135 variables['console_scripts'] = '' |
|
697568ba4a22
make the python package template a little fancier
Jeff Hammel <jhammel@mozilla.com>
parents:
108
diff
changeset
|
136 |
|
108
32893f67f85d
stub out a better python package
Jeff Hammel <jhammel@mozilla.com>
parents:
102
diff
changeset
|
137 |
|
102
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
138 class PythonPackageCLI(MakeItSoCLI): |
|
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
139 """ |
|
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
140 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
|
141 """ |
|
122
b2152efec89a
get the description from the docstring if applicable
Jeff Hammel <jhammel@mozilla.com>
parents:
116
diff
changeset
|
142 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
|
143 |
|
102
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
144 def main(args=sys.argv[1:]): |
|
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
145 cli = PythonPackageCLI(PythonPackageTemplate) |
|
ad5fd3eb6674
template fixes....not the best, but will do
Jeff Hammel <jhammel@mozilla.com>
parents:
95
diff
changeset
|
146 cli(*args) |
|
78
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
147 |
|
d4184945f8a8
stub out python package creation
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
148 if __name__ == '__main__': |
|
155
386a44a52139
moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
149 main() |
