await), n’a aucune dépendance, regroupe les méthodes par ressource, renvoie des dicts simples (TypedDict) et lève un seul type d’exception. Il couvre les 67 opérations de l’API Square Cloud.
En un coup d’œil
Construction et options
Méthode par méthode
Les méthodes d’
Application correspondent aux mêmes appels avec l’identifiant : app.logs() → client.apps.logs(app.id), app.files_list(path) → client.apps.files.list(app.id, path), et ainsi de suite.
Types
Les réponses sont desTypedDict de squarecloud.types, nommés comme dans les SDK JS et Go : Account, User, Plan, AppSummary, DatabaseSummary, App, AppCreated, StatusListItem, RuntimeStats, MetricPoint, AppDomain, LoadBalancers, DeployEvent, DeployCurrent, DeployRepository, LinkedRepository, EnvVars, FileEntry, Snapshot, SnapshotCreated, SnapshotScope, AnalyticsFilters, NetworkAnalytics, NetworkErrors, NetworkLog, NetworkPerformance, DNSRecord, Database, DatabaseCreated, DatabaseType, Workspace, WorkspaceCreated, WorkspaceGroup, ServiceStatus, ServiceEntry, ChatRequest, ChatMessage, ChatCompletion, RealtimeEvent, RealtimeStatus. Ils remplacent les dataclasses data/* de la v4 (UserData, StatusData, AppData, …). squarecloud.Response est désormais le protocole de réponse du transport (voir Transport personnalisé) ; le Response de la v4 que renvoyaient les mutations a disparu, et celles-ci renvoient None.
Erreurs
str(e) vaut '<METHOD> <path>: HTTP <status> <CODE>: <message>', sans HTTP <status> lorsque le statut est 0 et sans : <message> lorsqu’il est vide. e.message vaut '' lorsque le serveur n’a envoyé qu’un code.
Changements de comportement
- Les modificateurs optionnels sont uniquement nommés :
account.snapshots(scope=),apps.status_all(workspace_id=),apps.status(id, raw=),databases.status(id, raw=),apps.commit(id, file, path=, filename=),apps.network.errors(..., include_4xx=), les filtres deapps.network.analytics(...),databases.update(id, name=, ram=)etdatabases.create(name, type=, version=, memory=). Lepathoptionnel deapps.files.listreste positionnel. - Un corps 2xx
{"status": "error"}lève une erreur. Les refus de démarrage/arrêt des applications et des bases de données donnent 409 avec seulement un code (CONTAINER_ALREADY_STARTED,ACTION_FAILED, …). Un 202SNAPSHOT_PROCESSINGrenvoie{'pending': True}au lieu de lever une erreur : interrogezlist, n’appelez jamaiscreateà nouveau. - Les valeurs de requête optionnelles non définies (et
'') sont omises au lieu d’être envoyées. - Les résultats de type chaîne ne sont jamais
None:reset_credentials(id, 'certificate')et un webhook supprimé renvoient''. apps.files.writeenvoie unestren texte et desbytesencodés en base64 ; un contenu vide crée un fichier vide ; un contenu de plus de 1 MiB est envoyé sans timeout.apps.files.readdemande toujours du base64 et renvoie lesbytesdécodés.apps.files.listsur un répertoire inexistant lève 404FILE_NOT_FOUND.- 503
DATABASE_UNAVAILABLEn’est réessayé que surGET, car il peut survenir après l’application d’une mutation ; réessayer une mutation idempotente revient à l’appelant. - Le flux temps réel produit des événements
{'event', 'data', 'id', ...}, se rouvre au plus 3 fois d’affilée à raison d’une ouverture toutes les 5,5 s, et lève une erreur lorsqu’une ouverture échoue.
Asynchrone
La v4 était uniquement asynchrone. Dans la v5,SquareCloud est synchrone et AsyncSquareCloud est la façade await : les mêmes groupes et méthodes, chaque appel étant exécuté dans asyncio.to_thread, de sorte que la boucle d’événements n’est jamais bloquée. Le flux temps réel devient async for (un thread de lecture alimente la boucle) ; fermez-le avec async with ou close().
v4 :

