kabinet
The python client for kabinet, the Arkitekt service that manages the installable apps of a deployment: the repositories they come from, their releases and flavours, and the deployments and pods that run them. It is the successor to the port spec.
Installation
pip install kabinet
With arkitekt, pip install "arkitekt[rekuest,kabinet]" brings it in.
Usage
Every kabinet operation is a method of the Kabinet client, in a blocking and an a-prefixed async
flavour (kabinet.get_pod(id), await kabinet.aget_pod(id)). Nothing is looked up ambiently.
In an arkitekt app
Add the service to your app and ask for kabinet: Kabinet; the client is injected by annotation.
Pods, deployments, releases, approvals, definitions and flavours travel between actions by id
(@kabinet/pod, @kabinet/deployment, @kabinet/release, @kabinet/approval,
@kabinet/definition, @kabinet/flavour), so an action can take and return them directly:
from arkitekt import App, run
from kabinet import Kabinet, kabinet_service
from kabinet.api.schema import Pod
app = App("pod-status", "0.1.0", services=[kabinet_service])
@app.action
def pod_status(pod: Pod, kabinet: Kabinet) -> str:
"""Pod Status
Fetches the current status of a pod.
"""
return kabinet.get_pod(pod.id).status.value
if __name__ == "__main__":
run(app)
From a script
from arkitekt import easy
from kabinet import kabinet_service
with easy("my-script", kabinet_service) as kabinet:
repo = kabinet.create_github_repo(
name="A new repo",
identifier="jhnnsrs/kabinet:main",
)
print(repo) # the repo with all the app images found in it
Testing
uv run pytest -m "not integration" # fast unit layer: no docker, <1s
uv run pytest # full suite: spins the dokker compose stack
The unit layer proves the wire contract through a rath AsyncMockLink
(camelCase aliases, @oneOf ordering variants, the six-kind selector union,
the PodEvent subscription shape) and the arkitekt service wiring via a
hot-plugged fakts.testing.TestingFakts. The integration-marked tests
run the same operations against the composed server image; until a
new-generation jhnnsrs/kabinet:next is pushed, point them at a locally
built image with KABINET_SERVICE_IMAGE=next-kabinet:latest uv run pytest.
See RELEASING.md for how versions are cut.
Metadata
Release files for kabinet 5.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 | |
|---|---|---|---|
| kabinet-5.2.0.tar.gz | 78.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| kabinet-5.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 158.0 kB
Release files / kabinet-5.2.0.tar.gz
| Download URL | kabinet-5.2.0.tar.gz |
|---|---|
| Size | 78.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
24913ae73886f853323a619e763a7f82ca6cbff07346554a7b6370e2b1866b3b
|
|
BLAKE2b-256 checksum How to use checksums |
06bc39571a87a866bfaa4e627ce5abd90cbed64bb3a0a35bcc9cf7a0bc241eb7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / kabinet-5.2.0-py3-none-any.whl
| Download URL | kabinet-5.2.0-py3-none-any.whl |
|---|---|
| Size | 79.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
587b484b580c15c331158783b70000420efb5190aef40a53f0d183d76de5d4d9
|
|
BLAKE2b-256 checksum How to use checksums |
e77b95d7de0c3d7d0378a48820b4ae73d38aa6059798ec34c191d8807c58f05b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|