Skip to main content
v5 ist eine Neuentwicklung. Das SDK ist jetzt standardmäßig synchron (mit einer 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 sind TypedDicts 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 von apps.network.analytics(...), databases.update(id, name=, ram=) und databases.create(name, type=, version=, memory=). Der optionale path von apps.files.list bleibt 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 202 SNAPSHOT_PROCESSING gibt {'pending': True} zurück, statt einen Fehler zu werfen: Frage list ab, rufe create nie 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.write sendet einen str als Text und bytes Base64-kodiert; leerer Inhalt erstellt eine leere Datei; Inhalt über 1 MiB wird ohne Timeout gesendet. apps.files.read fordert immer Base64 an und gibt die dekodierten bytes zurück.
  • apps.files.list eines fehlenden Verzeichnisses wirft 404 FILE_NOT_FOUND.
  • 503 DATABASE_UNAVAILABLE wird nur bei GET wiederholt, 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 ist SquareCloud 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:
v5: