Menu de la documentation
SDK Python
Installer le SDK, se connecter avec une clé API et comprendre le fonctionnement de son client.
En bref
Le SDK Python permet à votre code d'enregistrer et de gouverner des ressources dans Northstar : systèmes de stockage, sources, datasets, collections de documents, KPIs, tableaux de bord, équipes. Il s'authentifie avec la clé API d'un compte d'intégration et appelle l'API de la plateforme, jamais votre entrepôt. Tout ce qu'il fait respecte les rôles et les équipes du compte.
Installer
Le SDK demande Python 3.13 ou plus récent.
pip install northstar-sdk
# ou
uv add northstar-sdkLe paquet fournit les annotations de types : votre éditeur complète les arguments de chaque méthode.
Configurer
Le SDK lit deux variables d'environnement :
| Variable | Valeur | Exemple |
|---|---|---|
NORTHSTAR_API_URL | L'adresse de votre plateforme, suivie de /api | https://data.example.com/api |
NORTHSTAR_API_KEY | La clé API du compte d'intégration | northstar_… |
Vous pouvez aussi les passer dans le code, par exemple quand vous lisez la clé dans un gestionnaire de secrets :
from northstar_sdk import Client
client = Client(
api_url="https://data.example.com/api",
api_key=secrets["northstar-api-key"],
timeout=120, # secondes, la valeur par défaut
)Client() lève une ValueError si l'adresse ou la clé manque.
Le client
Client est le point d'entrée unique. Il ne parle qu'à l'API de la plateforme : les identifiants de votre entrepôt, quand vous enregistrez un système de stockage, sont envoyés à Northstar, qui les chiffre.
L'organisation vient de la clé. Le premier appel qui en a besoin la demande une fois à la plateforme, puis la garde :
client = Client()
print(client.resolve_organization()) # l'identifiant de l'organisation de la cléLes espaces de noms
Chaque type de ressource a son espace de noms sur le client :
| Espace de noms | Lecture | Écriture |
|---|---|---|
client.storage_systems | — | create, upsert, update, delete |
client.data_source_categories | — | create, upsert, update, delete |
client.data_sources | list, get | create, upsert, update, delete |
client.datasets | list, get, find_by_name | create, upsert, update, delete |
client.document_collections | — | create, upsert, update, delete, puis ingest() |
client.kpis | list, get, find_by_name | create, upsert, update, delete |
client.figures | list, get | create, upsert, update, delete |
client.dashboards | browse, get, find_by_title | create, upsert, update, delete, create_folder |
client.dashboard_folders | browse, list, get, find_by_name | create, upsert, update, delete |
client.teams | list, find_by_name, find_by_slug | create, upsert, update, delete |
client.users | resolve | create, upsert, update |
client.organisations | — | create, upsert, update, delete |
client.search | recherche globale | — |
Les lectures ne renvoient que ce que voient les équipes du compte :
list(search=…, page=1, limit=20)renvoie unePageavecitems,total,total_pagesethas_next.list_all()récupère toutes les pages.get(id)renvoieNonequand la ressource n'existe pas ou que le compte ne peut pas la voir.get_or_raise(id)lève alorsNotFoundError.find_by_name(name)lèveNotFoundErrorquand rien ne correspond, etAmbiguousLookupErrorquand plusieurs ressources correspondent.
Créer, modifier, upsert, supprimer
| Méthode | À utiliser pour | Si la ressource existe déjà |
|---|---|---|
create(...) | Ajouter une ressource qui ne doit pas encore exister | Échoue avec 409 Conflict, en donnant l'identifiant existant |
update(id, ...) | Modifier une ressource dont vous connaissez l'identifiant | La modifie ; échoue avec 404 si elle manque |
upsert(...) | Provisionner de façon idempotente, par exemple à chaque exécution d'un pipeline | La met à jour au lieu d'échouer |
delete(id) | Supprimer une ressource | La supprime ; échoue avec 404 si elle manque |
Chaque ressource est identifiée par une clé métier : le slug d'un système de stockage ou d'une source, le système de stockage et l'emplacement d'un dataset, l'URL d'intégration d'un tableau de bord. upsert utilise cette clé pour retrouver la ressource existante.
Les méthodes d'écriture renvoient un handle : un objet qui connaît l'identifiant de la ressource et propose ses actions. for_id(id) donne le handle d'une ressource existante.
dataset = client.datasets.upsert(
location={"schema": "marts", "table": "orders"},
name="Orders",
type="TABLE",
layer="GOLD",
storage_system_slug="warehouse",
)
dataset.analyze()
same_dataset = client.datasets.for_id(dataset.dataset_id)Gouvernance
Les handles des datasets, KPIs, tableaux de bord et figures portent les actions de gouvernance des équipes et ressources :
dataset.assign_to_team("sales") # droits par défaut du type de ressource
dataset.assign_to_team("finance", permissions=["view", "ask_ai"])
dataset.assign_owner("owner@example.com")
dataset.assign_editors(["editor@example.com"])assign_to_teamprend le slug de l'équipe. Un slug inconnu n'attribue rien : le résultat contient alors un avertissement, sans lever d'erreur.- Sans
permissions, l'équipe reçoit les droits par défaut du type de ressource. - Le propriétaire et les éditeurs doivent appartenir à une équipe avec laquelle la ressource est partagée : rattachez d'abord l'équipe.
- Les figures n'ont pas de propriétaire : appelez
assign_editorssur elles, pasassign_owner. Les collections de documents se rattachent aux équipes dans l'application. - Un nouveau dataset n'est visible que des administrateurs de la plateforme tant qu'aucune équipe n'y a accès. Rattachez une équipe juste après l'avoir créé.
Erreurs
| Erreur | Quand |
|---|---|
ValueError | NORTHSTAR_API_URL ou NORTHSTAR_API_KEY manque, ou la clé n'a pas d'organisation |
PermissionError | La clé est absente, inconnue ou révoquée (401) |
httpx.HTTPStatusError | Toute autre réponse d'erreur : 400 entrée invalide, 403 droit manquant, 404 introuvable, 409 conflit. Le corps de la réponse l'explique. |
NotFoundError, AmbiguousLookupError | Une recherche par identifiant ou par nom n'a rien trouvé, ou a trouvé plusieurs ressources |
Voir les réponses d'erreur pour leur contenu.
Questions fréquentes
Le SDK lit-il des données dans mon entrepôt ? Non. Il enregistre et gouverne des ressources ; Northstar lit l'entrepôt avec les identifiants du système de stockage.
Puis-je utiliser le SDK depuis un notebook ? Oui, avec la clé d'un compte d'intégration dans l'environnement. Utilisez une clé dédiée, et révoquez-la quand le notebook est terminé.
Quelles ressources le SDK ne gère-t-il pas encore ? Les règles de validation, les alertes, les transformations et les tableaux de bord construits dans Northstar se gèrent dans l'application. Le SDK enregistre les tableaux de bord intégrés depuis d'autres outils.