Ejemplo n.º 1
0
def _list(sin, sout, serr, hub):
    """list the managed test files and their templates under this hub"""

    from script_lib import build_path_relativizer as func
    relativize_path = func()

    current_template = None

    for fil in hub.file_units_of_work:
        tfile = fil.template_path
        if current_template != tfile:
            current_template = tfile
            sout.write(''.join(('template: ', relativize_path(tfile), '\n')))
        use = relativize_path(fil.absolute_path)
        sout.write(''.join(('file: ', use, '\n')))
Ejemplo n.º 2
0
def build_CLI_(definition):
    def cli(sin, sout, serr, argv, rscser):
        (bash_argv := list(reversed(argv))).pop()
        prog_name = '<this>'
        foz = _foz_via(_foz(), lambda: prog_name, lambda: _subs(hub))
        vals, es = foz.nonterminal_parse(serr, bash_argv)
        if vals is None:
            return es
        if vals.get('help'):
            return foz.write_help_into(serr, hub.to_doc_bigstring())
        cmd_tup = vals.pop('command')
        cmd_name, cmd_funcer, es = foz.parse_alternation_fuzzily(
            serr, cmd_tup[0])  # noqa: E501
        if not cmd_name:
            return es
        ch_pn = ' '.join((prog_name, cmd_name))  # we don't love it, but later
        ch_argv = (ch_pn, *cmd_tup[1:])
        return cmd_funcer()(sin, sout, serr, ch_argv, None)

    from . import hub_via_defininition_ as func
    hub = func(definition)
    return cli
Ejemplo n.º 3
0
 def update_each_file_DOM():
     from ._file_DOM_via_lines import updated_file_blocks_via_ as func
     for plan, cDOM, uow in self.file_plan_and_cDOM_and_UOWs:
         updated_blocks = func(plan, throwing_listener)
         new_DOM = file_DOM_via_blocks(updated_blocks, uow.absolute_path)
         yield new_DOM, cDOM, uow
Ejemplo n.º 4
0
def update_files_(listener, files, is_dry, edit_in_place_extension, hub):
    def main():
        resolve_target_managed_files_from_arguments()
        parse_argument_files()
        parse_template_files()
        resolve_a_plan_for_each_file()
        update_each_file_DOM()
        resolve_the_patch_units_of_work()
        if the_edit_in_place_extension_says_go_ahead_and_write_files():
            write_the_files()
            return _the_empty_iterator()
        return the_diff_lines()

    def write_tuple(attr):  # #decorator
        def decorator(orig_f):
            def use_f():
                setattr(self, attr, tuple(orig_f()))

            return use_f

        return decorator

    def write_the_files():
        if '' == edit_in_place_extension:
            _whine_about_no_backup_plan(listener)
            raise _Stop()
        _write_files(edit_in_place_extension, self.patch_units_of_work,
                     throwing_listener, is_dry)

    def the_diff_lines():
        for uow in self.patch_units_of_work:
            for line in uow.diff_lines:
                yield line

    def the_edit_in_place_extension_says_go_ahead_and_write_files():
        return edit_in_place_extension is not None

    @write_tuple('patch_units_of_work')
    def resolve_the_patch_units_of_work():
        return _patch_units_of_work_via(self.file_diff_ingredientses,
                                        relativize_path, listener)

    @write_tuple('file_diff_ingredientses')
    def update_each_file_DOM():
        from ._file_DOM_via_lines import updated_file_blocks_via_ as func
        for plan, cDOM, uow in self.file_plan_and_cDOM_and_UOWs:
            updated_blocks = func(plan, throwing_listener)
            new_DOM = file_DOM_via_blocks(updated_blocks, uow.absolute_path)
            yield new_DOM, cDOM, uow

    @write_tuple('file_plan_and_cDOM_and_UOWs')
    def resolve_a_plan_for_each_file():
        from ._file_DOM_via_lines import \
            plan_via_client_and_template_blocks_ as plan_via
        template_DOM_via_templ_path = self.template_DOM_via_template_path
        for cDOM, uow in self.client_file_plan_ingredients:
            template_path = uow.template_path
            tDOM = template_DOM_via_templ_path[template_path]
            plan = plan_via(cDOM.blocks, tDOM.blocks, throwing_listener)
            yield plan, cDOM, uow

    def parse_template_files():
        # Many client files probably point at one template file. Don't parse
        # any participating template file more than once (at the top level)

        # Get the unique list of template paths
        dct = {uow.template_path: None for uow in uows()}

        # Parse each participating template file
        for path in dct.keys():
            with open(path) as lines:
                dct[path] = file_DOM_via_lines(lines, path)
        self.template_DOM_via_template_path = dct

    @write_tuple('client_file_plan_ingredients')
    def parse_argument_files():
        for uow in uows():
            path, opened = uow.absolute_path, None
            try:
                opened = open(path)
            except FileNotFoundError as err:
                e = err
            if opened is None:
                _whine_about_file_not_found(listener, e)
                raise _Stop()
            with opened as lines:
                file_DOM = file_DOM_via_lines(lines, path)
            yield file_DOM, uow

    def uows():
        return self.target_managed_files

    def resolve_target_managed_files_from_arguments():
        self.target_managed_files = some(_resolve_files(files, hub, listener))

    def some(x):
        if x is None:
            raise _Stop()
        return x

    def throwing_listener(sev, *rest):
        listener(sev, *rest)
        if 'error' == sev:
            raise _Stop()

    from script_lib import build_path_relativizer as func
    relativize_path = func()

    from ._file_DOM_via_lines import \
        file_DOM_via_lines_ as file_DOM_via_lines, \
        file_DOM_via_blocks_ as file_DOM_via_blocks

    class self:  # #class-as-namespace
        pass

    try:
        return main()
    except _Stop:
        return _the_empty_iterator()
Ejemplo n.º 5
0
def _foz_via(*a):
    from script_lib.cheap_arg_parse import formals_via_definitions as func
    return func(*a)
Ejemplo n.º 6
0
def _error_monitor_via_stdin(sin):
    from script_lib.magnetics.error_monitor_via_stderr import func
    return func(sin)