Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
    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()),
               )
Ejemplo n.º 3
0
    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'}),
               )
Ejemplo n.º 4
0
    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'}),
               )
Ejemplo n.º 5
0
    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'}),
               )
Ejemplo n.º 6
0
    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()),
               )
Ejemplo n.º 7
0
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()
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
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()
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
    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()),
        )
Ejemplo n.º 12
0
    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'}),
               )
Ejemplo n.º 13
0

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)
Ejemplo n.º 14
0
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(