Refactor ArchiveBox onto abx-dl bus runner

This commit is contained in:
Nick Sweeting
2026-03-21 11:47:57 -07:00
parent ee9ed440d1
commit c87079aa0a
45 changed files with 1282 additions and 6396 deletions

View File

@@ -0,0 +1,64 @@
from __future__ import annotations
from asgiref.sync import sync_to_async
from abx_dl.events import BinaryEvent, BinaryInstalledEvent
from abx_dl.services.base import BaseService
class BinaryService(BaseService):
LISTENS_TO = [BinaryEvent, BinaryInstalledEvent]
EMITS = []
async def on_BinaryEvent(self, event: BinaryEvent) -> None:
await sync_to_async(self._project_binary, thread_sensitive=True)(event)
async def on_BinaryInstalledEvent(self, event: BinaryInstalledEvent) -> None:
await sync_to_async(self._project_installed_binary, thread_sensitive=True)(event)
def _project_binary(self, event: BinaryEvent) -> None:
from archivebox.machine.models import Binary, Machine
machine = Machine.current()
existing = Binary.objects.filter(machine=machine, name=event.name).first()
if existing and existing.status == Binary.StatusChoices.INSTALLED:
changed = False
if event.binproviders and existing.binproviders != event.binproviders:
existing.binproviders = event.binproviders
changed = True
if event.overrides and existing.overrides != event.overrides:
existing.overrides = event.overrides
changed = True
if changed:
existing.save(update_fields=["binproviders", "overrides", "modified_at"])
return
Binary.from_json(
{
"name": event.name,
"abspath": event.abspath,
"version": event.version,
"sha256": event.sha256,
"binproviders": event.binproviders,
"binprovider": event.binprovider,
"overrides": event.overrides or {},
},
)
def _project_installed_binary(self, event: BinaryInstalledEvent) -> None:
from archivebox.machine.models import Binary, Machine
machine = Machine.current()
binary, _ = Binary.objects.get_or_create(
machine=machine,
name=event.name,
defaults={
"status": Binary.StatusChoices.QUEUED,
},
)
binary.abspath = event.abspath or binary.abspath
binary.version = event.version or binary.version
binary.sha256 = event.sha256 or binary.sha256
binary.binprovider = event.binprovider or binary.binprovider
binary.status = Binary.StatusChoices.INSTALLED
binary.retry_at = None
binary.save(update_fields=["abspath", "version", "sha256", "binprovider", "status", "retry_at", "modified_at"])