aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Lemon <lemon@matthewlemon.com>2021-01-17 21:05:41 +0000
committerMatthew Lemon <lemon@matthewlemon.com>2021-01-17 21:25:25 +0000
commit353fed9586ad4c60d1ca7043cf5c6d3e22a00d34 (patch)
tree7792cc271e8ec62621c05441e2eabf7d6c1b6420
parentadded flag to change input directory for import templates command (diff)
added validationonly flag to import templates command
-rw-r--r--datamaps/main.py66
-rw-r--r--datamaps/tests/test_cli.py10
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
):