Zum Inhalt springen

Python-API

Catalog

python
Catalog(
    *,
    app_path=None,
    metadata_path=None,
    depth="value",
    refresh=False,
    on_scan_error="warn",
    on_metadata_error="warn",
    freq_threshold=100,
    auto_enumerations=True,
    csv_encoding=None,
    sample_size=100_000,
    preview_rows=100,
    csv_skip_copy=False,
    app_config=None,
    quiet=False,
    verbose=False,
    log_file=None,
)
AttributTypBeschreibung
app_pathstr | Path | NonePfad für den Export der eigenständigen App; enthält er bereits data/db, wird er für inkrementelle Scans wiederverwendet
metadata_pathstr | Path | list[str | Path] | NoneMetadaten-Quellordner, Datenbank-URI oder Liste von Quellen
depth"dataset" | "variable" | "stat" | "value"Standard-Scan-Tiefe (Standard: "value")
refreshboolVollständigen Rescan erzwingen, Cache ignorieren (Standard: False)
on_scan_error"warn" | "fail"Das Scannen ist immer Continue-on-Error (eine fehlgeschlagene Datei/Tabelle wird protokolliert und übersprungen). "warn" (Standard) beendet mit Exit-Code 0; "fail" lässt die CLI mit Exit-Code 2 enden, wenn ein Datensatz fehlgeschlagen ist, damit CI keinen unvollständigen Katalog grün veröffentlicht
on_metadata_error"warn" | "fail"Das Laden von Metadaten ist ebenfalls Continue-on-Error (eine ungültige Tabelle wird protokolliert und übersprungen, gültige Tabellen werden weiterhin angewendet). "warn" (Standard) beendet mit Exit-Code 0; "fail" lässt die CLI mit Exit-Code 3 enden, wenn eine Metadaten-Tabelle die Validierung nicht bestanden hat, damit CI keinen Katalog ohne seine Kuratierung grün veröffentlicht
freq_thresholdintMaximale Anzahl unterschiedlicher Werte für Häufigkeits- und automatische Enumerationserkennung. Strings über diesem Schwellenwert erhalten stattdessen Muster-Häufigkeiten
auto_enumerationsboolAutomatische Enumerationen aus Wert-Häufigkeiten erzeugen und an Variablen anhängen (Standard: True)
csv_encodingstr | NoneStandard-CSV-Kodierung (utf-8, cp1252 usw.)
sample_sizeint | NoneStandard-Stichprobengröße für Häufigkeits- und automatische Enumerationserkennung (Standard: 100_000)
preview_rowsint | Literal[False]Standard-Maximum an Zeilen, die in Datensatz-Vorschauen bei den Tiefen stat/value exportiert werden (Standard: 100; 0 oder false deaktiviert)
csv_skip_copyboolTemporäre UTF-8-Kopie für lokale CSV überspringen (Standard: False)
app_configdict[str, str] | NoneSchlüssel-Wert-Konfiguration für die Web-App
quietboolFortschritts-Logging unterdrücken (Standard: False)
verboseboolVollständige Tracebacks bei Fehlern anzeigen (Standard: False)
log_filestr | Path | NoneVollständiges Scan-Log in Datei schreiben (bei jedem Lauf geleert)
folderTable[Folder]Ordner-Tabelle (.all(), .count, .get_by(...))
datasetTable[Dataset]Datensatz-Tabelle
variableTable[Variable]Variablen-Tabelle
enumerationTable[Enumeration]Enumerations-Tabelle
valueTable[Value]Tabelle der Enumerationswerte
frequencyTable[Frequency]Häufigkeitstabelle (berechnet)
organizationTable[Organization]Organisations-Tabelle
tagTable[Tag]Tag-Tabelle
docTable[Doc]Dokument-Tabelle
conceptTable[Concept]Tabelle der Fachglossar-Konzepte
configTable[Config]Schlüssel-Wert-Tabelle der Web-App-Konfiguration

Catalog.add_folder()

