Skip to main content
Archived

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). Call configure once at startup, before the first request.
  • craftainer_tool_crud.models: the declarative Base/IdentifiedBase, the record-lifecycle mixins (Archivable, Draftable, Schedulable, Lockable) and the shared Revision model.
  • craftainer_tool_crud.views: the Pydantic view base (ORMView), bulk, revision and stats response shapes.
  • craftainer_tool_crud.repositories: the Repository protocol, SQLAlchemyRepository, InMemoryRepository and the filter/sort clauses.
  • craftainer_tool_crud.interfaces: CRUDInterface, OwnerScope, revision and event sinks, build_repository_provider and friends.
  • craftainer_tool_crud.controllers: build_json_router, build_xml_router, build_web_router and build_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.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for craftainer-tool-crud 0.1.1
File Size Uploaded Provenance
craftainer_tool_crud-0.1.1.tar.gz 280.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for craftainer-tool-crud 0.1.1
File Interpreter ABI Platform
craftainer_tool_crud-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 393.5 kB

Release files / craftainer_tool_crud-0.1.1.tar.gz

Download URL craftainer_tool_crud-0.1.1.tar.gz
Size 280.8 kB
Tags Source
SHA-256 checksum
How to use checksums
489b316d9e04362a9013f7bf4d748aaa6ea14b232d17fe8830d8ed4370c19db4
BLAKE2b-256 checksum
How to use checksums
aa6613c6e10db967224f2e939b9c01825c93a4dcee96302f5120ee6edf4e95fe
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.1-py3-none-any.whl

Download URL craftainer_tool_crud-0.1.1-py3-none-any.whl
Size 112.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
92f7e9d862c30d9f4f43ab327c3483e870f610fecfdae138e55a46b5f56035ac
BLAKE2b-256 checksum
How to use checksums
bb61672a4bfc50e3e165ee21af99f10baf9852c7a3682f538eb3a0bace6a36d2
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.1

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page