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: 
163diff
changeset | 19 # TODO: console_scripts for all of these | 
| 
6cd2894bb11c
stub: makeitso/script2package.py
 Jeff Hammel <jhammel@mozilla.com> parents: 
163diff
changeset | 20 | 
| 109 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
changeset | 21 import os | 
| 168 
54f42aa651bc
fix single module interpolation
 Jeff Hammel <jhammel@mozilla.com> parents: 
166diff
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: 
108diff
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: 
102diff
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: 
178diff
changeset | 31 class SetupPy(MakeItSoTemplate): | 
| 
5bd1c50c6f61
works weirdly but kinda works
 Jeff Hammel <k0scist@gmail.com> parents: 
178diff
changeset | 32 """template for setup.py""" | 
| 180 
9b78f52afe4e
STUB: makeitso/python.py setup.py
 Jeff Hammel <k0scist@gmail.com> parents: 
179diff
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: 
151diff
changeset | 46 | 
| 162 | 47 | 
| 155 
386a44a52139
moving to a thing with script template
 Jeff Hammel <jhammel@mozilla.com> parents: 
151diff
changeset | 48 class PythonScriptTemplate(PythonTemplate): | 
| 
386a44a52139
moving to a thing with script template
 Jeff Hammel <jhammel@mozilla.com> parents: 
151diff
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: 
151diff
changeset | 52 | 
| 162 | 53 | 
| 151 | 54 class PythonModuleTemplate(PythonTemplate): | 
| 131 
4922bee3d080
add single module to registered templates
 Jeff Hammel <jhammel@mozilla.com> parents: 
122diff
changeset | 55 """single module python package""" | 
| 155 
386a44a52139
moving to a thing with script template
 Jeff Hammel <jhammel@mozilla.com> parents: 
151diff
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: 
122diff
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: 
166diff
changeset | 65 def post(self, variables, output): | 
| 
54f42aa651bc
fix single module interpolation
 Jeff Hammel <jhammel@mozilla.com> parents: 
166diff
changeset | 66 shutil.move(os.path.join(output, '{{main.py}}'), | 
| 
54f42aa651bc
fix single module interpolation
 Jeff Hammel <jhammel@mozilla.com> parents: 
166diff
changeset | 67 os.path.join(output, variables['main'])) | 
| 155 
386a44a52139
moving to a thing with script template
 Jeff Hammel <jhammel@mozilla.com> parents: 
