PDM Build Hook for Polylith
A plugin for PDM and the Polylith Architecture.
This build hook will look for Polylith bricks in pyproject.toml and optionally re-write the imports made in the source code.
Installation
[build-system]
requires = ["pdm-backend", "pdm-polylith-bricks"]
build-backend = "pdm.backend"
The main usage of the build hook is to identify the included Polylith bricks from the pyproject.toml,
and hand them over to the PDM build process. Bricks are added to a project with relative paths,
from the bases and components folders in a Polylith Workspace.
The hook will copy the bricks into the temporary .pdm-build folder that is created by the pdm build command.
This will make the built wheel and sdist include proper paths to the source code.
Polylith Bricks are defined in the tool.polylith.bricks section of the pyproject.toml:
[tool.polylith.bricks]
"../../bases/my_namespace/my_base" = "my_namespace/my_base"
"../../components/my_namespace/my_component" = "my_namespace/my_component
Polylith documentation
the Python tools for the Polylith Architecture
The build hook also add support for building Python libraries by re-writing source code with a custom top namespace.
Why re-write code?
Building libraries is supported in the Python tools for the Polylith Architecture, but you will need to consider that code will share the same top namespace with any other library built from the same monorepo.
This can be a problem when more than one of your libraries are installed into the same virtual environment. Python libraries by default are installed in a "flat" folder structure, two libraries with the same top namespace will collide.
A Solution: add a custom top namespace during packaging of the library with PDM and this build hook.
How is this done?
The code in this repo uses AST (Abstract Syntax Tree) parsing to modify source code.
The Python built-in ast module is used to parse and un-parse Python code.
What's the output from this plugin?
Without any custom namespace in the configuration: no changes in the code. Building and packaging as-is.
With a Top Namespace configuration
[tool.polylith.build]
top-namespace = "my_custom_namespace"
my_custom_namespace/
my_namespace/
/my_package
__init__.py
my_module.py
Before:
from my_namespace.my_package import my_function
After:
from my_custom_namespace.my_namespace.my_package import my_function
Polylith Documentation
Metadata
Release files for pdm-polylith-bricks 1.3.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pdm_polylith_bricks-1.3.10.tar.gz | 9.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pdm_polylith_bricks-1.3.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.7 kB
Release files / pdm_polylith_bricks-1.3.10.tar.gz
| Download URL | pdm_polylith_bricks-1.3.10.tar.gz |
|---|---|
| Size | 9.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
20304ff43388bb16a9195a20b87540e4398ad0db36f195b59228451237b25864
|
|
BLAKE2b-256 checksum How to use checksums |
21db3c21e703097615cc0de0c54523d02eb720b549ac4ed8694ac4346d4acf27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.1
|
Release files / pdm_polylith_bricks-1.3.10-py3-none-any.whl
| Download URL | pdm_polylith_bricks-1.3.10-py3-none-any.whl |
|---|---|
| Size | 15.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ea0422a7b987f1f15e8d172e76d6ddd0180da56244c8f12d0460d4dc13572dbe
|
|
BLAKE2b-256 checksum How to use checksums |
bbfe2b309e4299d82baab997e1736951012cca758608f7fd95b8f128832ccabc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.1
|