databaas-utils
Lakekeeper/Iceberg lakehouse access for Databaas: catalog, remote-signed object storage, and both an Airflow integration and a local, interactive login for analysts.
Local (analyst) quickstart
pip install "databaas-utils[local]"
databaas login https://<your-environment>.databaas.eu
databaas login discovers the environment's Zitadel/Lakekeeper settings from the portal,
opens a browser to sign in with your own identity, and caches the session (in your OS
keychain) so future Python processes don't prompt again. If no browser is reachable (e.g.
over SSH), pass --device to use the OAuth2 device-code flow instead.
from databaas_utils import LakehouseSettings, rest_catalog
settings = LakehouseSettings.from_profile() # picks up the login from `databaas login`
catalog = rest_catalog(settings)
catalog.list_namespaces()
resolve()/GenericTableStore/open_zarr_group() work the same way once you have
settings — see their docstrings. An admin still has to grant your Lakekeeper user
(databaas whoami shows its id, oidc~<sub>) access to a warehouse before any of this
returns data.
Useful commands:
| Command | What it does |
|---|---|
databaas login [PORTAL_URL] |
Log in and save a profile |
databaas whoami |
Show the signed-in identity and Lakekeeper user id |
databaas token |
Print a fresh access token (e.g. for curl, DuckDB) |
databaas logout |
Revoke and forget the cached login |
databaas profile list / databaas profile use NAME |
Manage saved profiles |
Several environments can be configured at once as named profiles in
~/.config/databaas/config.toml; select one with --profile NAME or DATABAAS_PROFILE.
Admin runbook: registering the local-login app in Zitadel
Local login needs one Zitadel Native app per environment, created by hand today —
databaas-core/packages/bootstrap does not yet support the app type or grant this needs
(see "Follow-up" below). In the Zitadel console, under the Databaas project:
- New application → type Native, authentication method None (PKCE proves possession instead of a secret).
- Grant types: Authorization Code, Refresh Token, and Device Code.
- Redirect URIs:
http://127.0.0.1/callbackandhttp://localhost/callback— the CLI binds an OS-assigned loopback port and matches on path only, so a single registered host is enough (confirm this against the deployed Zitadel version; if it requires an exact port, pin one with the profile'sredirect_portand register that port explicitly instead). - Token settings: Auth Token Type JWT (Lakekeeper validates access tokens against Zitadel's JWKS; an opaque token is rejected).
- Note the app's Client ID and the project's Project ID — a user provides these
(or the portal's discovery document supplies them) when running
databaas login.
Portal discovery document
databaas login <portal-url> expects the portal to serve, unauthenticated:
GET /.well-known/databaas-client.json
{
"issuer": "https://auth.<env>.databaas.eu",
"client_id": "<native app client id>",
"project_id": "<zitadel project id>",
"catalog_url": "https://catalog.<env>.databaas.eu",
"warehouse": "databaas-lakehouse",
"region": "nl-ams"
}
Until the portal ships this, pass the equivalent --issuer/--client-id/--project-id/
--catalog-url/--warehouse flags to databaas login instead.
Follow-up: bootstrap support
databaas-core/packages/bootstrap's schema (bootstrap-config.schema.json) and Zitadel
client currently only support appType ∈ {WEB, USER_AGENT} and
grantTypes ∈ {AUTHORIZATION_CODE, REFRESH_TOKEN}. Extending both to NATIVE and
DEVICE_CODE would let a "Databaas CLI" app be declared in bootstrap.example.yaml like
the other apps and remove the manual step above. Out of scope for this package.
Metadata
Release files for databaas-utils 0.3.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 | |
|---|---|---|---|
| databaas_utils-0.3.0.tar.gz | 44.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| databaas_utils-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 100.5 kB
Release files / databaas_utils-0.3.0.tar.gz
| Download URL | databaas_utils-0.3.0.tar.gz |
|---|---|
| Size | 44.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2a8f2351c41928894b2954feb5631fe860ca345bb09ba28756b097ec3f93a15d
|
|
BLAKE2b-256 checksum How to use checksums |
be4f88d730ab4712d1893a242a32a8ccd2b24d15eaae76e8e21343942e40df6e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.
Transparency logRelease files / databaas_utils-0.3.0-py3-none-any.whl
| Download URL | databaas_utils-0.3.0-py3-none-any.whl |
|---|---|
| Size | 55.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ecaadbc4c4ffb046f0efc70c61d51541ccbf7dd8c33cadf983f794bf747415f4
|
|
BLAKE2b-256 checksum How to use checksums |
55fe88b85f29be6a38287042a1739e4c0cb13c8e453de81d70f0d91919717b0a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.
Transparency log