From 1967b6a30f698c8a11e2a2cedafa5a7aee63418d Mon Sep 17 00:00:00 2001 From: "Joseph T. French" Date: Sat, 8 Aug 2026 16:27:34 -0500 Subject: [PATCH] chore: regenerate against the v1.7.8 API surface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit One behavioural change and two documentation ones. StorageSummary.total_gb_hours is removed. The server retired it in robosystems#1107: it was a storage-billing unit, and there is no storage billing — the overage column is never written, the billing config has no storage entries, and storage is included in the tier. `avg_storage_gb` is now documented as time-weighted, which is what it has become. Note on versioning: this is a removal from a response model, which the 1.0 contract would normally make a major. It rides as a patch because the server change has already shipped — the field is gone from the API, so a client still declaring it would be describing a response it can never receive. There is nothing to deprecate-then-remove; the client is catching up to the wire, not initiating the break. The other two are docstring-only, from robosystems#1105: restore is allowed on entity *subgraphs*, which are written directly and have no materialization path, so a subgraph has no other recovery route. Gate: 519 passed, ruff + format + basedpyright clean. --- .../api/graph_operations/restore_backup.py | 12 ++++++++---- robosystems_client/models/backup_list_response.py | 3 ++- robosystems_client/models/storage_summary.py | 10 +--------- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/robosystems_client/api/graph_operations/restore_backup.py b/robosystems_client/api/graph_operations/restore_backup.py index 00a99ea..57c3712 100644 --- a/robosystems_client/api/graph_operations/restore_backup.py +++ b/robosystems_client/api/graph_operations/restore_backup.py @@ -111,7 +111,8 @@ def sync_detailed( ) -> Response[ErrorResponse | OperationEnvelope]: """Restore Backup - Not allowed on entity graphs (use `materialize` instead) or shared repositories. Destructive: the + Not allowed on entity graphs (use `materialize` instead) or shared repositories. Entity *subgraphs* + are restorable — they are written directly and have no materialization path. Destructive: the existing database is snapshotted, then overwritten. Monitor progress via SSE at `/v1/operations/{operation_id}/stream`. @@ -153,7 +154,8 @@ def sync( ) -> ErrorResponse | OperationEnvelope | None: """Restore Backup - Not allowed on entity graphs (use `materialize` instead) or shared repositories. Destructive: the + Not allowed on entity graphs (use `materialize` instead) or shared repositories. Entity *subgraphs* + are restorable — they are written directly and have no materialization path. Destructive: the existing database is snapshotted, then overwritten. Monitor progress via SSE at `/v1/operations/{operation_id}/stream`. @@ -190,7 +192,8 @@ async def asyncio_detailed( ) -> Response[ErrorResponse | OperationEnvelope]: """Restore Backup - Not allowed on entity graphs (use `materialize` instead) or shared repositories. Destructive: the + Not allowed on entity graphs (use `materialize` instead) or shared repositories. Entity *subgraphs* + are restorable — they are written directly and have no materialization path. Destructive: the existing database is snapshotted, then overwritten. Monitor progress via SSE at `/v1/operations/{operation_id}/stream`. @@ -230,7 +233,8 @@ async def asyncio( ) -> ErrorResponse | OperationEnvelope | None: """Restore Backup - Not allowed on entity graphs (use `materialize` instead) or shared repositories. Destructive: the + Not allowed on entity graphs (use `materialize` instead) or shared repositories. Entity *subgraphs* + are restorable — they are written directly and have no materialization path. Destructive: the existing database is snapshotted, then overwritten. Monitor progress via SSE at `/v1/operations/{operation_id}/stream`. diff --git a/robosystems_client/models/backup_list_response.py b/robosystems_client/models/backup_list_response.py index ef29494..03acac0 100644 --- a/robosystems_client/models/backup_list_response.py +++ b/robosystems_client/models/backup_list_response.py @@ -27,7 +27,8 @@ class BackupListResponse: is_shared_repository (bool | Unset): Whether this is a shared repository (limits apply) Default: False. restore_supported (bool | Unset): Whether backups on this graph can be restored. False for entity graphs, which are materialized from the extensions database (use the materialize operation instead), and for shared - repositories, which are platform-managed and download-only. Default: True. + repositories, which are platform-managed and download-only. True for subgraphs of an entity graph: only the + parent is materialized, so a subgraph has no other recovery path. Default: True. download_quota (DownloadQuota | None | Unset): Download quota for shared repositories """ diff --git a/robosystems_client/models/storage_summary.py b/robosystems_client/models/storage_summary.py index a0a9c06..ed4ae30 100644 --- a/robosystems_client/models/storage_summary.py +++ b/robosystems_client/models/storage_summary.py @@ -15,10 +15,9 @@ class StorageSummary: Attributes: graph_tier (str): Subscription tier - avg_storage_gb (float): Average storage in GB + avg_storage_gb (float): Time-weighted average storage in GB over the period max_storage_gb (float): Peak storage in GB min_storage_gb (float): Minimum storage in GB - total_gb_hours (float): Total GB-hours for billing measurement_count (int): Number of measurements taken """ @@ -26,7 +25,6 @@ class StorageSummary: avg_storage_gb: float max_storage_gb: float min_storage_gb: float - total_gb_hours: float measurement_count: int additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -39,8 +37,6 @@ def to_dict(self) -> dict[str, Any]: min_storage_gb = self.min_storage_gb - total_gb_hours = self.total_gb_hours - measurement_count = self.measurement_count field_dict: dict[str, Any] = {} @@ -51,7 +47,6 @@ def to_dict(self) -> dict[str, Any]: "avg_storage_gb": avg_storage_gb, "max_storage_gb": max_storage_gb, "min_storage_gb": min_storage_gb, - "total_gb_hours": total_gb_hours, "measurement_count": measurement_count, } ) @@ -69,8 +64,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: min_storage_gb = d.pop("min_storage_gb") - total_gb_hours = d.pop("total_gb_hours") - measurement_count = d.pop("measurement_count") storage_summary = cls( @@ -78,7 +71,6 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: avg_storage_gb=avg_storage_gb, max_storage_gb=max_storage_gb, min_storage_gb=min_storage_gb, - total_gb_hours=total_gb_hours, measurement_count=measurement_count, )