Source code for improver.cli.interpret_metadata

#!/usr/bin/env python
# (C) Crown Copyright, Met Office. All rights reserved.
#
# This file is part of 'IMPROVER' and is released under the BSD 3-Clause license.
# See LICENSE in the root of the repository for full licensing details.
"""Script to interpret the metadata of an IMPROVER output."""

from improver import cli


[docs] @cli.clizefy def process(*file_paths: cli.inputpath, verbose=False, failures_only=False): """Intepret the metadata of an IMPROVER output into human readable format according to the IMPROVER standard. An optional verbosity flag, if set to True, will specify the source of each interpreted element. This tool is intended as an aid to developers in adding and modifying metadata within the code base. Args: file_paths (list of Path objects): File paths to netCDF files for which the metadata should be interpreted. verbose (bool): Boolean flag to output information about sources of metadata interpretation. failures_only (bool): Boolean flag that, if set, means only information about non-compliant files is printed. Raises: ValueError: If any of the input files are not metadata compliant. """ from iris import load from improver.developer_tools.metadata_interpreter import ( MOMetadataInterpreter, display_interpretation, ) cubelists = {file_path: load(file_path.as_posix()) for file_path in file_paths} any_failures = False for file, cubelist in cubelists.items(): for cube in cubelist: interpreter = MOMetadataInterpreter() try: interpreter.run(cube) except ValueError as err: output = "Non-compliant :\n{}".format(str(err)) any_failures = True else: if failures_only: continue output = display_interpretation(interpreter, verbose=verbose) print(f"\nfile : {file}") print(f"cube name : {cube.name()}") print(output) if any_failures: raise ValueError("One or more files checked is not metadata compliant")