user() | account.me()['user'] | me() gibt auch applications und databases zurück |
all_apps() | account.me()['applications'] | |
app(app_id) | apps.get(app_id) | Jetzt GET /apps/{id}: funktioniert auch mit Workspace-IDs '<appId>-<workspaceId>' |
user_snapshots(scope) | account.snapshots(*, scope=None) | scope ist ein reines Keyword-Argument. Die Einträge enthalten die version_id und die signierte url der API |
service_status() | service.status() | |
upload_app(File(path)) | apps.create(path) | Streamt von der Festplatte; gibt AppCreated zurück (domain ist der vollständige Host einer Website; es gibt kein subdomain) |
delete_app(id) | apps.delete(id) | Gibt None zurück |
all_apps_status() | apps.status_all(*, workspace_id=None) | Gestoppte Apps werden nicht mehr ausgelassen |
app_status(id) | apps.status(id, *, raw=False) | raw=True (reines Keyword-Argument) gibt Zahlen zurück |
start_app / stop_app / restart_app | apps.start / apps.stop / apps.restart | Geben None zurück |
get_logs(id) | apps.logs(id) | Gibt den str zurück |
app_metrics(id) | apps.metrics(id) | |
realtime(id) (Async-Generator jeder data:-Zeile, wenn möglich als JSON dekodiert) | apps.realtime(id) | Iterator von {'event', 'data', 'id'} mit dem rohen data-Text, plus stream/line bei Logs und dem zusammengeführten status bei Status-Ereignissen. Verbindet sich selbst neu (siehe Verhaltensänderungen); der Stream hat kein Lese-Timeout (v4 gab nach 90 s ohne Daten auf), also beende ihn mit close() |
all_domains() | apps.domains() | |
load_balancers() | apps.load_balancers() | |
commit(id, File(path)) | apps.commit(id, file, *, path=None, filename=None) | Reines Keyword-Argument path = Zielverzeichnis; filename benennt eine Nicht-ZIP-Datei (bytes standardmäßig commit.zip) |
github_integration(id, access_token) | apps.deploys.set_webhook(id, access_token) | |
last_deploys(id) | apps.deploys.list(id) | Ereignisse enthalten source, branch, files; ein fehlgeschlagener Deploy endet mit state='error' plus code und message |
current_app_integration(id) | apps.deploys.current(id) | Gibt {'app'?, 'webhook'?} statt des Webhook-Strings zurück |
get_app_envs / set_app_envs / overwrite_app_envs / delete_app_envs | apps.envs.get / set / replace / delete | |
clear_app_envs(id) | apps.envs.replace(id, {}) | |
app_files_list(id, path) | apps.files.list(id, path=None) | Die Einträge sind die FileEntry der API (ohne berechnetes path/app_id). Ein fehlendes Verzeichnis wirft 404 FILE_NOT_FOUND, statt [] zurückzugeben; ein gesperrtes ergibt 403 BLOCKED_PATH |
read_app_file(id, path) → BytesIO | apps.files.read(id, path) → bytes | Base64-kodiert abgerufen (?encoding=base64) und dekodiert; über 10 MB ergibt 413 FILE_TOO_LARGE |
create_app_file(id, File(...), path) | apps.files.write(id, path, content) | Ein str wird als Text gesendet, bytes Base64-kodiert (binärsicher); der Pfad wird unverändert gesendet (kein zusätzliches /); leerer Inhalt ('' oder b'') erstellt eine leere Datei |
move_app_file(id, origin, dest) | apps.files.move(id, path, to) | |
delete_app_file(id, path) | apps.files.delete(id, path) | |
snapshot(id) → Snapshot | apps.snapshots.create(id) | {'pending': True} bei 202, statt einen Fehler zu werfen; frage dann list ab, erstelle nie erneut |
all_app_snapshots(id) | apps.snapshots.list(id) | Die Einträge enthalten die version_id und die signierte Download-url der API, unverändert weitergereicht |
restore_snapshot('app', id, snapshot_id, version_id) | apps.snapshots.restore(id, name, version_id) | name und version_id eines list-Eintrags |
restore_snapshot('database', id, ...) | databases.snapshots.restore(id, name, version_id) | name und version_id eines list-Eintrags |
Snapshot.download(path) | client.download_snapshot(url, dest) | Streamt das ZIP selbst (v4 verpackte es in ein weiteres ZIP) |
domain_analytics(id, start=, end=, ...) | apps.network.analytics(id, start, end, *, country=, ...) | start/end werden von der API verlangt; die Filter sind reine Keyword-Argumente |
network_errors(id, start, end, include_4xx) / network_logs / network_performance | apps.network.errors(id, start, end, *, include_4xx=False) / logs / performance | analytics, errors und performance geben für ein Fenster ohne Daten None zurück |
dns_records(id) | apps.network.dns(id) | |
set_custom_domain(id, custom_domain) | apps.network.set_domain(id, domain) | v4 hat den Body nie gesendet |
purge_cache(id) | apps.network.purge_cache(id) | |
link_github_app(id, repository_name, repository_branch) | apps.deploys.link_github_app(id, repository, branch) | Funktioniert jetzt mit einem API-Schlüssel (Scope apps:deploy); gibt das LinkedRepository ({id, full_name, branch}) statt des rohen Dicts zurück; 403 GITHUB_NOT_CONNECTED ohne Installation der GitHub App |
unlink_github_app(id) | apps.deploys.unlink_github_app(id) | Gibt None zurück; 400 GIT_NOT_CONFIGURED, wenn nichts verknüpft ist |
create_database(name, memory, type, version=None) | databases.create(name, type=, version=, memory=) | Reine Keyword-Argumente; version ist Pflicht (eine Hauptversion wie '8' funktioniert) |
get_database_info(id) | databases.get(id) | |
edit_database(id, name, memory) | databases.update(id, name=, ram=) | v4 sendete memory, was die API ignorierte |
delete_database / start_database / stop_database | databases.delete / start / stop | |
get_database_status(id) | databases.status(id, *, raw=False) | |
all_databases_status() | databases.status_all() | |
database_metrics(id) | databases.metrics(id) | |
get_database_certificate(id) → Certificate | databases.certificate(id) → Base64-str | base64.b64decode(...) ergibt das PEM |
reset_database_password(id) | databases.reset_credentials(id, 'password') | Gibt das neue Passwort zurück |
reset_database_certificate(id) | databases.reset_credentials(id, 'certificate') | Gibt '' zurück |
all_database_snapshots(id) / database_snapshot(id) | databases.snapshots.list(id) / create(id) | Die Einträge enthalten version_id und url, wie bei Apps |
create_workspace(name) | workspaces.create(name) | Gibt {id, name} in einer Anfrage zurück |
all_workspaces() / get_workspace(id) | workspaces.list() / workspaces.get(id) | v4 schrieb jede App-id in die zusammengesetzte Form '<appId>-<workspaceId>' um; v5 gibt die reine ID der API zurück, also baue sie selbst: f"{app['id']}-{workspace['id']}" |
delete_workspace / leave_workspace | workspaces.delete / workspaces.leave | |
add_member_to_workspace(ws, invite_code, permissions) | workspaces.members.add(ws, code, group) | |
modify_member_permissions(ws, user_id, permissions) | workspaces.members.update(ws, member_id, group) | |
remove_member_from_workspace(ws, user_id) | workspaces.members.remove(ws, member_id) | |
get_invite_code() | workspaces.members.invite_code() | |
add_app_to_workspace / remove_app_from_workspace | workspaces.apps.add / workspaces.apps.remove | |
| — | ai.chat(request) | Neu; request ist der Body im OpenAI-Stil ({'messages': [...], 'model': ...}) |
client.api_key | Entfernt | Behalte deine eigene Referenz auf den Schlüssel |
on_request(endpoint), Application.capture(endpoint) | Entfernt | Siehe die Zeile zu den Listenern unter Auf einen Blick |
squarecloud.utils.ConfigFile | Entfernt | Schreibe die Datei squarecloud.app selbst (Zeilen KEY=value) |