changeset 4362:d34b17bce612

core: Add a "Global" variable with a `LiberviaBackend` singleton to `libervia.backend`.
author Goffi <goffi@goffi.org>
date Tue, 06 May 2025 00:16:15 +0200
parents 676a320415b9
children 4da560a8aed3
files libervia/backend/__init__.py libervia/backend/core/main.py
diffstat 2 files changed, 29 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libervia/backend/__init__.py	Fri Apr 11 21:49:46 2025 +0200
+++ b/libervia/backend/__init__.py	Tue May 06 00:16:15 2025 +0200
@@ -15,9 +15,36 @@
 
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
+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()
--- a/libervia/backend/core/main.py	Fri Apr 11 21:49:46 2025 +0200
+++ b/libervia/backend/core/main.py	Tue May 06 00:16:15 2025 +0200
@@ -36,6 +36,7 @@
 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 @@
         # 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 = {}