CELINE Utils
A collection of shared utilities, libraries, and command-line tools that form the technical backbone of the CELINE data platform. Provides reusable building blocks for data pipelines, governance, lineage, metadata management, and platform integrations.
Not an end-user application — a platform utility layer embedded into CELINE applications and executed within orchestrated environments using Meltano, dbt, Prefect, and OpenLineage.
Scope and goals
- Centralise cross-cutting platform logic used by multiple CELINE projects
- Provide opinionated but extensible tooling for data pipelines
- Enforce consistent governance and lineage semantics
- Reduce duplication across pipeline applications
- Act as a stable foundation for CELINE-compatible services and workflows
Key capabilities
Governance framework
A declarative governance.yaml specification defines the metadata, access control, and dataspace exposure rules for each dataset.
The GovernanceRule model covers:
- Dataset ownership (
ownership,attribution), resolved through an owner registry - License and access level (
open,internal,restricted—secretis accepted for compatibility and normalised torestricted) - Data classification (
pii,green,yellow,red) and retention - Tags, documentation links, and source system
row_filters— list of filter specs ([{handler, args}]) for per-subject consent-based row filtering- Two exposure gates, ANDed:
exposecontrols whether the dataset is listed in the DCAT catalogue and served by the API, whiledataspace.exposecontrols whether it is offered into the dataspace as an EDC asset.exposeis tri-state — unset falls back todataspace.exposeso pre-split files keep their behaviour
Extended blocks for DCAT-AP 3.0 and dataspace integration:
dcat: block — propagated to the DCAT-AP catalogue by dataset-api:
publisher_uri— overrides the API-level fallback publisherthemes— EU Publications Office data-theme URIslanguage_uris— dct:language URIsspatial_uris— dct:spatial URIsaccrual_periodicity— dct:accrualPeriodicity URIconforms_to— dct:conformsTo URItemporal.start/temporal.end— dct:temporal coverage
dataspace: block — consumed when registering datasets in EDC:
expose— offer the dataset into the dataspacecontract_required— enablesds:contractRequiredODRL constraintconsent_required— enablesds:consentStatusODRL constraint and consent-based row filteringodrl_action— default ODRL action (defaultuse)purpose— ODRL purpose valuesmedallion— data quality level (gold / silver / bronze)
ontology: block — which mapping spec says what the columns mean: spec (a shared mapping published in celine-ontologies) or spec_file (a path relative to the governance file). Exactly one, enforced by the schema.
Governance rules are resolved with pattern matching via GovernanceResolver: exact key first, then the longest matching glob, then defaults alone. The chosen rule is overlaid on the defaults using the fields the file explicitly set — not truthiness — so expose: false withdraws a dataset instead of being silently dropped. tags and dataspace.purpose union, consent_required and contract_required OR, ownership / row_filters / ontology replace wholesale. See the format reference for the full table.
celine.governance is the single parser: dataset-api, ds and celine-superset import it rather than reimplementing it. EDC-specific sub-objects in the dataspace: block belong to ds and are ignored here via model_config = ConfigDict(extra="ignore") rather than rejected.
Pipeline orchestration
Structured execution layer for:
- Meltano ingestion pipelines
- dbt transformations, tests, and seeds (
dbt_seedwrapper) - Prefect-based Python flows (Prefect 3.x)
The PipelineRunner coordinates execution, logging, error handling, and lineage emission consistently across tools. Pipeline run environment variables can be injected via pipeline_run_envs for local runtime configuration.
See the pipeline tutorial.
OpenLineage integration
- Automatic emission of START, COMPLETE, FAIL, and ABORT events
- Dataset-level schema facets
- Data quality assertions from dbt tests
- Custom CELINE governance facets (including
row_filters,medallion,classification)
Dataset tooling
The DatasetClient enables:
- Schema and table introspection
- Column metadata inspection
- Safe query construction
- Export to Pandas
Platform integrations
- MQTT pipeline run events, published through
celine-sdk - Keycloak client-credentials tokens, for authenticating to a protected Marquez
Keycloak and Superset administration was removed in 2.3.0 along with the
celine-utils admin command tree — it was a replicable-setup tool with no remaining
callers. Provisioning lives in celine-policies.
CLI
celine-utils governance generate marquez --app <app> # scaffold governance.yaml from Marquez
celine-utils pipeline init app <name> # scaffold a new pipeline app
celine-utils pipeline run (meltano | dbt | prefect) # run a pipeline stage
Full reference: CLI.
Repository structure
src/celine/
governance/ the thin core — three dependencies, imported by other repositories
utils/
cli/
common/
datasets/
pipelines/
schema/ JSON Schemas — published, and symlinked into the package
docs/
tests/
integration-tests/
Configuration
Environment-driven via pydantic-settings:
- Environment variables first
- Optional
.envfiles - Typed validation with container-friendly defaults
Documentation
Two tracks — see the documentation index.
Governance as a library
- The governance library —
celine.governanceAPI, the three-dependency contract, merging, validation governance.yamlformat — the grammar, resolution, the two exposure gatesowners.yamlregistry — owner aliases to canonical identities- Schemas — the three published JSON Schemas
Building and running pipelines
- Pipeline Tutorial — end-to-end pipeline setup guide
- CLI — full CLI reference
- Environment — every variable and its default
Why choices were made — Decisions.
Installation
uv add celine-utils # governance only — three dependencies
uv add "celine-utils[pipelines]" # dbt / Meltano / Prefect / lineage
uv add "celine-utils[all]" # pipelines + the typed OpenLineage facet
Parsing governance.yaml needs no extras. That is deliberate and enforced by CI —
see ADR-0001.
Intended audience
- Data engineers
- Platform engineers
- CELINE application developers
License
Copyright © 2025 Spindox Labs
Licensed under the Apache License, Version 2.0.
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 celine_utils-2.5.0.tar.gz.
File metadata
- Download URL: celine_utils-2.5.0.tar.gz
- Upload date:
- Size: 112.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf3ca4741d4fe73d946e40b23ab2a2236e84e95928fe598aa63d550339cb5577
|
|
| MD5 |
5ba89e9d8e33166278d1b7c27a72d0a3
|
|
| BLAKE2b-256 |
f0f930fdc625cbba5ce8bd34de4500f0b25f12ff25e0ce09f8095765c4e4da8e
|
Provenance
The following attestation bundles were made for celine_utils-2.5.0.tar.gz:
Publisher:
release.yaml on celine-eu/celine-utils
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
celine_utils-2.5.0.tar.gz -
Subject digest:
cf3ca4741d4fe73d946e40b23ab2a2236e84e95928fe598aa63d550339cb5577 - Sigstore transparency entry: 2677556863
- Sigstore integration time:
-
Permalink:
celine-eu/celine-utils@dbdbd526261572fb855937e4a27f0c7f9e922e3a -
Branch / Tag:
refs/tags/v2.5.0 - Owner: https://github.com/celine-eu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@dbdbd526261572fb855937e4a27f0c7f9e922e3a -
Trigger Event:
push
-
Statement type:
File details
Details for the file celine_utils-2.5.0-py3-none-any.whl.
File metadata
- Download URL: celine_utils-2.5.0-py3-none-any.whl
- Upload date:
- Size: 101.3 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 |
0d171109a5afcfd5a075c5f96cfc1a074c87aac9e9b64b4c20542b2287e3c3d6
|
|
| MD5 |
062fd3aadd9b5c92d1baa64c2b6c276e
|
|
| BLAKE2b-256 |
bd6c6a123230183f0e81c25a0bca6cd5804466c2feb216cb1de9413407a242f4
|
Provenance
The following attestation bundles were made for celine_utils-2.5.0-py3-none-any.whl:
Publisher:
release.yaml on celine-eu/celine-utils
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
celine_utils-2.5.0-py3-none-any.whl -
Subject digest:
0d171109a5afcfd5a075c5f96cfc1a074c87aac9e9b64b4c20542b2287e3c3d6 - Sigstore transparency entry: 2677556960
- Sigstore integration time:
-
Permalink:
celine-eu/celine-utils@dbdbd526261572fb855937e4a27f0c7f9e922e3a -
Branch / Tag:
refs/tags/v2.5.0 - Owner: https://github.com/celine-eu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@dbdbd526261572fb855937e4a27f0c7f9e922e3a -
Trigger Event:
push
-
Statement type: