Aller au contenu

API Python

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,
)
AttributTypeDescription
app_pathstr | Path | NoneChemin pour l'export d'app autonome ; s'il contient déjà data/db, il est réutilisé pour les scans incrémentaux
metadata_pathstr | Path | list[str | Path] | NoneDossier source de métadonnées, URI de base de données, ou liste de sources
depth"dataset" | "variable" | "stat" | "value"Profondeur de scan par défaut (défaut : "value")
refreshboolForcer un rescan complet en ignorant le cache (défaut : False)
on_scan_error"warn" | "fail"Le scan continue toujours malgré les erreurs (un fichier/une table en échec est journalisé et ignoré). "warn" (défaut) sort avec le code 0 ; "fail" fait sortir le CLI avec le code 2 quand un dataset a échoué, pour que la CI ne publie pas en vert un catalogue tronqué
on_metadata_error"warn" | "fail"Le chargement des métadonnées continue aussi malgré les erreurs (une table invalide est journalisée et ignorée, les tables valides s'appliquent quand même). "warn" (défaut) sort avec le code 0 ; "fail" fait sortir le CLI avec le code 3 quand une table de métadonnées a échoué la validation, pour que la CI ne publie pas en vert un catalogue privé de sa curation
freq_thresholdintNombre maximum de valeurs distinctes pour la détection de fréquences et d'énumérations automatiques. Au-delà de ce seuil, les chaînes reçoivent des fréquences de motifs à la place
auto_enumerationsboolCréer des énumérations automatiques à partir des fréquences de valeurs et les rattacher aux variables (défaut : True)
csv_encodingstr | NoneEncodage CSV par défaut (utf-8, cp1252, etc.)
sample_sizeint | NoneTaille d'échantillon par défaut pour la détection de fréquences et d'énumérations automatiques (défaut : 100_000)
preview_rowsint | Literal[False]Nombre maximum de lignes exportées par défaut dans les aperçus de datasets aux profondeurs stat/value (défaut : 100 ; 0 ou false désactive)
csv_skip_copyboolSauter la copie temporaire UTF-8 pour les CSV locaux (défaut : False)
app_configdict[str, str] | NoneConfiguration clé-valeur pour l'app web
quietboolSupprimer la journalisation de progression (défaut : False)
verboseboolAfficher les tracebacks complets en cas d'erreur (défaut : False)
log_filestr | Path | NoneÉcrire le journal complet du scan dans un fichier (tronqué à chaque exécution)
folderTable[Folder]Table des dossiers (.all(), .count, .get_by(...))
datasetTable[Dataset]Table des datasets
variableTable[Variable]Table des variables
enumerationTable[Enumeration]Table des énumérations
valueTable[Value]Table des valeurs d'énumération
frequencyTable[Frequency]Table des fréquences (calculée)
organizationTable[Organization]Table des organisations
tagTable[Tag]Table des tags
docTable[Doc]Table des documents
conceptTable[Concept]Table des concepts du glossaire métier
configTable[Config]Table clé-valeur de configuration de l'app web

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",
)
ParamètreTypeDéfautDescription
pathstr | Path | list[str | Path]requisRépertoire ou liste de répertoires à scanner
metadataEntityMetadata | NoneNoneIdentité, rattachement au parent et métadonnées du dossier racine
depth"dataset" | "variable" | "stat" | "value" | NoneNoneProfondeur de scan (utilise catalog.depth si None)
includelist[str] | NoneNoneMotifs glob à inclure
excludelist[str] | NoneNoneMotifs glob à exclure
recursiveboolTrueScanner les sous-répertoires
csv_encodingstr | NoneNoneSurcharger l'encodage CSV
sample_sizeint | NoneNoneLignes échantillonnées pour la détection de fréquences et d'énumérations automatiques (surcharge le catalogue)
auto_enumerationsbool | NoneNoneCréer des énumérations automatiques à partir des fréquences de valeurs pour ce dossier (surcharge le catalogue)
preview_rowsint | Literal[False] | NoneNoneNombre maximum de lignes d'aperçu pour les datasets trouvés dans ce dossier (surcharge le catalogue ; 0 ou false désactive)
csv_skip_copybool | NoneNoneSauter la copie temporaire UTF-8 (surcharge le catalogue)
storage_optionsdict | NoneNoneOptions pour le stockage distant (passées à fsspec)
refreshbool | NoneNoneForcer le rescan (surcharge le réglage du catalogue)
quietbool | NoneNoneSurcharger le réglage quiet du catalogue
time_seriesboolTrueRegrouper les fichiers présentant des motifs temporels
create_foldersboolTrueSi False, ne pas créer de dossiers depuis le disque ; s'appuyer sur metadata_path pour la structure (metadata-first)
on_unmatched"skip" | "warn" | "error""warn"Politique quand un fichier scanné n'a pas de correspondance dans les métadonnées (uniquement quand 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,
)
ParamètreTypeDéfautDescription
pathstr | Path | list[str | Path]requisFichier(s) ou répertoire partitionné (local/distant)
metadataEntityMetadata | NoneNoneIdentité du dataset, rattachement au parent et métadonnées
depth"dataset" | "variable" | "stat" | "value" | NoneNoneProfondeur de scan (utilise catalog.depth si None)
csv_encodingstr | NoneNoneSurcharger l'encodage CSV
sample_sizeint | NoneNoneLignes échantillonnées pour la détection de fréquences et d'énumérations automatiques (surcharge le catalogue)
auto_enumerationsbool | NoneNoneCréer des énumérations automatiques à partir des fréquences de valeurs pour ce dataset (surcharge le catalogue)
preview_rowsint | Literal[False] | NoneNoneNombre maximum de lignes d'aperçu pour ce dataset (surcharge le catalogue ; 0 ou false désactive)
csv_skip_copybool | NoneNoneSauter la copie temporaire UTF-8 (surcharge le catalogue)
storage_optionsdict | NoneNoneOptions pour le stockage distant (passées à fsspec)
refreshbool | NoneNoneForcer le rescan (surcharge le réglage du catalogue)
quietbool | NoneNoneSurcharger le réglage quiet du catalogue

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,
)
ParamètreTypeDéfautDescription
connectionstr | ibis.BaseBackendrequisChaîne de connexion ou objet backend ibis
metadataEntityMetadata | NoneNoneIdentité, rattachement au parent et métadonnées du dossier racine
depth"dataset" | "variable" | "stat" | "value" | NoneNoneProfondeur de scan (utilise catalog.depth si None)
schemastr | list[str] | NoneNoneSchéma(s) à scanner
includelist[str] | NoneNoneMotifs glob comparés aux noms de tables à inclure
excludelist[str] | NoneNoneMotifs glob comparés aux noms de tables à exclure
sample_sizeint | NoneNoneLignes échantillonnées pour la détection de fréquences et d'énumérations automatiques (surcharge le catalogue)
auto_enumerationsbool | NoneNoneCréer des énumérations automatiques à partir des fréquences de valeurs pour les tables scannées (surcharge le catalogue)
preview_rowsint | Literal[False] | NoneNoneNombre maximum de lignes d'aperçu pour les datasets de tables scannées (surcharge le catalogue ; 0 ou false désactive)
group_by_prefixbool | strTrueRegrouper les tables par préfixe en sous-dossiers
prefix_min_tablesint2Nombre minimum de tables pour former un groupe de préfixe
time_seriesboolTrueDétecter les motifs temporels de tables
storage_optionsdict | NoneNoneOptions pour SQLite/GeoPackage distant
refreshbool | NoneNoneForcer le rescan (surcharge le réglage du catalogue)
quietbool | NoneNoneSurcharger le réglage quiet du catalogue
oracle_client_pathstr | NoneNoneChemin des bibliothèques Oracle Instant Client
ssh_tunneldict | NoneNoneConfiguration du tunnel SSH (host, user, port, etc.)

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,
)
ParamètreTypeDéfautDescription
pathstr | PathrequisChemin ou URL distante du répertoire .gdb
metadataEntityMetadata | NoneNoneIdentité, rattachement au parent et métadonnées du dossier conteneur
depth"dataset" | "variable" | "stat" | "value" | NoneNoneProfondeur de scan (utilise catalog.depth si None)
includelist[str] | NoneNoneMotifs glob comparés aux noms de couches à inclure
excludelist[str] | NoneNoneMotifs glob comparés aux noms de couches à exclure
auto_enumerationsbool | NoneNoneCréer des énumérations automatiques à partir des fréquences de valeurs pour les couches scannées (surcharge le catalogue)
preview_rowsint | Literal[False] | NoneNoneNombre maximum de lignes d'aperçu pour les datasets de couches scannées (surcharge le catalogue ; 0 ou false désactive)
quietbool | NoneNoneSurcharger le réglage quiet du catalogue
refreshbool | NoneNoneForcer le rescan (surcharge le réglage du catalogue)
storage_optionsdict | NoneNoneOptions pour le stockage distant (passées à fsspec)

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,
)
ParamètreTypeDéfautDescription
output_dirstr | Path | NoneNoneRépertoire de sortie (utilise app_path si None)
track_evolutionboolTrueSuivre les changements entre exports
copy_assetsdict | list[dict] | NoneNoneCopier des fichiers/répertoires locaux supplémentaires dans l'export selon les mêmes règles que copy_assets()
base_dirstr | Path | NoneNoneRépertoire de base pour les chemins relatifs copy_assets.from (défaut : répertoire de travail courant)
export_size_reportboolFalseAfficher un rapport de taille d'export par table, y compris les tailles .json gzippées estimées
quietbool | NoneNoneSurcharger le réglage quiet du catalogue

Exporte les fichiers de métadonnées JSON. Appelle finalize() automatiquement quand des données ont été scannées.

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,
)
ParamètreTypeDéfautDescription
output_dirstr | Path | NoneNoneRépertoire de sortie (utilise app_path si None)
open_browserboolFalseOuvrir l'app dans le navigateur après l'export
track_evolutionboolTrueSuivre les changements entre exports
update_appboolFalseRafraîchir les fichiers embarqués du front-end quand l'app existe déjà
copy_assetsdict | list[dict] | NoneNoneCopier des fichiers/répertoires locaux supplémentaires dans l'app exportée selon les mêmes règles que copy_assets()
base_dirstr | Path | NoneNoneRépertoire de base pour les chemins relatifs copy_assets.from (défaut : répertoire de travail courant)
export_size_reportboolFalseAfficher un rapport de taille d'export par table pour data/db, y compris les tailles .json gzippées estimées
quietbool | NoneNoneSurcharger le réglage quiet du catalogue

Exporte une app datannur autonome complète avec les données. Utilise app_path par défaut s'il est défini à l'initialisation. Les apps existantes mettent à jour data/db par défaut ; passez update_app=True pour rafraîchir les fichiers embarqués du front-end.

Catalog.finalize()

python
catalog.finalize()

Méthode avancée de cycle de vie. Supprime les entités qui n'ont plus été vues pendant le scan.

En usage normal, il n'est généralement pas nécessaire de l'appeler directement : export_db() et export_app() l'appellent automatiquement après le scan.

run_config()

python
from datannurpy import run_config

catalog = run_config(path)
ParamètreTypeDéfautDescription
pathstr | PathrequisFichier de configuration YAML à charger et exécuter

Exécute un workflow catalog.yml et retourne le Catalog résultant.

Clés YAML de premier niveau reconnues par run_config() :

CléTypeDescription
addlist[dict]Étapes de scan à exécuter avec des entrées raccourcies telles que folder, dataset ou database
envdict[str, str]Variables d'environnement à injecter avant l'expansion des valeurs YAML
env_filestr | Path | list[str | Path]Un ou plusieurs fichiers dotenv à charger avant l'expansion
output_dirstr | Path | NoneExporter uniquement les métadonnées JSON dans ce répertoire au lieu d'exporter une app complète
open_browserboolOuvrir l'app générée dans le navigateur après l'export d'app
copy_assetsdict | list[dict] | NoneCopier des fichiers ou répertoires locaux supplémentaires dans l'export
track_evolutionboolActiver ou désactiver la génération de evolution.json pendant l'export
export_size_reportboolActiver le rapport de taille d'export par table après l'écriture de la base
update_appboolRafraîchir les fichiers embarqués du front-end lors d'un export vers un app_path existant
post_exportstr | list[str] | NoneExécuter des scripts Python après la fin de l'export

