Source code for cfxdb.realmstore._schema

##############################################################################
#
#                        Crossbar.io Database
#     Copyright (c) Crossbar.io Technologies GmbH. Licensed under MIT.
#
##############################################################################

from typing import Optional

import zlmdb
from cfxdb.realmstore._session import Sessions, IndexSessionsBySessionId
from cfxdb.realmstore._publication import Publications
from cfxdb.realmstore._event import Events


[docs]class RealmStore(object): """ Persistent realm store. """ __slots__ = ( '_db', '_sessions', '_idx_sessions_by_session_id', '_publications', '_events', ) def __init__(self, db): self._db = db self._sessions: Optional[Sessions] = None self._idx_sessions_by_session_id: Optional[IndexSessionsBySessionId] = None self._publications: Optional[Publications] = None self._events: Optional[Events] = None @property def db(self) -> zlmdb.Database: """ Database this schema is attached to. """ return self._db @property def sessions(self) -> Optional[Sessions]: """ Sessions persisted in this realm store. """ return self._sessions @property def idx_sessions_by_session_id(self) -> Optional[IndexSessionsBySessionId]: """ Index: (session, joined_at) -> app_session_oid """ return self._idx_sessions_by_session_id @property def publications(self) -> Optional[Publications]: """ Publications archive. """ return self._publications @property def events(self) -> Optional[Events]: """ Events archive. """ return self._events @staticmethod def attach(db: zlmdb.Database) -> 'RealmStore': schema = RealmStore(db) schema._sessions = db.attach_table(Sessions) assert schema._sessions is not None schema._idx_sessions_by_session_id = db.attach_table(IndexSessionsBySessionId) schema._sessions.attach_index('idx1', schema._idx_sessions_by_session_id, lambda session: (session.session, session.joined_at)) schema._publications = db.attach_table(Publications) schema._events = db.attach_table(Events) return schema