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)
| File | Size | Uploaded | |
|---|---|---|---|
| ub_project-1.1.0.tar.gz | 14.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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}
|