From 070bf1081555cb7145ea8119f7a48563c7c68c69 Mon Sep 17 00:00:00 2001 From: Daniel Gaspar Date: Wed, 14 Apr 2021 17:52:05 +0100 Subject: [PATCH 1/2] fix: get_bind signature --- CHANGES.rst | 8 ++++++++ src/flask_sqlalchemy/__init__.py | 17 +++++++++++++++-- tests/test_sessions.py | 6 ++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 62aac495..51eb836b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -24,6 +24,14 @@ Unreleased ``db.session.commit()`` directly instead. :issue:`216` +Version 2.5.2 +------------- + +Unreleased + +- Fix session ``get_bind`` signature for SQLAlchemy 1.4. :issue:`953` + + Version 2.5.1 ------------- diff --git a/src/flask_sqlalchemy/__init__.py b/src/flask_sqlalchemy/__init__.py index 8c05c120..b965636a 100644 --- a/src/flask_sqlalchemy/__init__.py +++ b/src/flask_sqlalchemy/__init__.py @@ -172,7 +172,14 @@ def __init__(self, db, autocommit=False, autoflush=True, **options): **options, ) - def get_bind(self, mapper=None, **kwargs): + def get_bind( + self, + mapper=None, + clause=None, + bind=None, + _sa_skip_events=None, + _sa_skip_for_implicit_returning=False, + ): """Return the engine or connection for a given model or table, using the ``__bind_key__`` if it is set. """ @@ -191,7 +198,13 @@ def get_bind(self, mapper=None, **kwargs): state = get_state(self.app) return state.db.get_engine(self.app, bind=bind_key) - return super().get_bind(mapper, **kwargs) + return super().get_bind( + mapper=mapper, + clause=clause, + bind=bind, + _sa_skip_events=_sa_skip_events, + _sa_skip_for_implicit_returning=_sa_skip_for_implicit_returning, + ) class _SessionSignalEvents: diff --git a/tests/test_sessions.py b/tests/test_sessions.py index 5cb1468d..13a5a4db 100644 --- a/tests/test_sessions.py +++ b/tests/test_sessions.py @@ -1,6 +1,7 @@ import random import sqlalchemy as sa +from sqlalchemy.engine import Engine from sqlalchemy.orm import sessionmaker from flask_sqlalchemy import SQLAlchemy @@ -59,3 +60,8 @@ class QazWsx(db.Model): def test_listen_to_session_event(db): sa.event.listen(db.session, "after_commit", lambda session: None) + + +def test_session_get_bind(app, db): + with app.test_request_context(): + assert isinstance(db.session.get_bind(), Engine) From 2cc41413ff6c17c0fca4875921799ab359d512be Mon Sep 17 00:00:00 2001 From: Ash Berlin-Taylor Date: Thu, 15 Apr 2021 15:27:37 +0100 Subject: [PATCH 2/2] fixup! fix: get_bind signature --- src/flask_sqlalchemy/__init__.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/flask_sqlalchemy/__init__.py b/src/flask_sqlalchemy/__init__.py index b965636a..27471347 100644 --- a/src/flask_sqlalchemy/__init__.py +++ b/src/flask_sqlalchemy/__init__.py @@ -175,10 +175,8 @@ def __init__(self, db, autocommit=False, autoflush=True, **options): def get_bind( self, mapper=None, - clause=None, - bind=None, - _sa_skip_events=None, - _sa_skip_for_implicit_returning=False, + *args, + **kwargs, ): """Return the engine or connection for a given model or table, using the ``__bind_key__`` if it is set. @@ -199,11 +197,9 @@ def get_bind( return state.db.get_engine(self.app, bind=bind_key) return super().get_bind( - mapper=mapper, - clause=clause, - bind=bind, - _sa_skip_events=_sa_skip_events, - _sa_skip_for_implicit_returning=_sa_skip_for_implicit_returning, + mapper, + *args, + **kwargs, )