Merge one validated draft protocol declaration into TOML metadata.
Source code in packages/axm-init/src/axm_init/core/protocol_metadata.py
| Python |
|---|
| def merge_protocol_metadata(
metadata: str,
declaration: ProtocolScaffoldDecl,
) -> str:
"""Merge one validated draft protocol declaration into TOML metadata."""
document = parse(metadata)
tool = _table_at(document, "tool")
axm_init = _table_at(tool, "axm-init")
profile = _table_at(axm_init, "protocols")
profile["schema_version"] = 1
profile["domain"] = declaration.domain
units = _array_of_tables_at(profile, "units")
unit_match = _find_table(units, "name", declaration.unit)
if unit_match is None:
unit = table()
unit["name"] = declaration.unit
unit["protocols"] = aot()
units.append(unit)
else:
_, unit = unit_match
protocols = _array_of_tables_at(unit, "protocols")
desired = _protocol_table(declaration)
protocol_match = _find_table(protocols, "action", declaration.action)
if protocol_match is None:
protocols.append(desired)
else:
index, current = protocol_match
if dumps(current) == dumps(desired):
return metadata
protocols[index] = desired
return dumps(document)
|