Mercurial > hg > Lemuriformes
comparison lemuriformes/main.py @ 0:7a4a073ee13e
initial commit
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Mon, 22 May 2017 18:50:11 -0700 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:7a4a073ee13e |
---|---|
1 #!/usr/bin/env python | |
2 # -*- coding: utf-8 -*- | |
3 | |
4 """ | |
5 ReSTful API consumer in python | |
6 """ | |
7 | |
8 # imports | |
9 import argparse | |
10 import os | |
11 import subprocess | |
12 import sys | |
13 import time | |
14 | |
15 # python requirements | |
16 # (key, value) = (module, PyPI name) | |
17 requirements = () | |
18 for module, package in requirements: | |
19 try: | |
20 globals()[module] = __import__(module) | |
21 except ImportError: | |
22 # install requirement and try again | |
23 subprocess.check_call(['pip', 'install', package]) | |
24 args = [sys.executable] + sys.argv | |
25 os.execl(sys.executable, *args) | |
26 | |
27 # module globals | |
28 __all__ = ['main', 'Parser'] | |
29 here = os.path.dirname(os.path.realpath(__file__)) | |
30 | |
31 try: | |
32 # python 2 | |
33 string = (str, unicode) | |
34 except NameError: | |
35 # python 3 | |
36 string = (str, ) | |
37 | |
38 | |
39 def ensure_dir(directory): | |
40 """ensure a directory exists""" | |
41 if os.path.exists(directory): | |
42 if not os.path.isdir(directory): | |
43 raise OSError("Not a directory: '{}'".format(directory)) | |
44 return directory | |
45 os.makedirs(directory) | |
46 return directory | |
47 | |
48 | |
49 class Parser(argparse.ArgumentParser): | |
50 """CLI option parser""" | |
51 | |
52 def __init__(self, **kwargs): | |
53 kwargs.setdefault('formatter_class', argparse.RawTextHelpFormatter) | |
54 kwargs.setdefault('description', __doc__) | |
55 argparse.ArgumentParser.__init__(self, **kwargs) | |
56 self.add_argument('--monitor', dest='monitor', | |
57 type=float, metavar='SLEEP', | |
58 help="run in monitor mode") | |
59 self.options = None | |
60 | |
61 def parse_args(self, *args, **kw): | |
62 options = argparse.ArgumentParser.parse_args(self, *args, **kw) | |
63 self.validate(options) | |
64 self.options = options | |
65 return options | |
66 | |
67 def validate(self, options): | |
68 """validate options""" | |
69 | |
70 | |
71 def main(args=sys.argv[1:]): | |
72 """CLI""" | |
73 | |
74 # parse command line options | |
75 parser = Parser() | |
76 options = parser.parse_args(args) | |
77 | |
78 try: | |
79 while True: | |
80 if options.monitor: | |
81 time.sleep(options.monitor) | |
82 else: | |
83 break | |
84 except KeyboardInterrupt: | |
85 pass | |
86 | |
87 | |
88 if __name__ == '__main__': | |
89 main() | |
90 | |
91 |