A Python build backend designed to wrap Python package generators into a PEP 517 compatible source tree
Project description
py-generator-build-backend
A Python build backend designed to wrap Python package generators (such as
openapi-python-client) into a PEP 517 compatible source tree.
Demo
Create a new directory with a pyproject.toml:
[project]
name = "tictactoe-client"
dynamic = [
"version",
"dependencies",
]
[build-system]
requires = [
"py-generator-build-backend",
]
build-backend = "py_generator_build_backend"
[tools.py-generator-build-backend]
generator = "openapi-python-client generate --url https://raw.githubusercontent.com/OAI/learn.openapis.org/refs/heads/main/examples/v3.1/tictactoe.json --output-path $GENERATOR_OUT_PATH"
The tools.py-generator-build-backend.generator is the key to making this work:
this command must produce a valid PEP 517 source tree in the (not-yet-existent)
directory specified by the $GENERATOR_OUT_PATH environment variable. You can
interpolate other environment variables in generator if you need to.
Note: you are responsible for making sure the command you want to run is
available on the PATH.
Now try to build the package: python -m build .. This should fail to build,
with instructions about the build requirements you need to add to your
build-system.requires. Add them and confirm that you are now able to build
the package.
Congratulations, you've got a Python package! See Packaging Python Projects for possible next steps.
Notes
For performance reasons, the output of the generator is cached in
platformdirs.user_cache_dir. We compute the cache entry by hashing together
the contents of the entire project directory, along with all environment
variables. This does a pretty good job of capturing all the "inputs" that go
into generating the package, but it's not perfect: the generator could be
non-deterministic, or packages could be updated in the PATH. If you care
about things like this, consider adopting a hermetic build tool such as
nix.
(Ideally we'd have access to a scratch space that only lives as long as the build frontend is invoking this build backend, but as far as I can tell, there's no standardized mechanism for that.)
Development
Releasing
- Edit
versioninpyproject.toml, and commit. uv buildgit tag v...uv publishgit push --tags
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file py_generator_build_backend-1.1.0.tar.gz.
File metadata
- Download URL: py_generator_build_backend-1.1.0.tar.gz
- Upload date:
- Size: 8.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bdc1bb3aa633f92a27d39e7bfe8abc029975d1a937bac8284daa1ee11bcde6c
|
|
| MD5 |
18d8687e6ca924466db412566619df6f
|
|
| BLAKE2b-256 |
602ef317679652206b7fecf464d89b4f0f3c7f7546cb6793dc4fb2b83d32a44b
|
File details
Details for the file py_generator_build_backend-1.1.0-py3-none-any.whl.
File metadata
- Download URL: py_generator_build_backend-1.1.0-py3-none-any.whl
- Upload date:
- Size: 5.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9da2cd867271837ba22b4e3fe719743b4f8e0ba832f75427079bdfdba8ebe1a
|
|
| MD5 |
f157c9f4969f568077ad388996d4f8b7
|
|
| BLAKE2b-256 |
ac45ecf0bb133d2d9edca9feefe0f3bcd647c88608fe97a6c134e33dcbe79672
|