python
catalog.add_folder(
    path,
    metadata=None,
    *,
    depth=None,
    include=None,
    exclude=None,
    recursive=True,
    csv_encoding=None,
    sample_size=None,
    auto_enumerations=None,
    preview_rows=None,
    csv_skip_copy=None,
    storage_options=None,
    refresh=None,
    quiet=None,
    time_series=True,
    create_folders=True,
    on_unmatched="warn",
)
ParameterTypStandardBeschreibung
pathstr | Path | list[str | Path]erforderlichZu scannendes Verzeichnis oder Liste von Verzeichnissen
metadataEntityMetadata | NoneNoneIdentität, Elternverknüpfung und Metadaten für den Wurzelordner
depth"dataset" | "variable" | "stat" | "value" | NoneNoneScan-Tiefe (verwendet catalog.depth bei None)
includelist[str] | NoneNoneEinzuschließende Glob-Muster
excludelist[str] | NoneNoneAuszuschließende Glob-Muster
recursiveboolTrueUnterverzeichnisse scannen
csv_encodingstr | NoneNoneCSV-Kodierung überschreiben
sample_sizeint | NoneNoneStichprobenzeilen für Häufigkeits- und automatische Enumerationserkennung (überschreibt Katalog)
auto_enumerationsbool | NoneNoneAutomatische Enumerationen aus Wert-Häufigkeiten für diesen Ordner erzeugen (überschreibt Katalog)
preview_rowsint | Literal[False] | NoneNoneMaximale Vorschauzeilen für in diesem Ordner gefundene Datensätze (überschreibt Katalog; 0 oder false deaktiviert)
csv_skip_copybool | NoneNoneTemporäre UTF-8-Kopie überspringen (überschreibt Katalog)
storage_optionsdict | NoneNoneOptionen für Remote-Speicher (an fsspec weitergereicht)
refreshbool | NoneNoneRescan erzwingen (überschreibt Katalog-Einstellung)
quietbool | NoneNonequiet-Einstellung des Katalogs überschreiben
time_seriesboolTrueDateien mit zeitlichen Mustern gruppieren
create_foldersboolTrueBei False keine Ordner vom Datenträger erzeugen; Struktur kommt aus metadata_path (Metadata-first)
on_unmatched"skip" | "warn" | "error""warn"Verhalten, wenn eine gescannte Datei keinen Metadaten-Treffer hat (nur bei create_folders=False)

Catalog.add_dataset()

python
catalog.add_dataset(
    path,
    *,
    metadata=None,
    depth=None,
    csv_encoding=None,
    sample_size=None,
    auto_enumerations=None,
    preview_rows=None,
    csv_skip_copy=None,
    storage_options=None,
    refresh=None,
    quiet=None,
)
ParameterTypStandardBeschreibung
pathstr | Path | list[str | Path]erforderlichDatei(en) oder partitioniertes Verzeichnis (lokal/remote)
metadataEntityMetadata | NoneNoneDatensatz-Identität, Elternverknüpfung und Metadaten
depth"dataset" | "variable" | "stat" | "value" | NoneNoneScan-Tiefe (verwendet catalog.depth bei None)
csv_encodingstr | NoneNoneCSV-Kodierung überschreiben
sample_sizeint | NoneNoneStichprobenzeilen für Häufigkeits- und automatische Enumerationserkennung (überschreibt Katalog)
auto_enumerationsbool | NoneNoneAutomatische Enumerationen aus Wert-Häufigkeiten für diesen Datensatz erzeugen (überschreibt Katalog)
preview_rowsint | Literal[False] | NoneNoneMaximale Vorschauzeilen für diesen Datensatz (überschreibt Katalog; 0 oder false deaktiviert)
csv_skip_copybool | NoneNoneTemporäre UTF-8-Kopie überspringen (überschreibt Katalog)
storage_optionsdict | NoneNoneOptionen für Remote-Speicher (an fsspec weitergereicht)
refreshbool | NoneNoneRescan erzwingen (überschreibt Katalog-Einstellung)
quietbool | NoneNonequiet-Einstellung des Katalogs überschreiben

Catalog.add_database()

