await), não tem nenhuma dependência, agrupa os métodos por recurso, retorna dicts simples (TypedDict) e lança um único tipo de exceção. Ele cobre todas as 67 operações da API da Square Cloud.
Visão geral
Construção e opções
Método a método
Os métodos de
Application correspondem às mesmas chamadas com o id: app.logs() → client.apps.logs(app.id), app.files_list(path) → client.apps.files.list(app.id, path), e assim por diante.
Tipos
As respostas sãoTypedDicts em squarecloud.types, com os mesmos nomes dos SDKs de 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. Eles substituem as dataclasses data/* da v4 (UserData, StatusData, AppData, …). squarecloud.Response agora é o protocolo de resposta do transporte (veja Transporte personalizado); o Response da v4 que as mutações retornavam não existe mais, e elas retornam None.
Erros
str(e) é '<METHOD> <path>: HTTP <status> <CODE>: <message>', sem HTTP <status> quando o status é 0 e sem : <message> quando a mensagem está vazia. e.message é '' quando o servidor enviou apenas um código.
Mudanças de comportamento
- Modificadores opcionais são keyword-only:
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=), os filtros deapps.network.analytics(...),databases.update(id, name=, ram=)edatabases.create(name, type=, version=, memory=). Opathopcional deapps.files.listcontinua posicional. - Um corpo 2xx
{"status": "error"}lança um erro. As recusas de start/stop de aplicações e bancos de dados são 409 apenas com um código (CONTAINER_ALREADY_STARTED,ACTION_FAILED, …). Um 202SNAPSHOT_PROCESSINGretorna{'pending': True}em vez de lançar um erro: consultelist, nunca chamecreatenovamente. - Valores opcionais de query não definidos (e
'') são omitidos em vez de enviados. - Resultados string nunca são
None:reset_credentials(id, 'certificate')e um webhook removido retornam''. apps.files.writeenvia umastrcomo texto ebytescodificados em base64; conteúdo vazio cria um arquivo vazio; conteúdo acima de 1 MiB é enviado sem timeout.apps.files.readsempre pede base64 e retorna osbytesdecodificados.apps.files.listde um diretório inexistente lança 404FILE_NOT_FOUND.- O 503
DATABASE_UNAVAILABLEé repetido apenas emGET, já que pode ocorrer depois que uma mutação foi aplicada; repetir uma mutação idempotente fica a cargo de quem chama. - O stream em tempo real produz eventos
{'event', 'data', 'id', ...}, reabre no máximo 3 vezes seguidas a um ritmo de uma abertura a cada 5,5 s e lança um erro quando uma abertura falha.
Assíncrono
A v4 era apenas assíncrona. Na v5,SquareCloud é síncrono e AsyncSquareCloud é a fachada await: os mesmos grupos e métodos, cada chamada executada em asyncio.to_thread, então o event loop nunca é bloqueado. O stream em tempo real passa a usar async for (uma thread de leitura alimenta o loop); feche-o com async with ou close().
v4:

