コード例 #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
コード例 #2
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
コード例 #3
0
def make_runner(do):
    runner = Runner(ArgumentParser)
    runner.add(options, ArgumentParser)
    runner.add(parse_args, last(ArgumentParser))
    runner.add(parse_config, first(Namespace))
    runner.add(setup_logging,
               log_path = item(first(Config), 'log'),
               quiet = attr(first(Namespace), 'quiet'),
               verbose = attr(first(Namespace), 'verbose'))
    runner.add(DatabaseHandler, item(Config, 'db'))
    runner.add(do,
               attr(DatabaseHandler, 'conn'),
               attr(Namespace, 'path'))
    return runner
コード例 #4
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
コード例 #5
0
ファイル: test_runner.py プロジェクト: cjw296/mush
    def test_nested(self):
        class T(object):
            foo = dict(baz='bar')
        m = Mock()
        def job1():
            m.job1()
            return T()
        def job2(obj):
            m.job2(obj)
        runner = Runner()
        runner.add(job1)
        runner.add(job2, item(attr(T, 'foo'), 'baz'))
        runner()

        compare([
                call.job1(),
                call.job2('bar'),
                ], m.mock_calls)
コード例 #6
0
ファイル: test_runner.py プロジェクト: cjw296/mush
 def test_item_multiple(self):
     class MyDict(dict): pass
     m = Mock()
     def job1():
         m.job1()
         obj = MyDict()
         obj['the_thing'] = dict(other_thing=m.the_thing)
         return obj
     def job2(obj):
         m.job2(obj)
     runner = Runner()
     runner.add(job1)
     runner.add(job2, item(MyDict, 'the_thing', 'other_thing'))
     runner()
     compare([
             call.job1(),
             call.job2(m.the_thing),
             ], m.mock_calls)
コード例 #7
0
ファイル: test_dependencies.py プロジェクト: cjw296/mush
    def test_how_when(self):
        m = Mock()
        class T(dict):
            foo = 'bar'
        @requires(item(first(T), 'baz'))
        def f_t(o): m.f_t(o)
        @requires(T)
        def n_t(o): m.n_t(o.__class__)
        @requires(attr(last(T), 'foo'))
        def l_t(o): m.l_t(o)

        def make_t():
            t = T()
            t['baz'] = 'bob'
            return t

        Runner(l_t, n_t, f_t, make_t)()

        compare([
                call.f_t('bob'),
                call.n_t(T),
                call.l_t('bar'),
                ], m.mock_calls)
コード例 #8
0
ファイル: example_with_mush_clone.py プロジェクト: rnth/mush
    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)
    with open(path) as source:
        conn.execute('insert into notes values (?, ?)',
                     (filename, source.read()))
    conn.commit()
    log.info('Successfully added %r', filename)
コード例 #9
0
ファイル: test_requires.py プロジェクト: cjw296/mush
 def test_item(self):
     o = item(Type1, 'the key')
     compare(repr(o), "Type1['the key']")
     compare(o.type, Type1)
     compare(o.names, ('the key', ))
     self.assertTrue(isinstance(o, how))
コード例 #10
0
        handler.setLevel(logging.DEBUG if verbose else logging.INFO)
        log.addHandler(handler)

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_options, parse_args, parse_config)
base_runner.add(setup_logging,
                log_path = item(first(Config), 'log'),
                quiet = attr(first(Namespace), 'quiet'),
                verbose = attr(first(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)
    with open(path) as source:
        conn.execute('insert into notes values (?, ?)',
                     (filename, source.read()))
    conn.commit()
    log.info('Successfully added %r', filename)
    
コード例 #11
0
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(
        name=item('config', 'db', 'name'),
        user=item('config', 'db', 'user'),
        password=item('config', 'db', 'password'),
    ))

script.add_label('body')
コード例 #12
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)
    with open(path) as source:
        conn.execute('insert into notes values (?, ?)',
                     (filename, source.read()))
    conn.commit()
    log.info('Successfully added %r', filename)