rgpycrumbs.sbom

Backward-compatible CycloneDX helpers (see rgpycrumbs.locks).

Attributes

Functions

apply_pin_to_spec(→ str)

If pip_spec's package is in pins, return name==version.

load_cyclonedx(→ dict[str, Any])

Load and validate a CycloneDX JSON document from path.

load_pypi_pins(→ dict[str, str])

Load any supported lock/SBOM path and return a PyPI pin map.

normalize_pypi_name(→ str)

PEP 503-ish name normalization for pin lookups.

package_name_from_spec(→ str)

Return the distribution name from a pip requirement string.

pins_from_env(→ dict[str, str])

Read pin map from RGPKGS_LOCK_PINS / legacy pin envs.

pins_to_constraint_lines(→ list[str])

Render pin map as pip/uv constraint lines (name==version).

pypi_pins_from_cyclonedx(→ dict[str, str])

Extract {normalized_name: version} for PyPI components only.

Module Contents

rgpycrumbs.sbom.SBOM_PATH_ENV = 'RGPYCRUMBS_SBOM'[source]
rgpycrumbs.sbom.SBOM_PINS_ENV = 'RGPYCRUMBS_SBOM_PINS'[source]
rgpycrumbs.sbom.apply_pin_to_spec(pip_spec: str, pins: dict[str, str]) str[source]

If pip_spec’s package is in pins, return name==version.

rgpycrumbs.sbom.load_cyclonedx(path: str | pathlib.Path) dict[str, Any][source]

Load and validate a CycloneDX JSON document from path.

rgpycrumbs.sbom.load_pypi_pins(path: str | pathlib.Path) dict[str, str][source]

Load any supported lock/SBOM path and return a PyPI pin map.

Raises:

FileNotFoundError: path missing ValueError: unreadable / unsupported / empty-of-python when required

rgpycrumbs.sbom.normalize_pypi_name(name: str) str[source]

PEP 503-ish name normalization for pin lookups.

rgpycrumbs.sbom.package_name_from_spec(pip_spec: str) str[source]

Return the distribution name from a pip requirement string.

rgpycrumbs.sbom.pins_from_env(env: dict[str, str] | None = None) dict[str, str][source]

Read pin map from RGPKGS_LOCK_PINS / legacy pin envs.

rgpycrumbs.sbom.pins_to_constraint_lines(pins: dict[str, str]) list[str][source]

Render pin map as pip/uv constraint lines (name==version).

rgpycrumbs.sbom.pypi_pins_from_cyclonedx(doc: dict[str, Any]) dict[str, str][source]

Extract {normalized_name: version} for PyPI components only.