Skip to content

Commit

Permalink
fix: sqlalchemy server version info without request
Browse files Browse the repository at this point in the history
  • Loading branch information
ovsds committed Dec 1, 2023
1 parent 5836008 commit 1a94a54
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
11 changes: 11 additions & 0 deletions lib/dl_sqlalchemy_postgres/dl_sqlalchemy_postgres/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,17 @@ def __init__(self, enforce_collate=None, **kwargs):
type_compiler = BICustomPGTypeCompiler
statement_compiler = BIPGCompilerBasic
ischema_names = bi_pg_ischema_names
forced_server_version_string: str | None = None

def connect(self, *cargs, **cparams):
self.forced_server_version_string = cparams.pop("server_version", self.forced_server_version_string)
return super().connect(*cargs, **cparams)

def _get_server_version_info(self, connection) -> tuple[int, ...]:
if self.forced_server_version_string is not None:
return tuple(int(part) for part in self.forced_server_version_string.split("."))

return super()._get_server_version_info(connection)


class BIPGDialect(BIPGDialectBasic):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import sqlalchemy
import sqlalchemy.orm as sqlalchemy_orm


SERVER_VERSION_INFO = (123, 45, 67, 89)
SERVER_VERSION = ".".join(map(str, SERVER_VERSION_INFO))


def test_server_version(engine_url: str):
engine = sqlalchemy.create_engine(engine_url, connect_args=dict(server_version=SERVER_VERSION))
session_maker = sqlalchemy_orm.sessionmaker(bind=engine)
engine_session = session_maker()
# Connection and version get initialized on first query:
engine_session.scalar("select 1")
ver = engine_session.get_bind().dialect.server_version_info
assert ver == SERVER_VERSION_INFO

0 comments on commit 1a94a54

Please sign in to comment.