From 353fed9586ad4c60d1ca7043cf5c6d3e22a00d34 Mon Sep 17 00:00:00 2001 From: Matthew Lemon Date: Sun, 17 Jan 2021 21:05:41 +0000 Subject: added validationonly flag to import templates command --- datamaps/main.py | 66 +++++++++++++++++++++++++++++++++++++++++----- datamaps/tests/test_cli.py | 10 +++++++ 2 files changed, 70 insertions(+), 6 deletions(-) diff --git a/datamaps/main.py b/datamaps/main.py index 1bde2a6..a582e18 100644 --- a/datamaps/main.py +++ b/datamaps/main.py @@ -143,8 +143,17 @@ def show_file(): help="Set row limit to prevent spurious Excel files with hidden rows being processed." "Default is 500.", ) -@click.option("--inputdir", help="Path to input directory", metavar="INPUT_DIRECTORY_PATH") -def templates(to_master, datamap, rowlimit, inputdir): +@click.option( + "--inputdir", help="Path to input directory", metavar="INPUT_DIRECTORY_PATH" +) +@click.option( + "--validationonly", + "-v", + is_flag=True, + default=False, + help="Create validation report only - do not output data anywhere.", +) +def templates(to_master, datamap, rowlimit, inputdir, validationonly): """Import data to a master file from a collection of populated templates. BASICS @@ -169,10 +178,17 @@ def templates(to_master, datamap, rowlimit, inputdir): if rowlimit == 0: logging.critical("Row limit cannot be 0. Quitting.") sys.exit(1) - if to_master: + if to_master and validationonly: + logging.critical("Cannot select both -m/--to-master and -v/--validationonly flags.") + sys.exit(1) + if validationonly: try: engine_cli.import_and_create_master( - echo_funcs=output_funcs, datamap=datamap, rowlimit=rowlimit, inputdir=inputdir + echo_funcs=output_funcs, + datamap=datamap, + rowlimit=rowlimit, + inputdir=inputdir, + validationonly=validationonly, ) except MalFormedCSVHeaderException as e: click.echo( @@ -207,8 +223,46 @@ def templates(to_master, datamap, rowlimit, inputdir): logger.critical(e) sys.exit(1) - else: - click.secho("Not implemented yet. Try --to-master/-m flag") + if to_master: + try: + engine_cli.import_and_create_master( + echo_funcs=output_funcs, + datamap=datamap, + rowlimit=rowlimit, + inputdir=inputdir, + ) + except MalFormedCSVHeaderException as e: + click.echo( + click.style( + "Incorrect headers in datamap. {}.".format(e.args[0]), + bold=True, + reverse=True, + fg="cyan", + ) + ) + except RemoveFileWithNoSheetRequiredByDatamap: + logging.info("Import complete.") + except RuntimeError: + logger.critical( + "Not completing import process due to runtime error. Please check output for CRITICAL messages to diagnose." + ) + except NoApplicableSheetsInTemplateFiles: + logger.critical("Not completing import process.") + except FileNotFoundError as e: + logger.critical(e) + sys.exit(1) + except MissingSheetFieldError as e: + logger.critical(e) + sys.exit(1) + except MissingCellKeyError as e: + logger.critical(e) + sys.exit(1) + except DatamapFileEncodingError as e: + logger.critical(e) + sys.exit(1) + except DatamapNotCSVException as e: + logger.critical(e) + sys.exit(1) @export.command() diff --git a/datamaps/tests/test_cli.py b/datamaps/tests/test_cli.py index a3a832f..aed9d56 100644 --- a/datamaps/tests/test_cli.py +++ b/datamaps/tests/test_cli.py @@ -20,6 +20,16 @@ def _copy_resources_to_input(config, directory): ) +def test_can_run_validation_only_template_import(mock_config, resource_dir, caplog): + runner = CliRunner() + mock_config.initialise() + caplog.set_level(logging.INFO) + _copy_resources_to_input(mock_config, resource_dir) + result = runner.invoke(_import, ["templates", "-v"]) + assert result.exit_code == 0 + assert "No output file required." in [x[2] for x in caplog.record_tuples] + + def test_import_from_user_defined_source_dir( mock_config, resource_dir, caplog, temp_input_dir ): -- cgit v1.2.3