in bigquery_etl/cli/metadata.py [0:0]
def update(name: str, sql_dir: Optional[str], project_id: Optional[str]) -> None:
"""Update metadata yaml file."""
table_metadata_files = paths_matching_name_pattern(
name, sql_dir, project_id=project_id, files=["metadata.yaml"]
)
retained_dataset_roles = ConfigLoader.get(
"deprecation", "retain_dataset_roles", fallback=[]
)
# create and populate the dataset metadata yaml file if it does not exist
for table_metadata_file in table_metadata_files:
dataset_metadata_path = (
Path(table_metadata_file).parent.parent / "dataset_metadata.yaml"
)
if not dataset_metadata_path.exists():
continue
dataset_metadata = DatasetMetadata.from_file(dataset_metadata_path)
table_metadata = Metadata.from_file(table_metadata_file)
dataset_metadata_updated = False
table_metadata_updated = False
# set dataset metadata default_table_workgroup_access to table_workgroup_access if not set
if not dataset_metadata.default_table_workgroup_access:
dataset_metadata.default_table_workgroup_access = (
dataset_metadata.workgroup_access
)
dataset_metadata_updated = True
if table_metadata.deprecated:
# set workgroup: [] if table has been tagged as deprecated
# this overwrites existing workgroups
table_metadata.workgroup_access = []
table_metadata_updated = True
dataset_metadata.workgroup_access = [
workgroup
for workgroup in dataset_metadata.workgroup_access
if workgroup.get("role") in retained_dataset_roles
]
dataset_metadata_updated = True
else:
if table_metadata.workgroup_access is None:
table_metadata.workgroup_access = []
for (
default_workgroup_access
) in dataset_metadata.default_table_workgroup_access:
role_exists = False
for i, table_workgroup_access in enumerate(
table_metadata.workgroup_access
):
if table_workgroup_access.role == default_workgroup_access.get(
"role"
):
role_exists = True
table_metadata.workgroup_access[i].members = sorted(
set(table_workgroup_access.members)
| set(default_workgroup_access.get("members", []))
)
table_metadata_updated = True
if not role_exists:
table_metadata.workgroup_access.append(
WorkgroupAccessMetadata(
role=default_workgroup_access["role"],
members=default_workgroup_access.get("members", []),
)
)
table_metadata_updated = True
if dataset_metadata_updated:
dataset_metadata.write(dataset_metadata_path)
click.echo(f"Updated {dataset_metadata_path}")
if table_metadata_updated:
table_metadata.write(table_metadata_file)
click.echo(f"Updated {table_metadata_file}")
return None