Skip to main content
La v5 è una riscrittura. L’SDK ora è sincrono per impostazione predefinita (con una facciata await), non ha dipendenze, raggruppa i metodi per risorsa, restituisce dict semplici (TypedDict) e solleva un unico tipo di eccezione. Copre tutte le 67 operazioni dell’API di Square Cloud.

In sintesi

Costruzione e opzioni

Metodo per metodo

I metodi di Application corrispondono alle stesse chiamate con l’id: app.logs() → client.apps.logs(app.id), app.files_list(path) → client.apps.files.list(app.id, path), e così via.

Tipi

Le risposte sono TypedDict in squarecloud.types, con gli stessi nomi degli SDK JS e 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. Sostituiscono le dataclass data/* della v4 (UserData, StatusData, AppData, …). squarecloud.Response ora è il protocollo della risposta del transport (vedi Transport personalizzato); la Response della v4 restituita dalle mutazioni non esiste più, e ora queste restituiscono None.

Errori

str(e) è '<METHOD> <path>: HTTP <status> <CODE>: <message>', senza HTTP <status> quando lo status è 0 e senza : <message> quando è vuoto. e.message è '' quando il server ha inviato solo un codice.

Cambiamenti di comportamento

  • I modificatori facoltativi sono solo keyword: 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=), i filtri di apps.network.analytics(...), databases.update(id, name=, ram=) e databases.create(name, type=, version=, memory=). Il path facoltativo di apps.files.list resta posizionale.
  • Un body 2xx {"status": "error"} solleva un’eccezione. I rifiuti di avvio/arresto di app e database sono 409 con solo un codice (CONTAINER_ALREADY_STARTED, ACTION_FAILED, …). Un 202 SNAPSHOT_PROCESSING restituisce {'pending': True} invece di sollevare un’eccezione: interroga list, non chiamare mai di nuovo create.
  • I valori di query facoltativi non impostati (e '') vengono omessi invece di essere inviati.
  • I risultati stringa non sono mai None: reset_credentials(id, 'certificate') e un webhook rimosso restituiscono ''.
  • apps.files.write invia una str come testo e i bytes codificati in base64; un contenuto vuoto crea un file vuoto; un contenuto oltre 1 MiB viene inviato senza timeout. apps.files.read richiede sempre il base64 e restituisce i bytes decodificati.
  • apps.files.list di una directory mancante solleva 404 FILE_NOT_FOUND.
  • 503 DATABASE_UNAVAILABLE viene ripetuto solo su GET, perché può verificarsi dopo che una mutazione è stata applicata; ripetere una mutazione idempotente spetta al chiamante.
  • Il flusso realtime produce eventi {'event', 'data', 'id', ...}, si riapre al massimo 3 volte di fila con un’apertura ogni 5,5 s e solleva un’eccezione quando un’apertura fallisce.

Async

La v4 era solo asincrona. Nella v5, SquareCloud è sincrono e AsyncSquareCloud è la facciata await: gli stessi gruppi e metodi, con ogni chiamata eseguita in asyncio.to_thread, quindi l’event loop non viene mai bloccato. Il flusso realtime diventa async for (un thread lettore alimenta il loop); chiudilo con async with o close(). v4:
v5: