def init_config(output=None): """ Initialize an empty configuration file. :param output: File to output content to. Defaults to ``stdin``. """ config_data = DEFAULT_CONFIG.copy() if output and output != "-": with open(output, "w") as fh: fh.write(tools.pretty_json(config_data)) else: print(tools.pretty_json(config_data))
def main(): """ Main module code. """ # pylint: disable=locally-disabled,too-many-branches # Parse arguments args = parse_args() # Set logger if args.vv: logging.getLogger('').setLevel(logging.DEBUG) logging.getLogger('sqlalchemy.engine').setLevel(logging.DEBUG) elif args.verbose: logging.getLogger('').setLevel(logging.INFO) # sqlalchemy INFO level is way too loud, just stick with WARNING logging.getLogger('sqlalchemy.engine').setLevel(logging.WARNING) else: logging.getLogger('').setLevel(logging.WARNING) logging.getLogger('sqlalchemy.engine').setLevel(logging.WARNING) # Init-config command if args.cmd == "init-config": flatisfy.config.init_config(args.output) sys.exit(0) else: # Load config if args.cmd == "build-data": # Data not yet built, do not use it in config checks config = flatisfy.config.load_config(args, check_with_data=False) else: config = flatisfy.config.load_config(args, check_with_data=True) if config is None: LOGGER.error("Invalid configuration. Exiting. " "Run init-config before if this is the first time " "you run Flatisfy.") sys.exit(1) # Purge command if args.cmd == "purge": cmds.purge_db(config) return # Build data files try: force = False if args.cmd == "build-data": force = True data.preprocess_data(config, force=force) LOGGER.info("Done building data!") if args.cmd == "build-data": sys.exit(0) except flatisfy.exceptions.DataBuildError as exc: LOGGER.error("%s", exc) sys.exit(1) # Fetch command if args.cmd == "fetch": # Fetch and filter flats list fetched_flats = fetch.fetch_flats(config) fetched_flats = cmds.filter_fetched_flats(config, fetched_flats=fetched_flats, fetch_details=True) # Sort by cost fetched_flats = { k: tools.sort_list_of_dicts_by(v["new"], "cost") for k, v in fetched_flats.items() } print(tools.pretty_json(fetched_flats)) return # Filter command elif args.cmd == "filter": # Load and filter flats list if args.input: fetched_flats = fetch.load_flats_from_file(args.input, config) fetched_flats = cmds.filter_fetched_flats( config, fetched_flats=fetched_flats, fetch_details=False) # Sort by cost fetched_flats = { k: tools.sort_list_of_dicts_by(v["new"], "cost") for k, v in fetched_flats.items() } # Output to stdout print(tools.pretty_json(fetched_flats)) else: cmds.import_and_filter(config, load_from_db=True) return # Import command elif args.cmd == "import": cmds.import_and_filter(config, load_from_db=False) return # Serve command elif args.cmd == "serve": cmds.serve(config) return