core: Add a "Global" variable with a LiberviaBackend singleton to libervia.backend.

This commit is contained in:
Goffi 2025-05-06 00:16:15 +02:00
commit c008b65e63
2 changed files with 29 additions and 0 deletions

View file

@ -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()

View file

@ -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 = {}