Toutes les autres clés de premier niveau non réservées sont transmises à Catalog(...) avec les mêmes noms de paramètres, comme app_path, metadata_path, depth, refresh, sample_size, auto_enumerations, preview_rows, app_config, quiet, verbose et log_file.

Pour garder cette page d'API concise, le comportement YAML détaillé est documenté dans les guides thématiques :

  • options d'export telles que output_dir, open_browser, track_evolution, update_app, copy_assets et post_export : voir Sortie & exports
  • options de métadonnées et de configuration telles que metadata_path, env, env_file et app_config : voir Métadonnées & configuration

Les valeurs basées sur des chemins sont résolues relativement au répertoire du fichier YAML, sauf mention contraire dans ces guides.

copy_assets()

python
from datannurpy import copy_assets

copy_assets(output_dir, rules, *, base_dir=None, quiet=False)
ParamètreTypeDéfautDescription
output_dirstr | PathrequisRépertoire d'export à alimenter
rulesdict | list[dict]requisRègles de copie de la même forme que le copy_assets YAML
base_dirstr | Path | NoneNoneRépertoire de base pour les chemins from relatifs (défaut : répertoire de travail courant)
quietboolFalseSupprimer la journalisation de progression des copies

Chaque règle accepte from, to, include optionnel et clean optionnel.

Catalog.export_db() et Catalog.export_app() acceptent aussi copy_assets= et base_dir= comme enrobages pratiques autour de cet utilitaire.

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,
)
ParamètreTypeDescription
idstr | NoneID d'entité explicite. Si omis, les valeurs par défaut dérivées du scan sont utilisées.
parent_idstr | NoneID du dossier parent (Folder.parent_id pour les dossiers, Dataset.folder_id pour les datasets).
manager_organization_idstr | NoneID de l'organisation gestionnaire.
owner_organization_idstr | NoneID de l'organisation propriétaire.
tag_idslist[str] | NoneIDs des tags associés.
doc_idslist[str] | NoneIDs des documents associés.
namestr | NoneNom d'affichage.
descriptionstr | NoneTexte de description.
licensestr | NoneChaîne de licence.
typestr | NoneType/catégorie de l'entité.
linkstr | NoneURL de référence externe.
localisationstr | NoneCouverture géographique.
start_datestr | NoneDébut de la période couverte.
end_datestr | NoneFin de la période couverte.
updating_eachstr | NoneFréquence de mise à jour.
no_more_updatestr | NoneMarqueur indiquant qu'aucune mise à jour n'est plus attendue.

Dans les configurations YAML, les mêmes métadonnées s'écrivent généralement comme clés de premier niveau sur une entrée add :

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 est l'équivalent en API Python de ces clés de métadonnées YAML.

Utilitaires d'ID

python
from datannurpy import sanitize_id, build_dataset_id, build_variable_id
FonctionDescriptionExemple
sanitize_id(s)Nettoyer une chaîne pour l'utiliser comme ID"My File (v2)" → "My File v2"
build_dataset_id(folder_id, dataset_name)Construire un ID de dataset("src", "sales") → "src---sales"
build_variable_id(folder_id, dataset_name, var)Construire un ID de variable("src", "sales", "amount") → "src---sales---amount"