Skip to content

IndexBuilder

ocx_mirror_sdk.index.IndexBuilder

IndexBuilder()

Build a url_index JSON document with type-safe version entries.

Source code in src/ocx_mirror_sdk/index.py
def __init__(self) -> None:
    self._versions: dict[str, RemoteVersionEntry] = {}

add_version

add_version(version: str, *, assets: dict[str, str], prerelease: bool = False) -> None

Add a version with its assets.

PARAMETER DESCRIPTION
version

Semver version string (e.g., "22.15.0").

TYPE: str

assets

Map of asset filename to download URL.

TYPE: dict[str, str]

prerelease

Whether this is a pre-release.

TYPE: bool DEFAULT: False

Source code in src/ocx_mirror_sdk/index.py
def add_version(
    self,
    version: str,
    *,
    assets: dict[str, str],
    prerelease: bool = False,
) -> None:
    """Add a version with its assets.

    Args:
        version: Semver version string (e.g., "22.15.0").
        assets: Map of asset filename to download URL.
        prerelease: Whether this is a pre-release.
    """
    if not assets:
        return
    self._versions[version] = RemoteVersionEntry(
        assets=assets,
        prerelease=prerelease,
    )

build

build() -> RemoteIndex

Return the constructed :class:RemoteIndex.

The returned object holds a snapshot copy of the builder's state. Mutating the builder after :meth:build does not affect previously returned indexes, and vice versa.

Source code in src/ocx_mirror_sdk/index.py
def build(self) -> RemoteIndex:
    """Return the constructed :class:`RemoteIndex`.

    The returned object holds a snapshot copy of the builder's state.
    Mutating the builder after :meth:`build` does not affect previously
    returned indexes, and vice versa.
    """
    return RemoteIndex(versions=dict(self._versions))

emit

emit(file: TextIO = sys.stdout) -> None

Serialize to JSON and write to the given file (default: stdout).

Source code in src/ocx_mirror_sdk/index.py
def emit(self, file: TextIO = sys.stdout) -> None:
    """Serialize to JSON and write to the given file (default: stdout)."""
    index = self.build()
    data = {
        "versions": {
            ver: {"prerelease": entry.prerelease, "assets": entry.assets} for ver, entry in index.versions.items()
        }
    }
    json.dump(data, file, indent=2)
    file.write("\n")