From 7de295bf0d647ca81bb6a44328e43a2c0793ceb7 Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 3 Jun 2024 22:17:57 +0300 Subject: [PATCH 1/2] Change env name. --- moonstreamdb-v3/moonstreamdbv3/db.py | 20 ++++++++++++-------- moonstreamdb-v3/moonstreamdbv3/version.txt | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/moonstreamdb-v3/moonstreamdbv3/db.py b/moonstreamdb-v3/moonstreamdbv3/db.py index 1c983952..655bb525 100644 --- a/moonstreamdb-v3/moonstreamdbv3/db.py +++ b/moonstreamdb-v3/moonstreamdbv3/db.py @@ -14,13 +14,17 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) try: - MOONSTREAM_DB_URI = os.environ.get("MOONSTREAM_DB_URI") - if MOONSTREAM_DB_URI is None: - raise Warning("MOONSTREAM_DB_URI environment variable must be set") + MOONSTREAM_DB_V3_INDEXES_URI = os.environ.get("MOONSTREAM_DB_V3_INDEXES_URI") + if MOONSTREAM_DB_V3_INDEXES_URI is None: + raise Warning("MOONSTREAM_DB_V3_INDEXES_URI environment variable must be set") - MOONSTREAM_DB_URI_READ_ONLY = os.environ.get("MOONSTREAM_DB_URI_READ_ONLY") - if MOONSTREAM_DB_URI_READ_ONLY is None: - raise Warning("MOONSTREAM_DB_URI_READ_ONLY environment variable must be set") + MOONSTREAM_DB_V3_INDEXES_URI_READ_ONLY = os.environ.get( + "MOONSTREAM_DB_V3_INDEXES_URI_READ_ONLY" + ) + if MOONSTREAM_DB_V3_INDEXES_URI_READ_ONLY is None: + raise Warning( + "MOONSTREAM_DB_V3_INDEXES_URI_READ_ONLY environment variable must be set" + ) except ValueError as e: raise ValueError(e) except Warning: @@ -87,7 +91,7 @@ class DBEngine: class MoonstreamDBEngine(DBEngine): def __init__(self, schema: Optional[str] = None) -> None: - super().__init__(url=MOONSTREAM_DB_URI, schema=schema) + super().__init__(url=MOONSTREAM_DB_V3_INDEXES_URI, schema=schema) self._session_local = sessionmaker(bind=self.engine) @@ -118,7 +122,7 @@ class MoonstreamDBEngine(DBEngine): class MoonstreamDBEngineRO(DBEngine): def __init__(self, schema: Optional[str] = None) -> None: - super().__init__(url=MOONSTREAM_DB_URI_READ_ONLY, schema=schema) + super().__init__(url=MOONSTREAM_DB_V3_INDEXES_URI_READ_ONLY, schema=schema) @property def engine(self): diff --git a/moonstreamdb-v3/moonstreamdbv3/version.txt b/moonstreamdb-v3/moonstreamdbv3/version.txt index 5a5831ab..d169b2f2 100644 --- a/moonstreamdb-v3/moonstreamdbv3/version.txt +++ b/moonstreamdb-v3/moonstreamdbv3/version.txt @@ -1 +1 @@ -0.0.7 +0.0.8 From a7712e405ddf6632cb19435a6e4f84d340dea11f Mon Sep 17 00:00:00 2001 From: kompotkot Date: Mon, 3 Jun 2024 19:25:26 +0000 Subject: [PATCH 2/2] Usage of regular db v3 and indexes too --- moonstreamdb-v3/moonstreamdbv3/db.py | 78 +++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 2 deletions(-) diff --git a/moonstreamdb-v3/moonstreamdbv3/db.py b/moonstreamdb-v3/moonstreamdbv3/db.py index 655bb525..9322b15d 100644 --- a/moonstreamdb-v3/moonstreamdbv3/db.py +++ b/moonstreamdb-v3/moonstreamdbv3/db.py @@ -7,13 +7,21 @@ import os from contextlib import contextmanager from typing import Generator, Optional -from sqlalchemy import create_engine, Engine +from sqlalchemy import Engine, create_engine from sqlalchemy.orm import Session, sessionmaker logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) try: + MOONSTREAM_DB_V3_URI = os.environ.get("MOONSTREAM_DB_V3_URI") + if MOONSTREAM_DB_V3_URI is None: + raise Warning("MOONSTREAM_DB_V3_URI environment variable must be set") + + MOONSTREAM_DB_V3_URI_READ_ONLY = os.environ.get("MOONSTREAM_DB_V3_URI_READ_ONLY") + if MOONSTREAM_DB_V3_URI_READ_ONLY is None: + raise Warning("MOONSTREAM_DB_V3_URI_READ_ONLY environment variable must be set") + MOONSTREAM_DB_V3_INDEXES_URI = os.environ.get("MOONSTREAM_DB_V3_INDEXES_URI") if MOONSTREAM_DB_V3_INDEXES_URI is None: raise Warning("MOONSTREAM_DB_V3_INDEXES_URI environment variable must be set") @@ -91,7 +99,7 @@ class DBEngine: class MoonstreamDBEngine(DBEngine): def __init__(self, schema: Optional[str] = None) -> None: - super().__init__(url=MOONSTREAM_DB_V3_INDEXES_URI, schema=schema) + super().__init__(url=MOONSTREAM_DB_V3_URI, schema=schema) self._session_local = sessionmaker(bind=self.engine) @@ -121,6 +129,72 @@ class MoonstreamDBEngine(DBEngine): class MoonstreamDBEngineRO(DBEngine): + def __init__(self, schema: Optional[str] = None) -> None: + super().__init__(url=MOONSTREAM_DB_V3_URI_READ_ONLY, schema=schema) + + @property + def engine(self): + raise AttributeError( + "RO_engine should be used instead of engine for read-only access." + ) + + @property + def RO_engine(self) -> Engine: + return self._engine + + @property + def RO_session_local(self): + return self._session_local + + @property + def RO_yield_db_session_ctx(self): + return self._yield_db_session_ctx + + def yield_db_read_only_session(self) -> Generator[Session, None, None]: + """ + Yields read-only database connection (created using environment variables). + As per FastAPI docs: + https://fastapi.tiangolo.com/tutorial/sql-databases/#create-a-dependency + """ + session = self._session_local() + try: + yield session + finally: + session.close() + + +class MoonstreamDBIndexesEngine(DBEngine): + def __init__(self, schema: Optional[str] = None) -> None: + super().__init__(url=MOONSTREAM_DB_V3_INDEXES_URI, schema=schema) + + self._session_local = sessionmaker(bind=self.engine) + + self._yield_db_session_ctx = contextmanager(self.yield_db_session) + + @property + def session_local(self): + return self._session_local + + @property + def yield_db_session_ctx(self): + return self._yield_db_session_ctx + + def yield_db_session( + self, + ) -> Generator[Session, None, None]: + """ + Yields a database connection (created using environment variables). + As per FastAPI docs: + https://fastapi.tiangolo.com/tutorial/sql-databases/#create-a-dependency + """ + session = self._session_local() + try: + yield session + finally: + session.close() + + +class MoonstreamDBIndexesEngineRO(DBEngine): def __init__(self, schema: Optional[str] = None) -> None: super().__init__(url=MOONSTREAM_DB_V3_INDEXES_URI_READ_ONLY, schema=schema)