import logging import uuid from typing import Annotated, List from injectable import injectable, autowired, Autowired from typing_extensions import deprecated from app.core.queue import EnqueuedProcessor, ProcessQueue, Task, Result from app.model.healthcheck import HealthCheck from app.model.webhook import WebhookEvent from app.services import DockerService, GitService, Passwords logger = logging.getLogger(__name__) @deprecated("Use event bus instead.") @injectable(singleton=True) class WebhookProcessor: @autowired def __init__(self, docker: Annotated[DockerService, Autowired], git: Annotated[GitService, Autowired], keepass: Annotated[Passwords, Autowired]): self._docker = docker self._git = git self._keepass = keepass def enqueue(self, event: WebhookEvent): pass def _process(self, task: Task[WebhookEvent]) -> Result: event: WebhookEvent = task.payload # TODO: persist event data commit_hash = self._git.get_new_commit_hash() if commit_hash != event.commit: logger.warning(f"Commit hash mismatch: {commit_hash} != {event.commit}") return Result(task.id, False, "Commit hash mismatch") # TODO: persist commit data service = self._get_service(event.files) return Result(task.id, True) def _get_service(self, files: List[str]) -> str: pass @property def health(self) -> HealthCheck: return HealthCheck( self._docker is not None and self._git is not None and self._keepass is not None, f"Docker: {self._docker is not None}, Git: {self._git is not None}, KeePass: {self._keepass is not None}" )