def script(body, args=None): script = Runner() script.add(ArgumentParser) script.add(common_arguments) if args: script.add(args, requires=ArgumentParser) script.add(parse_args) script.add(load_config, requires=attr(Namespace, 'config'), returns='config') script.add(adjust_config) script.add( setup_logging, requires( log_path=item('config', 'log_path'), quiet=attr(Namespace, 'quiet'), verbose=attr(Namespace, 'verbose'), )) script.add(log_details) script.add( handle_database, requires( name=item('config', 'db', 'name'), user=item('config', 'db', 'user'), password=item('config', 'db', 'password'), )) script.add(body) return script
def test_append(self): m = Mock() runner = Runner() runner.add(m.job1, label='one') class MyPlug(Plug): @append() def run_plug(self): m.do_it() plug = MyPlug() plug.add_to(runner) runner() compare([ call.job1(), call.do_it() ], actual=m.mock_calls) verify(runner, (m.job1, {'one'}), (plug.run_plug, set()), )
def test_explict(self): m = Mock() runner = Runner() runner.add(m.job1, label='one') class MyPlug(Plug): explicit = True def helper(self): m.plug_one() @insert() def one(self): self.helper() plug = MyPlug() plug.add_to(runner) runner() compare([ call.job1(), call.plug_one() ], actual=m.mock_calls) verify(runner, (m.job1, set()), (plug.one, {'one'}), )
def test_ignore(self): m = Mock() runner = Runner() runner.add(m.job1, label='one') class MyPlug(Plug): @ignore() def helper(self): # pragma: no cover m.plug_bad() def one(self): m.plug_good() plug = MyPlug() plug.add_to(runner) runner() compare([ call.job1(), call.plug_good() ], actual=m.mock_calls) verify(runner, (m.job1, set()), (plug.one, {'one'}), )
def test_remap_name(self): m = Mock() runner = Runner() runner.add(m.job1, label='one') class MyPlug(Plug): @insert(label='one') def run_plug(self): m.plug_one() plug = MyPlug() plug.add_to(runner) runner() compare([ call.job1(), call.plug_one() ], m.mock_calls) verify(runner, (m.job1, set()), (plug.run_plug, {'one'}), )
def test_simple(self): m = Mock() runner = Runner() runner.add(m.job1, label='one') runner.add(m.job2) runner.add(m.job3, label='three') runner.add(m.job4) class MyPlug(Plug): def one(self): m.plug_one() def three(self): m.plug_two() plug = MyPlug() plug.add_to(runner) runner() compare([ call.job1(), call.plug_one(), call.job2(), call.job3(), call.plug_two(), call.job4() ], m.mock_calls) verify(runner, (m.job1, set()), (plug.one, {'one'}), (m.job2, set()), (m.job3, set()), (plug.three, {'three'}), (m.job4, set()), )
def run_with(main, conn, argv): runner = Runner(ArgumentParser) runner.extend(main.clone(added_using='args')) runner.add(lambda parser: parser.parse_args(argv), requires=ArgumentParser) runner.add(lambda: conn) runner.extend(main.clone(start_label='body')) runner()
def test_label_not_there(self): runner = Runner() class MyPlug(Plug): def not_there(self): pass with ShouldRaise(KeyError('not_there')): MyPlug().add_to(runner)
def run(): runner = Runner() runner.add(load) runner.add(scrap_coins) runner.add(go_get_them) runner.add(scrap_exchanges) runner.add(cleanup) runner.add(get_all_trends) runner()
def make_runner(do): runner = Runner(ArgumentParser) runner.add(options, requires=ArgumentParser) runner.add(parse_args, requires=ArgumentParser) runner.add(parse_config, requires=Namespace) runner.add( setup_logging, requires(log_path=item('config', 'log'), quiet=attr(Namespace, 'quiet'), verbose=attr(Namespace, 'verbose'))) runner.add(DatabaseHandler, requires=item('config', 'db')) runner.add( do, requires(attr(DatabaseHandler, 'conn'), attr(Namespace, 'path'))) return runner
def test_requirements_and_returns(self): m = Mock() @returns('r1') def job1(): m.job1() return 1 @requires('r2') def job3(r): m.job3(r) runner = Runner() runner.add(job1, label='point') runner.add(job3) class MyPlug(Plug): @requires('r1') @returns('r2') def point(self, r): m.point(r) return 2 plug = MyPlug() plug.add_to(runner) runner() compare([ call.job1(), call.point(1), call.job3(2), ], m.mock_calls) verify( runner, (job1, set()), (plug.point, {'point'}), (job3, set()), )
def test_add_plug(self): m = Mock() runner = Runner() runner.add(m.job1, label='one') class MyPlug(Plug): def one(self): m.plug_one() plug = MyPlug() runner.add(plug) runner() compare([ call.job1(), call.plug_one() ], m.mock_calls) verify(runner, (m.job1, set()), (plug.one, {'one'}), )
class DatabaseHandler: def __init__(self, db_path): self.conn = sqlite3.connect(db_path) def __enter__(self): return self def __exit__(self, type, obj, tb): if type: log.exception('Something went wrong') self.conn.rollback() base_runner = Runner(ArgumentParser) base_runner.add(base_options, label='args') base_runner.extend(parse_args, parse_config) base_runner.add( setup_logging, requires(log_path=item('config', 'log'), quiet=attr(Namespace, 'quiet'), verbose=attr(Namespace, 'verbose'))) def args(parser): parser.add_argument('path', help='Path to the file to process') def do(conn, path): filename = os.path.basename(path)
from .components import (common_arguments, parse_args, load_config, adjust_config, setup_logging, handle_database, log_details) from argparse import ArgumentParser, Namespace from mush import Runner, attr, item, requires script = Runner() script.add(ArgumentParser) script.add(common_arguments) script.add_label('args') script.add(parse_args) script.add(load_config, requires=attr(Namespace, 'config'), returns='config') script.add(adjust_config) script.add_label('adjust_config') script.add( setup_logging, requires( log_path=item('config', 'log_path'), quiet=attr(Namespace, 'quiet'), verbose=attr(Namespace, 'verbose'), )) script.add(log_details) script.add( handle_database, requires(