This project has been archived by its maintainers, and is no longer receiving any updates.
craftainer-tool-crud
A generic CRUD framework for FastAPI: router factories (JSON, XML, and a small web form/component set), a CRUD interface, storage-agnostic repositories (SQLAlchemy async and in-memory), and the model and view bases they build on. A host application keeps its own models, views and settings and builds each resource on top of the generic pieces here; this package imports nothing from the host.
It is an instance of
template-python-package
(so it gets the devcontainer, CI, release workflow and template sync from
there); see docs/TEMPLATE.md for the conventions shared
by every instance. The package's own layout and rules are in
src/craftainer_tool_crud/README.md.
Install
pip install craftainer-tool-crud # core
pip install "craftainer-tool-crud[mqtt]" # + MQTT event sink/source (aiomqtt)
pip install "craftainer-tool-crud[xml]" # + XML request bodies (defusedxml)
The core needs Python 3.14 or newer. Both extras are imported lazily, only
where they are used (MQTTEventSink/MQTTEventSource, and the XML codec and
XML router's body parsing), so the core imports without them and a missing
extra surfaces as an ImportError at first use. Bring your own database
driver (for example asyncpg) for SQLAlchemyRepository.
Public API overview
craftainer_tool_crud.config:CrudConfig,MQTTConfig,configure(config, session_factory). Callconfigureonce at startup, before the first request.craftainer_tool_crud.models: the declarativeBase/IdentifiedBase, the record-lifecycle mixins (Archivable,Draftable,Schedulable,Lockable) and the sharedRevisionmodel.craftainer_tool_crud.views: the Pydantic view base (ORMView), bulk, revision and stats response shapes.craftainer_tool_crud.repositories: theRepositoryprotocol,SQLAlchemyRepository,InMemoryRepositoryand the filter/sort clauses.craftainer_tool_crud.interfaces:CRUDInterface,OwnerScope, revision and event sinks,build_repository_providerand friends.craftainer_tool_crud.controllers:build_json_router,build_xml_router,build_web_routerandbuild_resource_router.
Model changes need an app-side migration
The package ships SQLAlchemy models (Revision, the lifecycle mixins) but no
migrations: the host's Alembic setup targets models.base.Base.metadata. A
release that changes those models therefore needs a new migration in the host
application, and the release notes say so. Migrations stay immutable once
applied (NFR-0019 in the host repository).
Versioning
SemVer, starting at 0.1.0. While the major version is
0, a minor release may break the public API; pin craftainer-tool-crud>=0.x,<0.(x+1)
until 1.0.0. The version lives only in the git tag release.yml computes;
pyproject.toml stays at 0.0.0 and make build stamps RELEASE_VERSION
into the build. Releases go to TestPyPI first, then PyPI, through trusted
publishing (PYPI_PUBLISH repository variable: testpypi or pypi; unset
publishes nothing).
Development
Open the repository in the devcontainer (it starts a Postgres for the
integration tests), then run prek run --all-files --hook-stage manual. The
pytest hook covers tests/unit and tests/integration under one 100%
coverage gate; see tests/README.md.
License
Licensed under the GNU General Public License v3.0.
Metadata
Release files for craftainer-tool-crud 0.1.2
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 | |
|---|---|---|---|---|
| craftainer_tool_crud-0.1.2.tar.gz | 281.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| craftainer_tool_crud-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 394.4 kB
Release files / craftainer_tool_crud-0.1.2.tar.gz
| Download URL | craftainer_tool_crud-0.1.2.tar.gz |
|---|---|
| Size | 281.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b21951867e35f52b93ae256812b3ea94ae72757c91b8374e2fbf5c4d7baad458
|
|
BLAKE2b-256 checksum How to use checksums |
d22b854ae016ac0ac3478f997889dc6a1cc189cd5a85bfbcb96d4c91e361f20d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / craftainer_tool_crud-0.1.2-py3-none-any.whl
| Download URL | craftainer_tool_crud-0.1.2-py3-none-any.whl |
|---|---|
| Size | 112.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
27b7ed182202295f5624197ac9de32affd919769a36cc52a934cea748ede8728
|
|
BLAKE2b-256 checksum How to use checksums |
f27bc64aa1abd4b3a6d94ec0f4ec9d9d751dd7371126b19b89f61fc09ef19b02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for craftainer-tool-crud 0.1.2
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.