python
catalog.add_database(
    connection,
    metadata=None,
    *,
    depth=None,
    schema=None,
    include=None,
    exclude=None,
    sample_size=None,
    auto_enumerations=None,
    preview_rows=None,
    group_by_prefix=True,
    prefix_min_tables=2,
    time_series=True,
    storage_options=None,
    refresh=None,
    quiet=None,
    oracle_client_path=None,
    ssh_tunnel=None,
)
ParameterTypStandardBeschreibung
connectionstr | ibis.BaseBackenderforderlichVerbindungszeichenfolge oder ibis-Backend-Objekt
metadataEntityMetadata | NoneNoneIdentität, Elternverknüpfung und Metadaten für den Wurzelordner
depth"dataset" | "variable" | "stat" | "value" | NoneNoneScan-Tiefe (verwendet catalog.depth bei None)
schemastr | list[str] | NoneNoneZu scannende(s) Schema(ta)
includelist[str] | NoneNoneGegen Tabellennamen abgeglichene Glob-Muster zum Einschließen
excludelist[str] | NoneNoneGegen Tabellennamen abgeglichene Glob-Muster zum Ausschließen
sample_sizeint | NoneNoneStichprobenzeilen für Häufigkeits- und automatische Enumerationserkennung (überschreibt Katalog)
auto_enumerationsbool | NoneNoneAutomatische Enumerationen aus Wert-Häufigkeiten für gescannte Tabellen erzeugen (überschreibt Katalog)
preview_rowsint | Literal[False] | NoneNoneMaximale Vorschauzeilen für gescannte Tabellen-Datensätze (überschreibt Katalog; 0 oder false deaktiviert)
group_by_prefixbool | strTrueTabellen nach Präfix in Unterordner gruppieren
prefix_min_tablesint2Mindestanzahl Tabellen für eine Präfix-Gruppe
time_seriesboolTrueZeitliche Tabellenmuster erkennen
storage_optionsdict | NoneNoneOptionen für entferntes SQLite/GeoPackage
refreshbool | NoneNoneRescan erzwingen (überschreibt Katalog-Einstellung)
quietbool | NoneNonequiet-Einstellung des Katalogs überschreiben
oracle_client_pathstr | NoneNonePfad zu den Oracle-Instant-Client-Bibliotheken
ssh_tunneldict | NoneNoneSSH-Tunnel-Konfiguration (host, user, port usw.)

Catalog.add_geodatabase()

python
catalog.add_geodatabase(
    path,
    metadata=None,
    *,
    depth=None,
    include=None,
    exclude=None,
    auto_enumerations=None,
    preview_rows=None,
    quiet=None,
    refresh=None,
    storage_options=None,
)
ParameterTypStandardBeschreibung
pathstr | PatherforderlichPfad oder Remote-URL des .gdb-Verzeichnisses
metadataEntityMetadata | NoneNoneIdentität, Elternverknüpfung und Metadaten für den Container-Ordner
depth"dataset" | "variable" | "stat" | "value" | NoneNoneScan-Tiefe (verwendet catalog.depth bei None)
includelist[str] | NoneNoneGegen Layer-Namen abgeglichene Glob-Muster zum Einschließen
excludelist[str] | NoneNoneGegen Layer-Namen abgeglichene Glob-Muster zum Ausschließen
auto_enumerationsbool | NoneNoneAutomatische Enumerationen aus Wert-Häufigkeiten für gescannte Layer erzeugen (überschreibt Katalog)
preview_rowsint | Literal[False] | NoneNoneMaximale Vorschauzeilen für gescannte Layer-Datensätze (überschreibt Katalog; 0 oder false deaktiviert)
quietbool | NoneNonequiet-Einstellung des Katalogs überschreiben
refreshbool | NoneNoneRescan erzwingen (überschreibt Katalog-Einstellung)
storage_optionsdict | NoneNoneOptionen für Remote-Speicher (an fsspec weitergereicht)

Catalog.export_db()

