Skip to main content

ub-project

A library for the sphinx-needs family, which the extensions pull in – not a Sphinx extension, and nothing to add to conf.py.

It is the shared reader for ubproject.toml, the declarative file that describes a project to every useblocks tool: the sphinx-needs family of Sphinx extensions (sphinx-needs, sphinx-mounts, sphinx-codelinks, sphinx-test-reports), their command lines, and ubCode.

It holds the parts of that file more than one tool reads, so that they are read one way:

  • finding, loading and anchoring the file – the walk up to the repository root (or, outside a repository, the distribution root), TOML read with every failure named, a dotted table selected, and relative paths anchored at the file’s own directory;

  • the [variants] table, with the legacy [needs] variant_data* keys as its fallback;

  • the variant-data merge – validate, load from JSON, deep-merge, resolve – in one copy.

Standard library only: no Sphinx, no docutils, no sibling distribution. A converter or a build action that runs without the documentation toolchain can use it.

The three calls

from pathlib import Path

from ub_project import find_project_config, load_toml, read_variants

toml_path = find_project_config(Path.cwd())   # or the path your tool is configured with
if toml_path is not None:
    result = read_variants(load_toml(toml_path), toml_path)
    result.data          # the merged variant map
    result.data_file     # the data file, anchored at the TOML's directory, or None
    result.location      # "variants", "needs" or None
    result.diagnostics   # findings to report -- or not

Every hard failure is an ProjectConfigError whose message names the file and the rule that was broken.

[variants]

[variants]
data_file = "variants.json"   # one path, anchored at this file's directory

[variants.data]               # deep-merged over the file; the inline table wins
edition = "pro"
build = { debug = false }

If [variants] declares neither key, the reader falls back to [needs] variant_data and [needs] variant_data_file. If both locations are set, [variants] is read whole and every ignored [needs] key is reported.

Consumers decide the policy

This package decides nothing a consumer has reason to decide differently. Discovery (walk up, or read the Sphinx confdir), warnings (a diagnostic is returned, never logged: whether the legacy location deserves one is each tool’s call), and the command line (-D in Sphinx, -c in ubCode) are all the consumer’s.

The contract

design/reading-contract.md is the normative specification, and tests/fixtures/ubproject_reading_conformance.toml is its executable half: a corpus of inputs and expected results that this package’s suite runs, and that ubCode is to vendor and run against its own reader (its reader does not read [variants] yet).

Metadata

Release files for ub-project 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ub-project 1.1.0
File Size Uploaded
ub_project-1.1.0.tar.gz 14.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ub-project 1.1.0
File Interpreter ABI Platform
ub_project-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 29.0 kB

Release files / ub_project-1.1.0.tar.gz

Download URL ub_project-1.1.0.tar.gz
Size 14.0 kB
Tags Source
SHA-256 checksum
How to use checksums
97774c8ee68e3fe4650b18e2a6b54e4e4b1469c91bde3432ac474394ecca4b67
BLAKE2b-256 checksum
How to use checksums
d2ceefa8791a9a5878b26d6508fcf78bb55ab4d10fabe5643fe08a03e2479e18
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ub_project-1.1.0-py3-none-any.whl

Download URL ub_project-1.1.0-py3-none-any.whl
Size 15.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
eff02771b7f79b7109f26e17accc8b924a027c5d9ad0b799ec74720eaa20970e
BLAKE2b-256 checksum
How to use checksums
de38b3c9c3ccf3561daca19878392793f3263914bd4852ddbc49f5f3bfeaeac0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page