diff --git a/libervia/backend/__init__.py b/libervia/backend/__init__.py index 45baecbe..9aaa7566 100644 --- a/libervia/backend/__init__.py +++ b/libervia/backend/__init__.py @@ -15,9 +15,36 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +from typing import TYPE_CHECKING from sat_tmp import wokkel __version__ = "0.9.0.dev0" if not wokkel.installed: wokkel.install() + +if TYPE_CHECKING: + from libervia.backend.core.main import LiberviaBackend + from libervia.backend.memory.sqla import Storage + + +class Global: + + def __init__(self): + self._host: "LiberviaBackend|None" = None + + def set_host(self, host: "LiberviaBackend") -> None: + """This method set the backend, and must be called once.""" + assert self._host is None + self._host = host + + @property + def host(self) -> "LiberviaBackend": + assert self._host is not None + return self._host + + @property + def storage(self) -> "Storage": + return self.host.memory.storage + +G = Global() diff --git a/libervia/backend/core/main.py b/libervia/backend/core/main.py index 5175696f..0bb3d048 100644 --- a/libervia/backend/core/main.py +++ b/libervia/backend/core/main.py @@ -36,6 +36,7 @@ from twisted.internet import defer from twisted.words.protocols.jabber import jid from twisted.internet import reactor from wokkel.xmppim import RosterItem +from libervia.backend import G from libervia.backend.core import xmpp from libervia.backend.core import exceptions from libervia.backend.core.core_types import SatXMPPEntity @@ -65,6 +66,7 @@ class LiberviaBackend(service.Service): # we don't use __init__ to avoid doule initialisation with twistd # this _init is called in startService log.info(f"{C.APP_NAME} {self.full_version}") + G.set_host(self) self._cb_map = {} # map from callback_id to callbacks # dynamic menus. key: callback_id, value: menu data (dictionnary) self._menus = {}