python
catalog.export_db(
    output_dir=None,
    *,
    track_evolution=True,
    copy_assets=None,
    base_dir=None,
    export_size_report=False,
    quiet=None,
)
ParameterTypStandardBeschreibung
output_dirstr | Path | NoneNoneAusgabeverzeichnis (verwendet app_path bei None)
track_evolutionboolTrueÄnderungen zwischen Exporten verfolgen
copy_assetsdict | list[dict] | NoneNoneZusätzliche lokale Dateien/Verzeichnisse mit denselben Regeln wie copy_assets() in den Export kopieren
base_dirstr | Path | NoneNoneBasisverzeichnis für relative copy_assets.from-Pfade (Standard: aktuelles Arbeitsverzeichnis)
export_size_reportboolFalseExport-Größenbericht pro Tabelle ausgeben, einschließlich geschätzter gzip-komprimierter .json-Größen
quietbool | NoneNonequiet-Einstellung des Katalogs überschreiben

Exportiert JSON-Metadatendateien. Ruft finalize() automatisch auf, wenn Daten gescannt wurden.

Catalog.export_app()

python
catalog.export_app(
    output_dir=None,
    *,
    open_browser=False,
    track_evolution=True,
    update_app=False,
    copy_assets=None,
    base_dir=None,
    export_size_report=False,
    quiet=None,
)
ParameterTypStandardBeschreibung
output_dirstr | Path | NoneNoneAusgabeverzeichnis (verwendet app_path bei None)
open_browserboolFalseApp nach dem Export im Browser öffnen
track_evolutionboolTrueÄnderungen zwischen Exporten verfolgen
update_appboolFalseGebündelte Frontend-App-Dateien aktualisieren, wenn die App bereits existiert
copy_assetsdict | list[dict] | NoneNoneZusätzliche lokale Dateien/Verzeichnisse mit denselben Regeln wie copy_assets() in die exportierte App kopieren
base_dirstr | Path | NoneNoneBasisverzeichnis für relative copy_assets.from-Pfade (Standard: aktuelles Arbeitsverzeichnis)
export_size_reportboolFalseExport-Größenbericht pro Tabelle für data/db ausgeben, einschließlich geschätzter gzip-komprimierter .json-Größen
quietbool | NoneNonequiet-Einstellung des Katalogs überschreiben

Exportiert eine vollständige eigenständige datannur-App mit Daten. Verwendet standardmäßig app_path, sofern bei der Initialisierung gesetzt. Bestehende Apps aktualisieren standardmäßig data/db; mit update_app=True werden die gebündelten Frontend-Dateien aktualisiert.

Catalog.finalize()

python
catalog.finalize()

Fortgeschrittene Lifecycle-Methode. Entfernt Entitäten, die beim Scan nicht mehr gesehen wurden.

Im Normalfall ist ein direkter Aufruf nicht nötig: export_db() und export_app() rufen sie nach dem Scannen automatisch auf.

run_config()

python
from datannurpy import run_config

catalog = run_config(path)
ParameterTypStandardBeschreibung
pathstr | PatherforderlichZu ladende und auszuführende YAML-Konfigurationsdatei

Führt einen catalog.yml-Workflow aus und gibt den resultierenden Catalog zurück.

Von run_config() erkannte YAML-Schlüssel auf oberster Ebene:

SchlüsselTypBeschreibung
addlist[dict]Auszuführende Scan-Schritte mit Kurzform-Einträgen wie folder, dataset oder database
envdict[str, str]Umgebungsvariablen, die vor der Expansion der YAML-Werte injiziert werden
env_filestr | Path | list[str | Path]Eine oder mehrere dotenv-Dateien, die vor der Expansion geladen werden
output_dirstr | Path | NoneNur JSON-Metadaten in dieses Verzeichnis exportieren, statt eine vollständige App zu exportieren
open_browserboolDie erzeugte App nach dem App-Export im Browser öffnen
copy_assetsdict | list[dict] | NoneZusätzliche lokale Dateien oder Verzeichnisse in den Export kopieren
track_evolutionboolErzeugung von evolution.json beim Export aktivieren oder deaktivieren
export_size_reportboolExport-Größenbericht pro Tabelle nach dem Schreiben der Datenbank aktivieren
update_appboolGebündelte Frontend-App-Dateien beim Export in einen bestehenden app_path aktualisieren
post_exportstr | list[str] | NonePython-Skripte nach Abschluss des Exports ausführen

