Skip to content

Commit

Permalink
Revert "Make WS command backup/generate send events" (#131530)
Browse files Browse the repository at this point in the history
Revert "Make WS command backup/generate send events (#130524)"

This reverts commit 093b16c.
  • Loading branch information
emontnemery authored Nov 25, 2024
1 parent 2bf7518 commit 9b8316d
Show file tree
Hide file tree
Showing 7 changed files with 86 additions and 200 deletions.
4 changes: 1 addition & 3 deletions homeassistant/components/backup/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:

async def async_handle_create_service(call: ServiceCall) -> None:
"""Service handler for creating backups."""
await backup_manager.async_create_backup(on_progress=None)
if backup_task := backup_manager.backup_task:
await backup_task
await backup_manager.async_create_backup()

hass.services.async_register(DOMAIN, "create", async_handle_create_service)

Expand Down
62 changes: 9 additions & 53 deletions homeassistant/components/backup/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

import abc
import asyncio
from collections.abc import Callable
from dataclasses import asdict, dataclass
import hashlib
import io
Expand Down Expand Up @@ -35,13 +34,6 @@
BUF_SIZE = 2**20 * 4 # 4MB


@dataclass(slots=True)
class NewBackup:
"""New backup class."""

slug: str


@dataclass(slots=True)
class Backup:
"""Backup class."""
Expand All @@ -57,15 +49,6 @@ def as_dict(self) -> dict:
return {**asdict(self), "path": self.path.as_posix()}


@dataclass(slots=True)
class BackupProgress:
"""Backup progress class."""

done: bool
stage: str | None
success: bool | None


class BackupPlatformProtocol(Protocol):
"""Define the format that backup platforms can have."""

Expand All @@ -82,7 +65,7 @@ class BaseBackupManager(abc.ABC):
def __init__(self, hass: HomeAssistant) -> None:
"""Initialize the backup manager."""
self.hass = hass
self.backup_task: asyncio.Task | None = None
self.backing_up = False
self.backups: dict[str, Backup] = {}
self.loaded_platforms = False
self.platforms: dict[str, BackupPlatformProtocol] = {}
Expand Down Expand Up @@ -150,12 +133,7 @@ async def async_restore_backup(self, slug: str, **kwargs: Any) -> None:
"""Restore a backup."""

@abc.abstractmethod
async def async_create_backup(
self,
*,
on_progress: Callable[[BackupProgress], None] | None,
**kwargs: Any,
) -> NewBackup:
async def async_create_backup(self, **kwargs: Any) -> Backup:
"""Generate a backup."""

@abc.abstractmethod
Expand Down Expand Up @@ -314,36 +292,17 @@ def _move_and_cleanup() -> None:
await self.hass.async_add_executor_job(_move_and_cleanup)
await self.load_backups()

async def async_create_backup(
self,
*,
on_progress: Callable[[BackupProgress], None] | None,
**kwargs: Any,
) -> NewBackup:
async def async_create_backup(self, **kwargs: Any) -> Backup:
"""Generate a backup."""
if self.backup_task:
if self.backing_up:
raise HomeAssistantError("Backup already in progress")
backup_name = f"Core {HAVERSION}"
date_str = dt_util.now().isoformat()
slug = _generate_slug(date_str, backup_name)
self.backup_task = self.hass.async_create_task(
self._async_create_backup(backup_name, date_str, slug, on_progress),
name="backup_manager_create_backup",
eager_start=False, # To ensure the task is not started before we return
)
return NewBackup(slug=slug)

async def _async_create_backup(
self,
backup_name: str,
date_str: str,
slug: str,
on_progress: Callable[[BackupProgress], None] | None,
) -> Backup:
"""Generate a backup."""
success = False
try:
self.backing_up = True
await self.async_pre_backup_actions()
backup_name = f"Core {HAVERSION}"
date_str = dt_util.now().isoformat()
slug = _generate_slug(date_str, backup_name)

backup_data = {
"slug": slug,
Expand All @@ -370,12 +329,9 @@ async def _async_create_backup(
if self.loaded_backups:
self.backups[slug] = backup
LOGGER.debug("Generated new backup with slug %s", slug)
success = True
return backup
finally:
if on_progress:
on_progress(BackupProgress(done=True, stage=None, success=success))
self.backup_task = None
self.backing_up = False
await self.async_post_backup_actions()

def _mkdir_and_generate_backup_contents(
Expand Down
11 changes: 4 additions & 7 deletions homeassistant/components/backup/websocket.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
from homeassistant.core import HomeAssistant, callback

from .const import DATA_MANAGER, LOGGER
from .manager import BackupProgress


@callback
Expand Down Expand Up @@ -41,7 +40,7 @@ async def handle_info(
msg["id"],
{
"backups": list(backups.values()),
"backing_up": manager.backup_task is not None,
"backing_up": manager.backing_up,
},
)

Expand Down Expand Up @@ -114,11 +113,7 @@ async def handle_create(
msg: dict[str, Any],
) -> None:
"""Generate a backup."""

def on_progress(progress: BackupProgress) -> None:
connection.send_message(websocket_api.event_message(msg["id"], progress))

backup = await hass.data[DATA_MANAGER].async_create_backup(on_progress=on_progress)
backup = await hass.data[DATA_MANAGER].async_create_backup()
connection.send_result(msg["id"], backup)


Expand All @@ -132,6 +127,7 @@ async def handle_backup_start(
) -> None:
"""Backup start notification."""
manager = hass.data[DATA_MANAGER]
manager.backing_up = True
LOGGER.debug("Backup start notification")

try:
Expand All @@ -153,6 +149,7 @@ async def handle_backup_end(
) -> None:
"""Backup end notification."""
manager = hass.data[DATA_MANAGER]
manager.backing_up = False
LOGGER.debug("Backup end notification")

try:
Expand Down
73 changes: 0 additions & 73 deletions tests/components/backup/conftest.py

This file was deleted.

17 changes: 5 additions & 12 deletions tests/components/backup/snapshots/test_websocket.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -210,23 +210,16 @@
dict({
'id': 1,
'result': dict({
'slug': '27f5c632',
'date': '1970-01-01T00:00:00.000Z',
'name': 'Test',
'path': 'abc123.tar',
'size': 0.0,
'slug': 'abc123',
}),
'success': True,
'type': 'result',
})
# ---
# name: test_generate[without_hassio].1
dict({
'event': dict({
'done': True,
'stage': None,
'success': True,
}),
'id': 1,
'type': 'event',
})
# ---
# name: test_info[with_hassio]
dict({
'error': dict({
Expand Down
Loading

0 comments on commit 9b8316d

Please sign in to comment.