#!/usr/bin/env python3 """boxes.py Generate stencils for wooden boxes. Usage: boxes [...] 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 import sys import os from pkg_resources import get_distribution try: import boxes except ImportError: sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..')) import boxes import boxes.generators #__version__ = get_distribution('boxes').version def main(): #version = 'boxes.py v{}'.format(__version__) if len(sys.argv) > 1 and sys.argv[1].startswith("--id="): del sys.argv[1] if len(sys.argv) == 1: print_usage() elif sys.argv[1] == '--list': list_grouped_generators() 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) if group.description: print('\n%s\n' % group.description) else: print() for box in group.generators: print(' * {} - {}'.format(box.__name__, box.__doc__ or '')) def run_generator(name, args): generators = generators_by_name() lower_name = name.lower() if lower_name in generators.keys(): box = generators[lower_name]() box.parseArgs(args) box.open() box.render() box.close() else: msg = ('Unknown generator \'{}\'. Use boxes --list to get a list of ' '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()