await), no tiene dependencias, agrupa los métodos por recurso, devuelve dicts planos (TypedDict) y lanza un único tipo de excepción. Cubre las 67 operaciones de la API de Square Cloud.
De un vistazo
Construcción y opciones
Método por método
Los métodos de
Application se corresponden con las mismas llamadas usando el id: app.logs() → client.apps.logs(app.id), app.files_list(path) → client.apps.files.list(app.id, path), etc.
Tipos
Las respuestas sonTypedDict de squarecloud.types, con los mismos nombres que en los SDK de JS y 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. Reemplazan las dataclasses data/* de la v4 (UserData, StatusData, AppData, …). squarecloud.Response es ahora el protocolo de respuesta del transporte (consulta Transporte personalizado); el Response de la v4 que devolvían las mutaciones ya no existe, y ahora devuelven None.
Errores
str(e) es '<METHOD> <path>: HTTP <status> <CODE>: <message>', sin HTTP <status> cuando el estado es 0 y sin : <message> cuando está vacío. e.message es '' cuando el servidor solo envió un código.
Cambios de comportamiento
- Los modificadores opcionales son solo por palabra clave:
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=), los filtros deapps.network.analytics(...),databases.update(id, name=, ram=)ydatabases.create(name, type=, version=, memory=). Elpathopcional deapps.files.listsigue siendo posicional. - Un cuerpo 2xx
{"status": "error"}lanza un error. Los rechazos de inicio/detención de aplicaciones y bases de datos son un 409 con solo un código (CONTAINER_ALREADY_STARTED,ACTION_FAILED, …). Un 202SNAPSHOT_PROCESSINGdevuelve{'pending': True}en lugar de lanzar un error: consultalist, nunca vuelvas a llamar acreate. - Los valores de query opcionales no definidos (y
'') se omiten en lugar de enviarse. - Los resultados de tipo string nunca son
None:reset_credentials(id, 'certificate')y un webhook eliminado devuelven''. apps.files.writeenvía unstrcomo texto y losbytescodificados en base64; un contenido vacío crea un archivo vacío; un contenido de más de 1 MiB se envía sin timeout.apps.files.readsiempre pide base64 y devuelve losbytesdecodificados.apps.files.listde un directorio inexistente lanza 404FILE_NOT_FOUND.- Un 503
DATABASE_UNAVAILABLEsolo se reintenta enGET, porque puede producirse después de que se haya aplicado una mutación; reintentar una mutación idempotente queda en manos de quien llama. - El stream de tiempo real produce eventos
{'event', 'data', 'id', ...}, se reabre como máximo 3 veces seguidas a razón de una apertura cada 5,5 s, y lanza un error cuando falla una apertura.
Asíncrono
La v4 era solo asíncrona. En la v5,SquareCloud es síncrono y AsyncSquareCloud es la fachada await: los mismos grupos y métodos, con cada llamada ejecutada en asyncio.to_thread, así que el event loop nunca se bloquea. El stream de tiempo real pasa a ser async for (un hilo lector alimenta el bucle); ciérralo con async with o close().
v4:

