Refactor `boxes` start script
- split up into separate functions
This commit is contained in:
parent
c7ebd2aae4
commit
b13cef20ed
108
scripts/boxes
108
scripts/boxes
|
@ -1,59 +1,105 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
"""boxes.py
|
||||||
|
|
||||||
|
Generate stencils for wooden boxes.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
boxes <generator> [<args>...]
|
||||||
|
boxes --list
|
||||||
|
boxes (-h | --help)
|
||||||
|
boxes --version
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h --help Show this screen.
|
||||||
|
--version Show version.
|
||||||
|
--list List available generators.
|
||||||
|
"""
|
||||||
|
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
import argparse
|
|
||||||
import os
|
|
||||||
import sys
|
import sys
|
||||||
from pprint import pprint
|
import os
|
||||||
|
from pkg_resources import get_distribution
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import boxes
|
import boxes
|
||||||
except ImportError:
|
except ImportError:
|
||||||
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/..")
|
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + '/..')
|
||||||
import boxes
|
import boxes
|
||||||
|
|
||||||
import boxes.generators
|
import boxes.generators
|
||||||
|
|
||||||
def printusage():
|
#__version__ = get_distribution('boxes').version
|
||||||
print("""Usage:
|
|
||||||
boxes [NAME] [options]
|
|
||||||
--list list possible names
|
|
||||||
--help show help for given NAME
|
|
||||||
""")
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
generators = {name.split('.')[-1].lower() : box for name, box in
|
#version = 'boxes.py v{}'.format(__version__)
|
||||||
boxes.generators.getAllBoxGenerators().items()}
|
|
||||||
groups = boxes.generators.ui_groups
|
|
||||||
groups_by_name = boxes.generators.ui_groups_by_name
|
|
||||||
for name, box in generators.items():
|
|
||||||
groups_by_name.get(box.ui_group,
|
|
||||||
groups_by_name["Misc"]).add(box)
|
|
||||||
if len(sys.argv) > 1 and sys.argv[1].startswith("--id="):
|
if len(sys.argv) > 1 and sys.argv[1].startswith("--id="):
|
||||||
del sys.argv[1]
|
del sys.argv[1]
|
||||||
if len(sys.argv) == 1:
|
if len(sys.argv) == 1:
|
||||||
printusage()
|
print_usage()
|
||||||
elif sys.argv[1] == '--list':
|
elif sys.argv[1] == '--list':
|
||||||
print("Available generators:")
|
list_grouped_generators()
|
||||||
for group in groups:
|
else:
|
||||||
|
name = sys.argv[1].lower()
|
||||||
|
if name.startswith("--generator="):
|
||||||
|
name = name[12:]
|
||||||
|
run_generator(name, sys.argv[2:])
|
||||||
|
|
||||||
|
def print_usage():
|
||||||
|
print(__doc__)
|
||||||
|
|
||||||
|
def list_grouped_generators():
|
||||||
|
print('Available generators:')
|
||||||
|
for group in generator_groups():
|
||||||
print('\n' + group.title)
|
print('\n' + group.title)
|
||||||
if group.description:
|
if group.description:
|
||||||
print('\n%s\n' % group.description)
|
print('\n%s\n' % group.description)
|
||||||
else:
|
else:
|
||||||
print()
|
print()
|
||||||
for box in group.generators:
|
for box in group.generators:
|
||||||
print(" * ", box.__name__, ' - ', box.__doc__ or '')
|
print(' * {} - {}'.format(box.__name__, box.__doc__ or ''))
|
||||||
else:
|
|
||||||
name = sys.argv[1].lower()
|
|
||||||
if name.startswith("--generator="):
|
def run_generator(name, args):
|
||||||
name = name[12:]
|
generators = generators_by_name()
|
||||||
if (name in generators):
|
lower_name = name.lower()
|
||||||
box = generators[name]()
|
|
||||||
box.parseArgs(sys.argv[2:])
|
if lower_name in generators.keys():
|
||||||
|
box = generators[lower_name]()
|
||||||
|
box.parseArgs(args)
|
||||||
box.render()
|
box.render()
|
||||||
else:
|
else:
|
||||||
sys.stderr.write(str(sys.argv))
|
msg = ('Unknown generator \'{}\'. Use boxes --list to get a list of '
|
||||||
sys.stderr.write("Unknown generator name. Use boxes --list to get a list of available commands.")
|
'available commands.\n').format(name)
|
||||||
|
sys.stderr.write(msg)
|
||||||
|
|
||||||
|
|
||||||
|
def generator_groups():
|
||||||
|
generators = generators_by_name()
|
||||||
|
return group_generators(generators)
|
||||||
|
|
||||||
|
|
||||||
|
def group_generators(generators):
|
||||||
|
groups = boxes.generators.ui_groups
|
||||||
|
groups_by_name = boxes.generators.ui_groups_by_name
|
||||||
|
|
||||||
|
for name, generator in generators.items():
|
||||||
|
group_for_generator = groups_by_name.get(generator.ui_group,
|
||||||
|
groups_by_name['Misc'])
|
||||||
|
group_for_generator.add(generator)
|
||||||
|
|
||||||
|
return groups
|
||||||
|
|
||||||
|
|
||||||
|
def generators_by_name():
|
||||||
|
all_generators = boxes.generators.getAllBoxGenerators()
|
||||||
|
|
||||||
|
return {
|
||||||
|
name.split('.')[-1].lower(): generator
|
||||||
|
for name, generator in all_generators.items()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Reference in New Issue