1 files changed, 22 insertions, 6 deletions
diff --git a/synapse/storage/databases/__init__.py b/synapse/storage/databases/__init__.py
index 20b755056b..cfe887b7f7 100644
--- a/synapse/storage/databases/__init__.py
+++ b/synapse/storage/databases/__init__.py
@@ -13,33 +13,49 @@
# limitations under the License.
import logging
+from typing import TYPE_CHECKING, Generic, List, Optional, Type, TypeVar
+from synapse.storage._base import SQLBaseStore
from synapse.storage.database import DatabasePool, make_conn
from synapse.storage.databases.main.events import PersistEventsStore
from synapse.storage.databases.state import StateGroupDataStore
from synapse.storage.engines import create_engine
from synapse.storage.prepare_database import prepare_database
+if TYPE_CHECKING:
+ from synapse.server import HomeServer
+
logger = logging.getLogger(__name__)
-class Databases:
+DataStoreT = TypeVar("DataStoreT", bound=SQLBaseStore, covariant=True)
+
+
+class Databases(Generic[DataStoreT]):
"""The various databases.
These are low level interfaces to physical databases.
Attributes:
- main (DataStore)
+ databases
+ main
+ state
+ persist_events
"""
- def __init__(self, main_store_class, hs):
+ databases: List[DatabasePool]
+ main: DataStoreT
+ state: StateGroupDataStore
+ persist_events: Optional[PersistEventsStore]
+
+ def __init__(self, main_store_class: Type[DataStoreT], hs: "HomeServer"):
# Note we pass in the main store class here as workers use a different main
# store.
self.databases = []
- main = None
- state = None
- persist_events = None
+ main: Optional[DataStoreT] = None
+ state: Optional[StateGroupDataStore] = None
+ persist_events: Optional[PersistEventsStore] = None
for database_config in hs.config.database.databases:
db_name = database_config.name
|