await-Fassade), hat keine Abhängigkeiten, gruppiert Methoden nach Ressource, gibt einfache Dicts (TypedDict) zurück und wirft einen einzigen Exception-Typ. Es deckt alle 67 Operationen der Square Cloud API ab.
Auf einen Blick
Konstruktion und Optionen
Methode für Methode
Application-Methoden entsprechen denselben Aufrufen mit der ID: app.logs() → client.apps.logs(app.id), app.files_list(path) → client.apps.files.list(app.id, path) und so weiter.
Typen
Antworten sindTypedDicts in squarecloud.types, benannt wie in den SDKs für JS und 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. Sie ersetzen die data/*-Dataclasses von v4 (UserData, StatusData, AppData, …). squarecloud.Response ist jetzt das Antwortprotokoll des Transports (siehe Eigener Transport); die Response von v4, die Mutationen zurückgaben, gibt es nicht mehr, und sie geben None zurück.
Fehler
str(e) lautet '<METHOD> <path>: HTTP <status> <CODE>: <message>', ohne HTTP <status>, wenn der Status 0 ist, und ohne : <message>, wenn die Nachricht leer ist. e.message ist '', wenn der Server nur einen Code gesendet hat.
Verhaltensänderungen
- Optionale Modifikatoren sind reine Keyword-Argumente:
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=), die Filter vonapps.network.analytics(...),databases.update(id, name=, ram=)unddatabases.create(name, type=, version=, memory=). Der optionalepathvonapps.files.listbleibt ein Positionsargument. - Ein 2xx-Body
{"status": "error"}wirft einen Fehler. Abgelehnte Starts/Stopps von Apps und Datenbanken ergeben 409 nur mit einem Code (CONTAINER_ALREADY_STARTED,ACTION_FAILED, …). Ein 202SNAPSHOT_PROCESSINGgibt{'pending': True}zurück, statt einen Fehler zu werfen: Fragelistab, rufecreatenie erneut auf. - Nicht gesetzte optionale Query-Werte (und
'') werden weggelassen, statt gesendet zu werden. - String-Ergebnisse sind nie
None:reset_credentials(id, 'certificate')und ein entfernter Webhook geben''zurück. apps.files.writesendet einenstrals Text undbytesBase64-kodiert; leerer Inhalt erstellt eine leere Datei; Inhalt über 1 MiB wird ohne Timeout gesendet.apps.files.readfordert immer Base64 an und gibt die dekodiertenbyteszurück.apps.files.listeines fehlenden Verzeichnisses wirft 404FILE_NOT_FOUND.- 503
DATABASE_UNAVAILABLEwird nur beiGETwiederholt, da es auftreten kann, nachdem eine Mutation angewendet wurde; das Wiederholen einer idempotenten Mutation liegt beim Aufrufer. - Der Realtime-Stream liefert Ereignisse
{'event', 'data', 'id', ...}, öffnet sich höchstens 3 Mal hintereinander neu, mit einem Öffnen pro 5,5 s, und wirft, wenn ein Öffnen fehlschlägt.
Async
v4 war nur asynchron. In v5 istSquareCloud synchron und AsyncSquareCloud die await-Fassade: dieselben Gruppen und Methoden, jeder Aufruf läuft in asyncio.to_thread, sodass die Event Loop nie blockiert wird. Der Realtime-Stream wird zu async for (ein Lese-Thread versorgt die Loop); schließe ihn mit async with oder close().
v4:
Nächste Schritte
Client
Das SDK installieren und einen Client erstellen.
Fehler
Fehlerklasse, Wiederholungen und Rate Limits.

