Skip to content

symfonic.capabilities.memory.scope_codec

scope_codec

Disjoint storage keys for positional and kind-aware memory rows.

legacy_scope_path

legacy_scope_path(scope: MemoryScope) -> str

Retain the shipped positional row format, for v0 only.

Source code in src/symfonic/capabilities/memory/scope_codec.py
def legacy_scope_path(scope: MemoryScope) -> str:
    """Retain the shipped positional row format, for v0 only."""
    if scope.identity_version:
        raise MemoryContractError("native scope requires versioned storage identity")
    return LEGACY_SCOPE_DELIMITER.join(
        part for pair in zip(LEGACY_SCOPE_KINDS, scope.segments, strict=False) for part in pair
    )

scope_from_legacy_path

scope_from_legacy_path(path: str) -> MemoryScope

Read positional rows without claiming their kinds are native.

Source code in src/symfonic/capabilities/memory/scope_codec.py
def scope_from_legacy_path(path: str) -> MemoryScope:
    """Read positional rows without claiming their kinds are native."""
    parts = path.split(LEGACY_SCOPE_DELIMITER) if path else []
    if not parts or len(parts) % 2:
        raise MemoryContractError(
            f"legacy scope path {path!r} has {len(parts)} segments; the stored form is "
            "alternating kind/id pairs, so an odd count is a truncated write."
        )
    return MemoryScope(*parts[1::2])

scope_from_storage_path

scope_from_storage_path(path: str) -> MemoryScope

Never decode a malformed or unknown native version as positional.

Source code in src/symfonic/capabilities/memory/scope_codec.py
def scope_from_storage_path(path: str) -> MemoryScope:
    """Never decode a malformed or unknown native version as positional."""
    if path.startswith(QUARANTINE_HEADER):
        # No path in the message: it encodes the owner the row was set aside from.
        raise MemoryContractError("quarantined positional row has no readable owner")
    if LEGACY_SCOPE_DELIMITER in path:
        return scope_from_legacy_path(path)
    if path.startswith(_NATIVE_HEADER):
        return MemoryScope.from_levels(StorageScopeKey.parse(path).levels)
    return scope_from_legacy_path(path)

storage_scope_path

storage_scope_path(scope: MemoryScope) -> str

Write complete native kind/ID keys or unchanged positional keys.

Source code in src/symfonic/capabilities/memory/scope_codec.py
def storage_scope_path(scope: MemoryScope) -> str:
    """Write complete native kind/ID keys or unchanged positional keys."""
    if scope.identity_version:
        return StorageScopeKey.from_scope(scope).key
    return legacy_scope_path(scope)