Aller au contenu
Console
Try one

    Trouver et provisionner des hubs

    Listez des hubs, lisez-en un, créez-en un, modifiez-le et suivez l'opération qui en découle.

    Fait partie de Fonctions des SDK. Chaque appel ci-dessous est montré dans chaque langage qui l’offre.

    Un hub a un identifiant court (slug), un nom et parfois un titre de catalogue. Montrer le slug à une personne, c’est lui montrer la tuyauterie. Chaque SDK offre donc une fonction qui choisit le meilleur des trois et se rabat sur une forme lisible du slug.

    from thalovant.hubs import hub_display_name
    hub_display_name({"slug": "kitchen-hub"}) # "Kitchen Hub"
    hub_display_name({"slug": "kitchen-hub", "name": "Kitchen"}) # "Kitchen"
    hub_display_name({}) # "A Thalovant hub"

    L’ordre est le suivant : titre de catalogue, puis nom, puis slug. Un name identique au slug est traité comme le slug, parce qu’il n’apporte rien de plus. Si aucun des trois n’existe, la réponse est A Thalovant hub plutôt qu’un libellé vide.

    Utilisez la découverte des hubs publics avant de demander à une personne de choisir un hub.

    page = api.list_public_hubs(limit=12)
    for hub in page["data"]:
    print(hub["id"], hub["slug"], hub["title"])

    Utilisez cet appel quand vous avez une référence de hub tirée d’une URL, d’une carte ou d’un choix enregistré.

    hub = api.get_public_hub("joke-garden")
    print(hub["title"], hub["public_ref"])

    Utilisez cet appel pour les hubs que l’espace de travail connecté peut voir.

    page = api.list_hubs(limit=25)
    for hub in page["data"]:
    print(hub["id"], hub["title"])

    Utilisez cet appel quand vous connaissez déjà l’ID du hub.

    hub = api.get_hub("hub-id")
    print(hub["title"])

    Utilisez ces appels quand votre code doit créer le hub. La découverte exige hubs:read et fonctionne avec tous les forfaits. Les quatre écritures exigent hubs:write et un forfait payant. Pour la règle des etags, les champs non modifiables et le tableau des erreurs, consultez Provisionner des hubs.

    skills = api.list_marketplace_skills()["data"]
    group = api.create_runtime_group({"name": "kiosks"})
    hub = api.create_hub({
    "name": "joke-garden",
    "runtime_group_id": group["id"],
    "spec": {"protocols": {"wss": {"enabled": True}}},
    })
    api.install_runtime_group_skill(group["id"], "skill-weather")
    api.release_runtime_group(group["id"], channel="stable")
    api.release_hub(hub["id"], channel="stable")

    Kotlin, Swift et .NET offrent les mêmes appels sous des noms propres à chaque langage. Leurs pages de SDK en montrent la forme.

    La modification et la suppression d’un hub exigent l’etag actuel du hub, envoyé dans If-Match. Lisez d’abord le hub : l’etag est un champ du corps de la réponse, et l’API n’envoie aucun en-tête de réponse ETag.

    hub = api.get_hub("hub-id")
    hub = api.update_hub("hub-id", {"active": False}, etag=hub["etag"])
    api.delete_hub("hub-id", etag=hub["etag"])

    Un etag manquant ou périmé échoue avec un HTTP 412 et ne change rien. Relisez le hub et réessayez.

    Utilisez l’ID d’opération renvoyé par une commande asynchrone du plan de contrôle. Arrêtez-vous à ready, failed ou timed_out; les commandes qui touchent seulement Git s’arrêtent à committed.

    operation = api.get_operation("operation-id")
    print(operation.status)

    Consultez Opérations pour le cycle de vie et les conseils sur les nouvelles tentatives.

    Utilisez ces appels pour gérer les compétences rattachées au groupe de runtime choisi par un hub. Chaque hub qui partage ce groupe de runtime est touché. Chaque écriture renvoie une opération; par défaut, wait l’interroge toutes les 2 secondes pendant au plus 120 secondes. Les écritures exigent hubs:write et un forfait payant; la liste exige hubs:inspect, qui est compris dans hubs:read. Les erreurs sont du JSON de type « problem » avec un code à la racine, comme skill_version_already_installed avec un HTTP 409 ou hub_without_runtime_group avec un HTTP 404, et le texte d’erreur du SDK se lit HTTP <status>: <message> (<code>). Ces appels arrivent dans le SDK Python 0.5.15 et le SDK Node 0.3.15. Pour les routes, le parcours dans l’application et le tableau des erreurs, consultez Ajouter une compétence à un hub.

    skills = api.list_hub_skills("hub-id") # HubSkillList; rows under .data
    print(skills.source, skills.observed_at)
    for skill in skills.data:
    print(skill.skill, skill.installed_version, skill.state, skill.update_available)
    api.install_hub_skill("hub-id", "skill-weather", version="latest", wait=True)
    api.update_hub_skill("hub-id", "skill-weather", version="1.2.0", wait=True)
    api.remove_hub_skill("hub-id", "skill-weather", wait=True)

    L’appel de liste renvoie l’enveloppe de la route : les rangées se trouvent sous data, et chacune contient installed_version, latest_version, update_available et un state parmi pending, installed, failed, removing, drifted, quarantined ou unmanaged. Chaque écriture renvoie l’opération acceptée avec operation_id, skill, version, previous_version et state. Go, Rust, Kotlin, Swift et .NET offrent aussi ces appels et l’historique, nommés selon le style de chaque langage; consultez leurs pages de SDK pour les options d’attente et de reprise.