Skip to main content
A v5 é uma reescrita. O SDK agora é síncrono por padrão (com uma fachada 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ão TypedDicts 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 de apps.network.analytics(...), databases.update(id, name=, ram=) e databases.create(name, type=, version=, memory=). O path opcional de apps.files.list continua 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 202 SNAPSHOT_PROCESSING retorna {'pending': True} em vez de lançar um erro: consulte list, nunca chame create novamente.
  • 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.write envia uma str como texto e bytes codificados em base64; conteúdo vazio cria um arquivo vazio; conteúdo acima de 1 MiB é enviado sem timeout. apps.files.read sempre pede base64 e retorna os bytes decodificados.
  • apps.files.list de um diretório inexistente lança 404 FILE_NOT_FOUND.
  • O 503 DATABASE_UNAVAILABLE é repetido apenas em GET, 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:
v5: