def run(self): args = self.args environment = self.environment parallel = args['parallel'] config_file = args['config_yml'] try: with open(config_file) as f: try: c = self.config_class.from_yaml(f, environment=environment) except ConfigError as e: format_rich_error(e) sys.exit(1) except OSError as e: log.error("Could not open configuration file: %s" % e) sys.exit(1) self.environment.init_output() try: actions = c.parse_actions_(c['actions_']) except ConfigError as e: format_rich_error(e) sys.exit(1) except KeyError as e: log.error("A key 'actions_' is needed in the top level of the config file.") sys.exit(1) providers = self.providers rb = ResourceBuilder(c, providers, actions, environment=self.environment) try: rb.resolve_targets() except ConfigError as e: format_rich_error(e) sys.exit(1) except ResourceError as e: with contextlib.redirect_stdout(sys.stderr): log.error("Cannot process a resource:") print(e) sys.exit(1) try: if parallel: rb.execute_parallel() else: rb.execute_sequential() except KeyboardInterrupt: print(colors.t.bold_red("Interrupted by user. Exiting."), file=sys.stderr) exit(1)
def test_collect(self): inp = { 'Spain': {'restaurants': [{'restaurant': x} for x in ["La patata", "La boñata"]]}, 'UK': {'restaurants': [{'restaurant':x} for x in ["Whetherspoon","Kings arms"]]}, 'apple': "Golden", } provider = Provider() c = Config(inp) targets = [ Target('score', ('Spain',), ()), Target('score', ('UK',), ()) ] builder = ResourceBuilder(targets=targets, providers=provider, input_parser=c) builder.resolve_targets() builder.execute_parallel()