Skip to main content
La v5 es una reescritura. Ahora el SDK es síncrono por defecto (con una fachada 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 son TypedDict 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 de apps.network.analytics(...), databases.update(id, name=, ram=) y databases.create(name, type=, version=, memory=). El path opcional de apps.files.list sigue 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 202 SNAPSHOT_PROCESSING devuelve {'pending': True} en lugar de lanzar un error: consulta list, nunca vuelvas a llamar a create.
  • 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.write envía un str como texto y los bytes codificados 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.read siempre pide base64 y devuelve los bytes decodificados.
  • apps.files.list de un directorio inexistente lanza 404 FILE_NOT_FOUND.
  • Un 503 DATABASE_UNAVAILABLE solo se reintenta en GET, 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:
v5: