in bigquery_etl/metadata/validate_metadata.py [0:0]
def validate(target):
"""Validate metadata files."""
failed = False
skip_validation = ConfigLoader.get("metadata", "validation", "skip", fallback=[])
if os.path.isdir(target):
for root, dirs, files in os.walk(target, followlinks=True):
for file in files:
if Metadata.is_metadata_file(file):
path = os.path.join(root, file)
if path in skip_validation:
continue
metadata = Metadata.from_file(path)
if not validate_public_data(metadata, path):
failed = True
if not validate_change_control(
file_path=root,
metadata=metadata,
codeowners_file=CODEOWNERS_FILE,
):
failed = True
# Shredder mitigation checks still WIP
# if not validate_shredder_mitigation(
# query_dir=root,
# metadata=metadata,
# ):
# failed = True
if not validate_deprecation(metadata, path):
failed = True
if not validate_exclusion_list_expiration_days(metadata, path):
failed = True
if not validate_retention_policy_based_on_table_type(
metadata, path
):
failed = True
if not validate_col_desc_enforced(root, metadata):
failed = True
# todo more validation
# e.g. https://github.com/mozilla/bigquery-etl/issues/924
else:
raise ValueError(f"Invalid target: {target}, target must be a directory.")
if failed:
# TODO: add failed checks to message
raise MetadataValidationError(f"Metadata validation failed for {target}")