in scripts/schema/cleaner.py [0:0]
def normalize_reuse_notation(schema: FieldEntry) -> None:
"""
Replace single word reuse shorthands from the schema YAMLs with the explicit {at: , as:} notation.
When marking "user" as reusable under "destination" with the shorthand entry
`- destination`, this is expanded to the complete entry
`- { "at": "destination", "as": "user" }`.
The field set is thus nested at `destination.user.*`, with fields such as `destination.user.name`.
The dictionary notation enables nesting a field set as a different name.
An example is nesting "process" fields to capture parent process details
at `process.parent.*`.
The dictionary notation `- { "at": "process", "as": "parent" }` will yield
fields such as `process.parent.pid`.
"""
if 'reusable' not in schema['schema_details']:
return
schema_name = schema['field_details']['name']
reuse_entries = []
for reuse_entry in schema['schema_details']['reusable']['expected']:
if type(reuse_entry) is dict: # Already explicit
if 'at' in reuse_entry and 'as' in reuse_entry:
explicit_entry = reuse_entry
else:
raise ValueError(f"When specifying reusable expected locations for {schema_name} " +
f"with the dictionary notation, keys 'as' and 'at' are required. " +
f"Got {reuse_entry}.")
else: # Make it explicit
explicit_entry = {'at': reuse_entry, 'as': schema_name}
explicit_entry['full'] = explicit_entry['at'] + '.' + explicit_entry['as']
reuse_entries.append(explicit_entry)
schema['schema_details']['reusable']['expected'] = reuse_entries