Source code for submit_data_from_external
#!/usr/bin/python3
r"""
Submit data file through the command line.
Input data and metadata is validated, and if necessary enriched
and converted following a pre-described schema.
Command line arguments
----------------------
input_meta (str, optional)
input meta data file (yml format)
input (str, optional)
input data file
schema (str, optional)
Schema describing the input data
Example
-------
Submit mirror measurements with associated metadata:
.. code-block:: console
simtools-submit-data-from-external \\
--input_meta ./tests/resources/MLTdata-preproduction.meta.yml \\
--input ./tests/resources/MLTdata-preproduction.ecsv \\
--schema src/simtools/schemas/input/MST_mirror_2f_measurements.schema.yml \\
--output_file TEST-submit_data_from_external.ecsv
Expected final print-out message:
.. code-block:: console
INFO::model_data_writer(l70)::write_data::Writing data to \\
/simtools/simtools-output/d-2023-07-31/TEST-submit_data_from_external.ecsv
"""
import simtools.data_model.model_data_writer as writer
from simtools.application_control import get_application_label, startup_application
from simtools.configuration import configurator
from simtools.data_model import validate_data
from simtools.data_model.metadata_collector import MetadataCollector
def _parse():
"""Parse command line configuration."""
config = configurator.Configurator(
label=get_application_label(__file__),
description="Submit and validate data (e.g., input data to tools, model parameters).",
)
config.parser.add_argument(
"--input_meta",
help="meta data file associated to input data",
type=str,
required=False,
)
config.parser.add_argument(
"--input",
help="input data file",
type=str,
required=True,
)
config.parser.add_argument(
"--schema",
help="schema file describing input data",
type=str,
required=False,
)
config.parser.add_argument(
"--ignore_metadata",
help="Ignore metadata",
action="store_true",
required=False,
)
return config.initialize(output=True)
[docs]
def main():
"""Submit and validate data (e.g., input data to tools, model parameters)."""
app_context = startup_application(_parse)
_metadata = (
None if app_context.args.get("ignore_metadata") else MetadataCollector(app_context.args)
)
data_validator = validate_data.DataValidator(
schema_file=(
_metadata.get_data_model_schema_file_name()
if _metadata
else app_context.args.get("schema")
),
data_file=app_context.args["input"],
)
writer.ModelDataWriter.dump(
args_dict=app_context.args,
metadata=_metadata,
product_data=data_validator.validate_and_transform(),
)
if __name__ == "__main__":
main()