Групповое удаление бэкапов, поддержка CHR, строгое сравнение версий ROS
Групповое удаление бэкапов (docs/changes/013): - страница «Резервные копии»: чекбоксы, «выбрать все», панель «Выбрано: N / Удалить / Снять выбор» вместо фильтров, подтверждение, итог удаления; - backups.delete_many: все ключи проверяются до удаления, удаление параллельное; UI POST /backups/delete-many, API POST /api/v1/backups/delete; - выбор строк в app.js обобщён (data-select) для устройств и бэкапов. Поддержка CHR (docs/changes/014): - у CHR нет /system/routerboard (HTTP 400): устройство больше не считается недоступным, версия FW не показывается, обновление FW пропускается; - «есть обновление ROS» определяется строгим сравнением версий (на канале long-term последняя версия может быть старше установленной); - в таблице указана причина недоступности: авторизация / ошибка ответа / нет соединения. Тесты: 11 из 11. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4c1841b61b
commit
0914209bf8
16 files changed
+194
-20
No files matched your search
@@ -239,6 +239,17 @@ async def download_backup(key: str):
|
||||
return RedirectResponse(s3.presign_get(key))
|
||||
|
||||
|
||||
class KeysIn(BaseModel):
|
||||
keys: list[str] = Field(min_length=1)
|
||||
|
||||
|
||||
@router.post("/backups/delete")
|
||||
async def delete_backups(body: KeysIn):
|
||||
"""Групповое удаление файлов из бакета: {"keys": [...]}."""
|
||||
deleted, failed = await backups.delete_many(body.keys)
|
||||
return {"deleted": deleted, "failed": failed}
|
||||
|
||||
|
||||
@router.delete("/backups", status_code=204)
|
||||
async def delete_backup(key: str):
|
||||
if not s3.key_allowed(key):
|
||||
|
||||
Reference in new issue
Block a user