Skip to content

Protocol metadata

protocol_metadata

merge_protocol_metadata(metadata, declaration)

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)