Ejemplo n.º 1
0
    def __init__(self, start_date, end_date, user_config=None):
        """Initialize the generator."""
        if not self.TEMPLATE:
            raise AttributeError("Class attribute 'TEMPLATE' must be defined.")

        if not self.TEMPLATE_KWARGS:
            raise AttributeError(
                "Class attribute 'TEMPLATE_KWARGS' must be defined.")

        LOADER_LIST.append(PackageLoader("nise"))
        if user_config:
            LOADER_LIST.append(
                FileSystemLoader(os.path.abspath(
                    os.path.dirname(user_config))))

        env = Environment(loader=ChoiceLoader(LOADER_LIST))
        env.globals["faker"] = faker_passthrough

        default_template = env.get_template(self.TEMPLATE)
        if user_config:
            user_template = env.get_template(os.path.basename(user_config))
            user_yaml = load_yaml(user_template.render(**self.TEMPLATE_KWARGS))

            # sort lists of dicts so that generator class names align.
            generators = user_yaml.get("generators")
            user_yaml["generators"] = sorted(generators,
                                             key=lambda d: list(d.keys()))

            default_yaml = load_yaml(
                default_template.render(**self.TEMPLATE_KWARGS))
            config = deepupdate(
                default_yaml, user_yaml
            )  # merge user-supplied static file with base template
        else:
            config = load_yaml(default_template.render(**self.TEMPLATE_KWARGS))

        # handle special-cases in YAML config syntax
        config = self._format_config(config)

        # remove top-level class name
        self.config = []
        for generators in config.get("generators"):
            for key, val in generators.items():
                if key == type(self).__name__:
                    self.config.append(val)

        self.start_date = self._set_date_config(start_date, "start")
        self.end_date = self._set_date_config(end_date, "end")
        self.hours = self._set_hours()
        self.days = self._set_days()

        LOG.debug("Current config: %s", pformat(self.config))

        super().__init__()
Ejemplo n.º 2
0
def main():
    """Run data generation program."""
    parser = create_parser()
    args = parser.parse_args()
    if args.log_level:
        LOG.setLevel(LOG_VERBOSITY[args.log_level])
    if not args.command:
        parser.error('"yaml" or "report" argument must be specified')
    elif args.command == "yaml":
        yaml_main(args)
        return
    options = vars(args)
    LOG.debug("Options are: %s", pformat(options))

    if not (options.get("start_date") or options.get("static_report_file")):
        parser.error("the following arguments are required: -s, --start-date")

    _, provider_type = _validate_provider_inputs(parser, options)

    run(provider_type, options)