Mercurial > hg > MakeItSo
annotate makeitso/python_package/{{package}}/{{main}}.py @ 223:386745b7264c
one more time
| author | Jeff Hammel <k0scist@gmail.com> |
|---|---|
| date | Mon, 14 Dec 2015 13:47:00 -0800 |
| parents | ab726b2f3143 |
| children | b4a3e8bbe095 |
| rev | line source |
|---|---|
| 79 | 1 #!/usr/bin/env python |
| 159 | 2 # -*- coding: utf-8 -*- |
| 79 | 3 |
| 4 """ | |
| 5 {{description}} | |
| 6 """ | |
| 7 | |
|
187
74f41d53b057
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
161
diff
changeset
|
8 # imports |
| 188 | 9 import argparse |
| 159 | 10 import os |
| 11 import subprocess | |
| 79 | 12 import sys |
| 207 | 13 import time |
| 159 | 14 |
|
210
ab726b2f3143
arbitrary python requirements, the bad way
Jeff Hammel <k0scist@gmail.com>
parents:
207
diff
changeset
|
15 # python requirements |
|
ab726b2f3143
arbitrary python requirements, the bad way
Jeff Hammel <k0scist@gmail.com>
parents:
207
diff
changeset
|
16 # (key, value) = (module, PyPI name) |
|
ab726b2f3143
arbitrary python requirements, the bad way
Jeff Hammel <k0scist@gmail.com>
parents:
207
diff
changeset
|
17 requirements = () |
|
ab726b2f3143
arbitrary python requirements, the bad way
Jeff Hammel <k0scist@gmail.com>
parents:
207
diff
changeset
|
18 for module, package in requirements: |
|
ab726b2f3143
arbitrary python requirements, the bad way
Jeff Hammel <k0scist@gmail.com>
parents:
207
diff
changeset
|
19 try: |
|
ab726b2f3143
arbitrary python requirements, the bad way
Jeff Hammel <k0scist@gmail.com>
parents:
207
diff
changeset
|
20 globals()[module] = __import__(module) |
|
ab726b2f3143
arbitrary python requirements, the bad way
Jeff Hammel <k0scist@gmail.com>
parents:
207
diff
changeset
|
21 except ImportError: |
|
ab726b2f3143
arbitrary python requirements, the bad way
Jeff Hammel <k0scist@gmail.com>
parents:
207
diff
changeset
|
22 # install requirement and try again |
|
ab726b2f3143
arbitrary python requirements, the bad way
Jeff Hammel <k0scist@gmail.com>
parents:
207
diff
changeset
|
23 subprocess.check_call(['pip', 'install', package]) |
|
ab726b2f3143
arbitrary python requirements, the bad way
Jeff Hammel <k0scist@gmail.com>
parents:
207
diff
changeset
|
24 args = [sys.executable] + sys.argv |
|
ab726b2f3143
arbitrary python requirements, the bad way
Jeff Hammel <k0scist@gmail.com>
parents:
207
diff
changeset
|
25 os.execl(sys.executable, *args) |
|
ab726b2f3143
arbitrary python requirements, the bad way
Jeff Hammel <k0scist@gmail.com>
parents:
207
diff
changeset
|
26 |
|
195
3cb66c9e5ce8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
188
diff
changeset
|
27 # module globals |
|
3cb66c9e5ce8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
188
diff
changeset
|
28 __all__ = ['main', 'Parser'] |
|
187
74f41d53b057
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
161
diff
changeset
|
29 here = os.path.dirname(os.path.realpath(__file__)) |
| 188 | 30 string = (str, unicode) |
|
187
74f41d53b057
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
161
diff
changeset
|
31 |
|
196
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
32 def ensure_dir(directory): |
|
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
33 """ensure a directory exists""" |
|
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
34 if os.path.exists(directory): |
| 205 | 35 if not os.path.isdir(directory): |
| 36 raise OSError("Not a directory: '{}'".format(directory)) | |
|
196
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
37 return directory |
|
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
38 os.makedirs(directory) |
|
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
39 return directory |
|
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
40 |
| 188 | 41 |
| 42 class Parser(argparse.ArgumentParser): | |
| 43 """CLI option parser""" | |
|
198
be7e2e336d7a
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
197
diff
changeset
|
44 def __init__(self, **kwargs): |
|
206
d9d7bfdb54db
http://stackoverflow.com/questions/4375327/python-argparse-preformatted-help-text
Jeff Hammel <k0scist@gmail.com>
parents:
205
diff
changeset
|
45 kwargs.setdefault('formatter_class', argparse.RawTextHelpFormatter) |
|
198
be7e2e336d7a
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
197
diff
changeset
|
46 kwargs.setdefault('description', __doc__) |
|
be7e2e336d7a
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
197
diff
changeset
|
47 argparse.ArgumentParser.__init__(self, **kwargs) |
| 207 | 48 self.add_argument('--monitor', dest='monitor', |
| 49 type=float, metavar='SLEEP', | |
| 50 help="run in monitor mode") | |
|
196
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
51 self.options = None |
| 188 | 52 |
|
196
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
53 def parse_args(self, *args, **kw): |
| 197 | 54 options = argparse.ArgumentParser.parse_args(self, *args, **kw) |
|
196
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
55 self.validate(options) |
|
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
56 self.options = options |
|
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
57 return options |
|
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
58 |
|
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
59 def validate(self, options): |
|
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
60 """validate options""" |
| 79 | 61 |
|
155
386a44a52139
moving to a thing with script template
Jeff Hammel <jhammel@mozilla.com>
parents:
149
diff
changeset
|
62 def main(args=sys.argv[1:]): |
| 188 | 63 """CLI""" |
|
130
d9201f911458
better description formatting
Jeff Hammel <jhammel@mozilla.com>
parents:
79
diff
changeset
|
64 |
| 139 | 65 # parse command line options |
| 197 | 66 parser = Parser() |
| 188 | 67 options = parser.parse_args(args) |
| 79 | 68 |
| 207 | 69 try: |
| 70 while True: | |
| 71 if options.monitor: | |
| 72 time.sleep(options.monitor) | |
| 73 else: | |
| 74 break | |
| 75 except KeyboardInterrupt: | |
| 76 pass | |
| 77 | |
| 79 | 78 if __name__ == '__main__': |
|
196
d25ca7099df8
STUB: makeitso/python_package/{{package}}/{{main}}.py
Jeff Hammel <k0scist@gmail.com>
parents:
195
diff
changeset
|
79 main() |
| 207 | 80 |