151diff
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: 
102diff
changeset | 75 vars = [Variable('description'), | 
| 115 
7dbc3cdadffe
add a test for the python-package template
 Jeff Hammel <jhammel@mozilla.com> parents: 
114diff
changeset | 76 Variable('author', 'author of the package'), | 
| 
7dbc3cdadffe
add a test for the python-package template
 Jeff Hammel <jhammel@mozilla.com> parents: 
114diff
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: 
102diff
changeset | 79 Variable('repo', 'project repository'), | 
| 
32893f67f85d
stub out a better python package
 Jeff Hammel <jhammel@mozilla.com> parents: 
102diff
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: 
108diff
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: 
108diff
changeset | 94 | 
| 108 
32893f67f85d
stub out a better python package
 Jeff Hammel <jhammel@mozilla.com> parents: 
102diff
changeset | 95 def pre(self, variables, output): | 
| 
32893f67f85d
stub out a better python package
 Jeff Hammel <jhammel@mozilla.com> parents: 
102diff
changeset | 96 """ | 
| 
32893f67f85d
stub out a better python package
 Jeff Hammel <jhammel@mozilla.com> parents: 
102diff
changeset | 97 sanitize some variables | 
| 
32893f67f85d
stub out a better python package
 Jeff Hammel <jhammel@mozilla.com> parents: 
102diff
changeset | 98 """ | 
| 
32893f67f85d
stub out a better python package
 Jeff Hammel <jhammel@mozilla.com> parents: 
102diff
changeset | 99 | 
| 109 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
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: 
108diff
changeset | 102 | 
| 114 
b8d5d2041fe0
stub out project name -> package name
 Jeff Hammel <jhammel@mozilla.com> parents: 
111diff
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: 
111diff
changeset | 107 variables['package'] = variables['project'].lower() | 
| 
b8d5d2041fe0
stub out project name -> package name
 Jeff Hammel <jhammel@mozilla.com> parents: 
111diff
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: 
102diff
changeset | 112 # dependencies | 
| 109 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
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: 
108diff
changeset | 115 dependencies.update(dependency) | 
| 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
changeset | 116 dependencies = list(dependencies) | 
| 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
changeset | 117 variables['dependencies'] = dependencies | 
| 155 
386a44a52139
moving to a thing with script template
 Jeff Hammel <jhammel@mozilla.com> parents: 
151diff
changeset | 118 | 
| 108 
32893f67f85d
stub out a better python package
 Jeff Hammel <jhammel@mozilla.com> parents: 
102diff
changeset | 119 # console_scripts | 
| 
32893f67f85d
stub out a better python package
 Jeff Hammel <jhammel@mozilla.com> parents: 
102diff
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: 
108diff
changeset | 123 if console_scripts: | 
| 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
changeset | 124 s = 'setup(' # placeholder string | 
| 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
changeset | 125 script_strings = ['[console_scripts]'] | 
| 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
changeset | 126 for console_script in console_scripts: | 
| 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
changeset | 127 template = ContentTemplate(console_script) | 
| 178 
d6ef91d49609
hopefully do away with some extra variable reentry
 Jeff Hammel <k0scist@gmail.com> parents: 
177diff
changeset | 128 output = template.substitute(project=variables['project'], | 
| 
d6ef91d49609
hopefully do away with some extra variable reentry
 Jeff Hammel <k0scist@gmail.com> parents: 
177diff
changeset | 129 package=variables['package'], | 
| 
d6ef91d49609
hopefully do away with some extra variable reentry
 Jeff Hammel <k0scist@gmail.com> parents: 
177diff
changeset | 130 main=variables['main']) | 
| 109 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
changeset | 131 script_strings.append(output) | 
| 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
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: 
108diff
changeset | 133 for i in script_strings]) | 
| 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
changeset | 134 else: | 
| 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
changeset | 135 variables['console_scripts'] = '' | 
| 
697568ba4a22
make the python package template a little fancier
 Jeff Hammel <jhammel@mozilla.com> parents: 
108diff
changeset | 136 | 
| 108 
32893f67f85d
stub out a better python package
 Jeff Hammel <jhammel@mozilla.com> parents: 
102diff
changeset | 137 | 
| 102 
ad5fd3eb6674
template fixes....not the best, but will do
 Jeff Hammel <jhammel@mozilla.com> parents: 
95diff
changeset | 138 class PythonPackageCLI(MakeItSoCLI): | 
| 
ad5fd3eb6674
template fixes....not the best, but will do
 Jeff Hammel <jhammel@mozilla.com> parents: 
95diff
changeset | 139 """ | 
| 
ad5fd3eb6674
template fixes....not the best, but will do
 Jeff Hammel <jhammel@mozilla.com> parents: 
95diff
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: 
95diff
changeset | 141 """ | 
| 122 
b2152efec89a
get the description from the docstring if applicable
 Jeff Hammel <jhammel@mozilla.com> parents: 
116diff
changeset | 142 usage = '%prog [options] project' | 
| 95 
e74baa8e6df4
fix CLI interface a bit....write a test for it
 Jeff Hammel <jhammel@mozilla.com> parents: 
78diff
changeset | 143 | 
| 102 
ad5fd3eb6674
template fixes....not the best, but will do
 Jeff Hammel <jhammel@mozilla.com> parents: 
95diff
changeset | 144 def main(args=sys.argv[1:]): | 
| 
ad5fd3eb6674
template fixes....not the best, but will do
 Jeff Hammel <jhammel@mozilla.com> parents: 
95diff
changeset | 145 cli = PythonPackageCLI(PythonPackageTemplate) | 
| 
ad5fd3eb6674
template fixes....not the best, but will do
 Jeff Hammel <jhammel@mozilla.com> parents: 
95diff
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: 
151diff
changeset | 149 main() | 
