diff --git a/test/test_backup.py b/test/test_backup.py new file mode 100644 index 000000000..225588581 --- /dev/null +++ b/test/test_backup.py @@ -0,0 +1,41 @@ +from typing import Any, Dict + +import pytest + +from weaviate.backup.backup import BackupListReturn, BackupStatus + + +def _list_entry(**overrides: Any) -> Dict[str, Any]: + """A single item as Weaviate's ``GET /backups/{backend}`` returns it.""" + entry: Dict[str, Any] = { + "id": "my-backup", + "classes": ["Article"], + "status": "SUCCESS", + "startedAt": "2026-08-01T10:00:00.000Z", + "completedAt": "2026-08-01T10:05:00.000Z", + "size": 1.5, + } + entry.update(overrides) + return entry + + +def test_list_return_exposes_incremental_base_backup_id() -> None: + backup = BackupListReturn(**_list_entry(incremental_base_backup_id="base-backup")) + + assert backup.incremental_base_backup_id == "base-backup" + assert backup.backup_id == "my-backup" + assert backup.collections == ["Article"] + assert backup.status == BackupStatus.SUCCESS + + +@pytest.mark.parametrize( + "entry", + [ + pytest.param(_list_entry(), id="field_omitted"), + pytest.param(_list_entry(incremental_base_backup_id=None), id="field_null"), + ], +) +def test_list_return_defaults_incremental_base_backup_id_to_none(entry: Dict[str, Any]) -> None: + # The server omits the field for non-incremental backups, and only populates + # it for callers it has confirmed as root, so absent must not be an error. + assert BackupListReturn(**entry).incremental_base_backup_id is None diff --git a/weaviate/backup/backup.py b/weaviate/backup/backup.py index 2759f28ff..f00a4aed8 100644 --- a/weaviate/backup/backup.py +++ b/weaviate/backup/backup.py @@ -104,3 +104,6 @@ class BackupListReturn(BaseModel): started_at: Optional[datetime] = Field(alias="startedAt", default=None) completed_at: Optional[datetime] = Field(alias="completedAt", default=None) size: float = Field(default=0) + # None when the backup is not incremental, and also when the server omits the + # field: it is only returned to callers Weaviate has confirmed as root. + incremental_base_backup_id: Optional[str] = Field(default=None)