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.2.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 | Provenance | Actions |
|---|---|---|---|---|
| ub_project-1.2.0.tar.gz | 14.8 kB | Without provenance | Details for ub_project-1.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ub_project-1.2.0-py3-none-any.whl | Python 3 | none | any | Details for ub_project-1.2.0-py3-none-any.whl |
Total release size: 30.8 kB
Release files / ub_project-1.2.0.tar.gz
| Download URL | ub_project-1.2.0.tar.gz |
|---|---|
| Size | 14.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e3bfac5aee84c4deb6d40456fa4034bf3a0f5ad11f5a89b9def1531d74942b09
|
|
BLAKE2b-256 checksum How to use checksums |
142098a118367ba6d9850382bdbdf7cfe965c1577e749e3a07d3749c9cdfc8f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","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.2.0-py3-none-any.whl
| Download URL | ub_project-1.2.0-py3-none-any.whl |
|---|---|
| Size | 16.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b19013d31ba5dd0bb1341df8c97c592934c5538d9f20569bc1891e147973cf3f
|
|
BLAKE2b-256 checksum How to use checksums |
2e792e34ac38269b992efa3d122a99bb12f0355056b64539306913bcb714e888
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for ub-project 1.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.