groundskeeping
groundskeeping is a reusable Textual shell for operator tools that inspect, configure, and care for a working environment. It provides page and workbench contracts, safe actions and in-process jobs, setup wizards, oa-configurator inspection and write-flow mechanics, and normalized telemetry primitives.
Consuming applications own their production pages, domain services, safety policy, persistence, and environment-specific help. Groundskeeping owns the consistent interaction around them.
Start here
| You want to… | Read… |
|---|---|
| Use an application built with Groundskeeping | Using a Groundskeeping app |
| Integrate Groundskeeping into an application | Developer quickstart |
| Add configuration inspection or a write flow | Configuration guide |
| Understand package boundaries | What belongs where |
| Browse public contracts | API reference |
Install
Groundskeeping requires Python 3.12 or newer.
uv add groundskeeping
Run the self-contained demo:
uv run groundskeeping
The self-contained Setup page demonstrates a database-style results table with highlighted-row detail, while Configuration uses a deterministic fake provider so you can try branching, review, and apply behavior without writing a file.
Minimal composition
A Groundskeeping application starts with an OperatorAppSpec. The application wires its own services into its own page factories, then gives the resulting pages to the shell.
from groundskeeping.app import OperatorApp, OperatorAppSpec
from groundskeeping.contracts import PageRegistration, PageRoute
setup_route = PageRoute(
key="setup",
label="Setup",
purpose="Check whether this environment is ready.",
)
spec = OperatorAppSpec(
app_id="my-tool",
title="My Tool",
subtitle="environment setup",
pages=(
PageRegistration(
route=setup_route,
factory=lambda context: SetupPage(setup_service),
),
),
)
OperatorApp(spec).run()
SetupPage and setup_service stay in the consuming application. Groundskeeping supplies the frame around them.
Development
uv sync --all-extras --dev
uv run pytest -q
uv run ruff check .
uv run ty check src/
The full documentation is at AustralianCancerDataNetwork.github.io/groundskeeping.
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 groundskeeping-0.6.1.tar.gz.
File metadata
- Download URL: groundskeeping-0.6.1.tar.gz
- Upload date:
- Size: 199.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0498e93345d4a84d89e96e32561ff7adfd9db27a83dcf9c8bfa7c1e0edb2e60b
|
|
| MD5 |
7b33b8c554e7d615bf78faa6e1d3ab58
|
|
| BLAKE2b-256 |
6d912528bee93f469f52d23a98661430e4bca9e6a71c06de3ec38dd3a88343ad
|
Provenance
The following attestation bundles were made for groundskeeping-0.6.1.tar.gz:
Publisher:
publish.yml on AustralianCancerDataNetwork/groundskeeping
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
groundskeeping-0.6.1.tar.gz -
Subject digest:
0498e93345d4a84d89e96e32561ff7adfd9db27a83dcf9c8bfa7c1e0edb2e60b - Sigstore transparency entry: 2543664519
- Sigstore integration time:
-
Permalink:
AustralianCancerDataNetwork/groundskeeping@654aab8d12dddf5db5b932f07dc6cd92c7f8bacd -
Branch / Tag:
refs/tags/v0.6.1 - Owner: https://github.com/AustralianCancerDataNetwork
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@654aab8d12dddf5db5b932f07dc6cd92c7f8bacd -
Trigger Event:
push
-
Statement type:
File details
Details for the file groundskeeping-0.6.1-py3-none-any.whl.
File metadata
- Download URL: groundskeeping-0.6.1-py3-none-any.whl
- Upload date:
- Size: 69.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d874f2abfdd04f5c27904c6d627d6fd9cbc5ff0cc997e509fb218a4531aade7
|
|
| MD5 |
cfab232b400cd47cf430f7c2321e1acc
|
|
| BLAKE2b-256 |
60477a455b1c31d829cdb965f8a502d39db4f96f240f2fc008003d5afd855ae1
|
Provenance
The following attestation bundles were made for groundskeeping-0.6.1-py3-none-any.whl:
Publisher:
publish.yml on AustralianCancerDataNetwork/groundskeeping
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
groundskeeping-0.6.1-py3-none-any.whl -
Subject digest:
8d874f2abfdd04f5c27904c6d627d6fd9cbc5ff0cc997e509fb218a4531aade7 - Sigstore transparency entry: 2543664582
- Sigstore integration time:
-
Permalink:
AustralianCancerDataNetwork/groundskeeping@654aab8d12dddf5db5b932f07dc6cd92c7f8bacd -
Branch / Tag:
refs/tags/v0.6.1 - Owner: https://github.com/AustralianCancerDataNetwork
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@654aab8d12dddf5db5b932f07dc6cd92c7f8bacd -
Trigger Event:
push
-
Statement type: