From 745f73ccf8289eada1506f772c7016c8c2e5c0fd Mon Sep 17 00:00:00 2001 From: harsh mahajan Date: Thu, 10 Sep 2026 17:51:20 +0530 Subject: [PATCH 1/2] fix(backups): accept pending lifecycle response values --- appwrite_console/models/backup_archive.py | 12 ++--- appwrite_console/models/backup_restoration.py | 14 +++--- test/services/test_backups.py | 49 ++++++++++++++----- 3 files changed, 51 insertions(+), 24 deletions(-) diff --git a/appwrite_console/models/backup_archive.py b/appwrite_console/models/backup_archive.py index 060ea93..4ad27dd 100644 --- a/appwrite_console/models/backup_archive.py +++ b/appwrite_console/models/backup_archive.py @@ -16,13 +16,13 @@ class BackupArchive(AppwriteModel): Archive creation time in ISO 8601 format. updatedat : str Archive update date in ISO 8601 format. - policyid : str + policyid : Optional[str] Archive policy ID. - size : float + size : Optional[float] Archive size in bytes. status : str The status of the archive creation. Possible values: pending, processing, uploading, completed, failed, skipped. - startedat : str + startedat : Optional[str] The backup start time. migrationid : str Migration ID. @@ -39,10 +39,10 @@ class BackupArchive(AppwriteModel): id: str = Field(..., alias='$id') createdat: str = Field(..., alias='$createdAt') updatedat: str = Field(..., alias='$updatedAt') - policyid: str = Field(..., alias='policyId') - size: float = Field(..., alias='size') + policyid: Optional[str] = Field(default=None, alias='policyId') + size: Optional[float] = Field(default=None, alias='size') status: str = Field(..., alias='status') - startedat: str = Field(..., alias='startedAt') + startedat: Optional[str] = Field(default=None, alias='startedAt') migrationid: str = Field(..., alias='migrationId') services: List[Any] = Field(..., alias='services') resources: List[Any] = Field(..., alias='resources') diff --git a/appwrite_console/models/backup_restoration.py b/appwrite_console/models/backup_restoration.py index c00fe71..203da24 100644 --- a/appwrite_console/models/backup_restoration.py +++ b/appwrite_console/models/backup_restoration.py @@ -18,11 +18,11 @@ class BackupRestoration(AppwriteModel): Restoration update date in ISO 8601 format. archiveid : str Backup archive ID. - policyid : str + policyid : Optional[str] Backup policy ID. status : str The status of the restoration. Possible values: pending, downloading, processing, completed, failed. - startedat : str + startedat : Optional[str] The backup start time. migrationid : str Migration ID. @@ -30,18 +30,18 @@ class BackupRestoration(AppwriteModel): The services that are backed up by this policy. resources : List[Any] The resources that are backed up by this policy. - options : str - Optional data in key-value object. + options : Dict[str, Any] + Resource mappings used by the restoration. """ id: str = Field(..., alias='$id') createdat: str = Field(..., alias='$createdAt') updatedat: str = Field(..., alias='$updatedAt') archiveid: str = Field(..., alias='archiveId') - policyid: str = Field(..., alias='policyId') + policyid: Optional[str] = Field(default=None, alias='policyId') status: str = Field(..., alias='status') - startedat: str = Field(..., alias='startedAt') + startedat: Optional[str] = Field(default=None, alias='startedAt') migrationid: str = Field(..., alias='migrationId') services: List[Any] = Field(..., alias='services') resources: List[Any] = Field(..., alias='resources') - options: str = Field(..., alias='options') + options: Dict[str, Any] = Field(..., alias='options') diff --git a/test/services/test_backups.py b/test/services/test_backups.py index eaf082a..30ec55e 100644 --- a/test/services/test_backups.py +++ b/test/services/test_backups.py @@ -36,10 +36,10 @@ def test_create_archive(self, m): "$id": "5e5ea5c16897e", "$createdAt": "2020-10-15T06:38:00.000+00:00", "$updatedAt": "2020-10-15T06:38:00.000+00:00", - "policyId": "did8jx6ws45jana098ab7", - "size": 100000.0, - "status": "completed", - "startedAt": "2020-10-15T06:38:00.000+00:00", + "policyId": None, + "size": None, + "status": "pending", + "startedAt": None, "migrationId": "did8jx6ws45jana098ab7", "services": [], "resources": [], @@ -216,13 +216,13 @@ def test_create_restoration(self, m): "$createdAt": "2020-10-15T06:38:00.000+00:00", "$updatedAt": "2020-10-15T06:38:00.000+00:00", "archiveId": "did8jx6ws45jana098ab7", - "policyId": "did8jx6ws45jana098ab7", - "status": "completed", - "startedAt": "2020-10-15T06:38:00.000+00:00", + "policyId": None, + "status": "pending", + "startedAt": None, "migrationId": "did8jx6ws45jana098ab7", "services": [], "resources": [], - "options": "{databases.database[{oldId, newId, newName}]}", + "options": {"tablesdb": {"database": [{"oldId": "source", "newId": "restored"}]}}, } headers = {'Content-Type': 'application/json'} m.request( @@ -240,8 +240,35 @@ def test_create_restoration(self, m): @requests_mock.Mocker() def test_list_restorations(self, m): data = { - "total": 5.0, - "restorations": [], + "total": 2, + "restorations": [ + { + "$id": "pending-restoration", + "$createdAt": "2026-09-10T08:00:00.000+00:00", + "$updatedAt": "2026-09-10T08:00:00.000+00:00", + "archiveId": "archive", + "policyId": "", + "status": "pending", + "startedAt": None, + "migrationId": "migration-pending", + "services": ["databases"], + "resources": ["database"], + "options": {}, + }, + { + "$id": "completed-restoration", + "$createdAt": "2026-09-10T08:00:00.000+00:00", + "$updatedAt": "2026-09-10T09:00:00.000+00:00", + "archiveId": "archive", + "policyId": "", + "status": "completed", + "startedAt": "2026-09-10T08:30:00.000+00:00", + "migrationId": "migration-completed", + "services": ["databases"], + "resources": ["database"], + "options": {"tablesdb": {"database": [{"oldId": "source", "newId": "restored"}]}}, + }, + ], } headers = {'Content-Type': 'application/json'} m.request( @@ -266,7 +293,7 @@ def test_get_restoration(self, m): "migrationId": "did8jx6ws45jana098ab7", "services": [], "resources": [], - "options": "{databases.database[{oldId, newId, newName}]}", + "options": {"tablesdb": {"database": [{"oldId": "source", "newId": "restored"}]}}, } headers = {'Content-Type': 'application/json'} m.request( From 4d726ca945568e7d821f61e335069ed47fbd791b Mon Sep 17 00:00:00 2001 From: harsh mahajan Date: Fri, 11 Sep 2026 11:38:42 +0530 Subject: [PATCH 2/2] fix(backups): preserve string policy IDs in response models --- appwrite_console/models/backup_archive.py | 4 ++-- appwrite_console/models/backup_restoration.py | 4 ++-- test/services/test_backups.py | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/appwrite_console/models/backup_archive.py b/appwrite_console/models/backup_archive.py index 4ad27dd..1411817 100644 --- a/appwrite_console/models/backup_archive.py +++ b/appwrite_console/models/backup_archive.py @@ -16,7 +16,7 @@ class BackupArchive(AppwriteModel): Archive creation time in ISO 8601 format. updatedat : str Archive update date in ISO 8601 format. - policyid : Optional[str] + policyid : str Archive policy ID. size : Optional[float] Archive size in bytes. @@ -39,7 +39,7 @@ class BackupArchive(AppwriteModel): id: str = Field(..., alias='$id') createdat: str = Field(..., alias='$createdAt') updatedat: str = Field(..., alias='$updatedAt') - policyid: Optional[str] = Field(default=None, alias='policyId') + policyid: str = Field(..., alias='policyId') size: Optional[float] = Field(default=None, alias='size') status: str = Field(..., alias='status') startedat: Optional[str] = Field(default=None, alias='startedAt') diff --git a/appwrite_console/models/backup_restoration.py b/appwrite_console/models/backup_restoration.py index 203da24..750c27a 100644 --- a/appwrite_console/models/backup_restoration.py +++ b/appwrite_console/models/backup_restoration.py @@ -18,7 +18,7 @@ class BackupRestoration(AppwriteModel): Restoration update date in ISO 8601 format. archiveid : str Backup archive ID. - policyid : Optional[str] + policyid : str Backup policy ID. status : str The status of the restoration. Possible values: pending, downloading, processing, completed, failed. @@ -38,7 +38,7 @@ class BackupRestoration(AppwriteModel): createdat: str = Field(..., alias='$createdAt') updatedat: str = Field(..., alias='$updatedAt') archiveid: str = Field(..., alias='archiveId') - policyid: Optional[str] = Field(default=None, alias='policyId') + policyid: str = Field(..., alias='policyId') status: str = Field(..., alias='status') startedat: Optional[str] = Field(default=None, alias='startedAt') migrationid: str = Field(..., alias='migrationId') diff --git a/test/services/test_backups.py b/test/services/test_backups.py index 30ec55e..374d130 100644 --- a/test/services/test_backups.py +++ b/test/services/test_backups.py @@ -36,7 +36,7 @@ def test_create_archive(self, m): "$id": "5e5ea5c16897e", "$createdAt": "2020-10-15T06:38:00.000+00:00", "$updatedAt": "2020-10-15T06:38:00.000+00:00", - "policyId": None, + "policyId": "", "size": None, "status": "pending", "startedAt": None, @@ -62,7 +62,7 @@ def test_get_archive(self, m): "$id": "5e5ea5c16897e", "$createdAt": "2020-10-15T06:38:00.000+00:00", "$updatedAt": "2020-10-15T06:38:00.000+00:00", - "policyId": "did8jx6ws45jana098ab7", + "policyId": "", "size": 100000.0, "status": "completed", "startedAt": "2020-10-15T06:38:00.000+00:00", @@ -216,7 +216,7 @@ def test_create_restoration(self, m): "$createdAt": "2020-10-15T06:38:00.000+00:00", "$updatedAt": "2020-10-15T06:38:00.000+00:00", "archiveId": "did8jx6ws45jana098ab7", - "policyId": None, + "policyId": "", "status": "pending", "startedAt": None, "migrationId": "did8jx6ws45jana098ab7",