-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun.py
executable file
·83 lines (63 loc) · 2.19 KB
/
run.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/python3
from os.path import exists
import argparse
import yaml
import subprocess
from pathlib import Path
try:
from src.tasks import clone_repos, generate, lib
except:
from tasks import clone_repos, generate, lib
def parse_args():
parser = argparse.ArgumentParser(description='Building doc sites for any project(s).', prog="docs-site-builder")
parser.add_argument('tasks', metavar='task', type=str, nargs='+',
help='tasks to perform (clone, generate, serve)')
parser.add_argument('--config', '-c', metavar='filename', type=str, nargs='?',
default='project_vars.yml',
help='A config file containing site_root and repos.')
args = parser.parse_args()
if not exists(args.config):
raise Exception(f"The file \'{args.config}\' does not exist.", 1)
else:
args.config = Path(args.config).resolve()
return args
class BuilderCLI:
def __init__(self, args):
self.args = args
config_file = open(args.config, 'r')
doc_vars = yaml.load(config_file, Loader=yaml.FullLoader)
config_file.close()
self.doc_vars = doc_vars
def clone(self):
clone_repos.main(self.args.config)
def generate(self):
wd = self.doc_vars["working_directory"]
if not exists(wd):
self.clone()
generate.main(generate.load_vars(self.args))
def serve(self):
if not exists("site"):
self.generate()
try:
subprocess.call("python3 -m http.server -d site/".split())
except KeyboardInterrupt:
print("Stopping web server....")
def clean(self):
print("Cleaning up....")
subprocess.call(["rm", "-rf", self.doc_vars['working_directory'], "site", "mkdocs.yml"])
def main():
args = parse_args()
cli = BuilderCLI(args)
for task in args.tasks:
try:
if task == "clone":
cli.clone()
if task == "generate":
cli.generate()
if task == "serve":
cli.serve()
finally:
if task == "clean":
cli.clean()
if __name__ == "__main__":
main()