"""Backend - Send to internal process. Manage backend. """ import logging from typing import TYPE_CHECKING, Optional from wandb.sdk.interface.interface import InterfaceBase from wandb.sdk.wandb_settings import Settings if TYPE_CHECKING: from wandb.sdk.lib import service_connection logger = logging.getLogger("wandb") class Backend: interface: Optional[InterfaceBase] _settings: Settings _done: bool _service: Optional["service_connection.ServiceConnection"] def __init__( self, settings: Settings, service: Optional["service_connection.ServiceConnection"] = None, ) -> None: self._done = False self.interface = None self._settings = settings self._service = service def ensure_launched(self) -> None: """Launch backend worker if not running.""" assert self._settings.run_id assert self._service self.interface = self._service.make_interface( stream_id=self._settings.run_id, ) def server_status(self) -> None: """Report server status.""" def cleanup(self) -> None: # TODO: make _done atomic if self._done: return self._done = True if self.interface: self.interface.join()