Alle anderen nicht reservierten Schlüssel auf oberster Ebene werden mit denselben Parameternamen an Catalog(...) durchgereicht, etwa app_path, metadata_path, depth, refresh, sample_size, auto_enumerations, preview_rows, app_config, quiet, verbose und log_file.

Um diese API-Seite kompakt zu halten, ist das detaillierte YAML-Verhalten in den thematischen Anleitungen dokumentiert:

  • Export-Optionen wie output_dir, open_browser, track_evolution, update_app, copy_assets und post_export: siehe Ausgabe & Exporte
  • Metadaten- und Konfigurationsoptionen wie metadata_path, env, env_file und app_config: siehe Metadaten & Konfiguration

Pfadbasierte Werte werden relativ zum Verzeichnis der YAML-Datei aufgelöst, sofern in diesen Anleitungen nichts anderes dokumentiert ist.

copy_assets()

python
from datannurpy import copy_assets

copy_assets(output_dir, rules, *, base_dir=None, quiet=False)
ParameterTypStandardBeschreibung
output_dirstr | PatherforderlichZu befüllendes Exportverzeichnis
rulesdict | list[dict]erforderlichKopierregeln in derselben Form wie das YAML-copy_assets
base_dirstr | Path | NoneNoneBasisverzeichnis für relative from-Pfade (Standard: aktuelles Arbeitsverzeichnis)
quietboolFalseKopier-Fortschritts-Logging unterdrücken

Jede Regel akzeptiert from, to, optional include und optional clean.

Catalog.export_db() und Catalog.export_app() akzeptieren copy_assets= und base_dir= ebenfalls als komfortable Wrapper um diesen Helfer.

EntityMetadata

python
EntityMetadata(
    id=None,
    parent_id=None,
    manager_organization_id=None,
    owner_organization_id=None,
    tag_ids=None,
    doc_ids=None,
    name=None,
    description=None,
    license=None,
    type=None,
    link=None,
    localisation=None,
    start_date=None,
    end_date=None,
    updating_each=None,
    no_more_update=None,
)
ParameterTypBeschreibung
idstr | NoneExplizite Entitäts-ID. Falls nicht angegeben, werden aus dem Scan abgeleitete Standardwerte verwendet.
parent_idstr | NoneID des übergeordneten Ordners (Folder.parent_id für Ordner, Dataset.folder_id für Datensätze).
manager_organization_idstr | NoneID der verwaltenden Organisation.
owner_organization_idstr | NoneID der besitzenden Organisation.
tag_idslist[str] | NoneIDs zugehöriger Tags.
doc_idslist[str] | NoneIDs zugehöriger Dokumente.
namestr | NoneAnzeigename.
descriptionstr | NoneBeschreibungstext.
licensestr | NoneLizenz-String.
typestr | NoneEntitätstyp/-kategorie.
linkstr | NoneExterne Referenz-URL.
localisationstr | NoneGeografische Abdeckung.
start_datestr | NoneBeginn des abgedeckten Zeitraums.
end_datestr | NoneEnde des abgedeckten Zeitraums.
updating_eachstr | NoneAktualisierungsfrequenz.
no_more_updatestr | NoneKennzeichen, dass keine weiteren Aktualisierungen erwartet werden.

In YAML-Konfigurationen werden dieselben Metadaten üblicherweise als Schlüssel auf oberster Ebene eines add-Eintrags geschrieben:

yaml
add:
  - folder: ./data
    id: source
    name: Source data
    description: Curated files used by the analytics team.

  - dataset: ./data/sales.csv
    id: source---sales
    folder_id: source
    name: Sales
    description: Monthly sales by product and region.

EntityMetadata ist das Python-API-Äquivalent dieser YAML-Metadaten-Schlüssel.

ID-Helfer

python
from datannurpy import sanitize_id, build_dataset_id, build_variable_id
FunktionBeschreibungBeispiel
sanitize_id(s)String für die Verwendung als ID bereinigen"My File (v2)" → "My File v2"
build_dataset_id(folder_id, dataset_name)Datensatz-ID erzeugen("src", "sales") → "src---sales"
build_variable_id(folder_id, dataset_name, var)Variablen-ID erzeugen("src", "sales", "amount") → "src---sales---amount"