Source code for bibliopixel.commands.demo

"""
Run a bibliopixel demo
"""

DESCRIPTION = """
For the list of possible demos, type

.. code-block:: bash

    bp demo list

"""

import random

from .. main import project_flags, demo_table
from .. project import project
from .. util import log

DEMO_OPTS = ', '.join(sorted(demo_table.DEMO_TABLE.keys()))


[docs]def make_runnable_animation(demo, args): if callable(demo): return demo(args).run if 'driver' in demo: if not demo['driver'].get('num'): if 'layout' in demo and demo['layout']['typename'] == 'cube': demo['driver']['num'] = args.width * args.height * args.depth else: demo['driver']['num'] = args.width * args.height if 'layout' in demo: layout = demo['layout'] if 'width' in layout: layout['width'] = layout['width'] or args.width if 'x' in layout: layout['x'] = layout['x'] or args.width if 'height' in layout: layout['height'] = layout['height'] or args.height if 'y' in layout: layout['y'] = layout['y'] or args.height if 'z' in layout: layout['z'] = layout['z'] or args.depth project = project_flags.make_project(args, demo) return project.animation
[docs]def usage(): log.printer('Available demos are: {}'.format(DEMO_OPTS))
[docs]def run(args): if args.name == 'list': usage() return args.simpixel = args.simpixel or True if not args.name: usage() args.name = random.choice(list(demo_table.DEMO_TABLE)) log.printer('Randomly selected', args.name) try: demo = demo_table.DEMO_TABLE[args.name] except KeyError: raise KeyError('Unknown demo %s' % args.name) animation = make_runnable_animation(demo, args) animation.layout.start() animation.start()
[docs]def add_arguments(parser): parser.set_defaults(run=run) project_flags.add_arguments(parser) parser.add_argument( 'name', nargs='?', default='', help='Name of demo to run. Options are: {}'.format(DEMO_OPTS)) parser.add_argument( '--width', default=16, type=int, help='X dimension of display') parser.add_argument( '--height', default=16, type=int, help='Y dimension of display') parser.add_argument( '--depth', default=16, type=int, help='Z dimension of display. Only used for Cube demos.')