From 4d16f2d037acebc986d32a8f2437824dab071fc3 Mon Sep 17 00:00:00 2001 From: Boris Pavlovic Date: Fri, 28 Dec 2012 15:21:08 +0400 Subject: Remove session.flush() and session.query() monkey patching Use custom Session class to avoid monkey patching of SqlAlchemy Session instance. blueprint db-session-cleanup Change-Id: I7d40c20e585782403556f3587141805c197bfa64 --- nova/db/sqlalchemy/session.py | 20 ++++++++++++-------- nova/virt/baremetal/db/sqlalchemy/session.py | 1 - 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/nova/db/sqlalchemy/session.py b/nova/db/sqlalchemy/session.py index b128ccc23..ae8fec32d 100644 --- a/nova/db/sqlalchemy/session.py +++ b/nova/db/sqlalchemy/session.py @@ -306,7 +306,6 @@ def get_session(autocommit=True, expire_on_commit=False): _MAKER = get_maker(engine, autocommit, expire_on_commit) session = _MAKER() - session = wrap_session(session) return session @@ -388,13 +387,6 @@ def wrap_db_error(f): return _wrap -def wrap_session(session): - """Return a session whose exceptions are wrapped.""" - session.query = wrap_db_error(session.query) - session.flush = wrap_db_error(session.flush) - return session - - def get_engine(): """Return a SQLAlchemy engine.""" global _ENGINE @@ -548,9 +540,21 @@ class Query(sqlalchemy.orm.query.Query): synchronize_session=synchronize_session) +class Session(sqlalchemy.orm.session.Session): + """Custom Session class to avoid SqlAlchemy Session monkey patching""" + @wrap_db_error + def query(self, *args, **kwargs): + return super(Session, self).query(*args, **kwargs) + + @wrap_db_error + def flush(self, *args, **kwargs): + return super(Session, self).flush(*args, **kwargs) + + def get_maker(engine, autocommit=True, expire_on_commit=False): """Return a SQLAlchemy sessionmaker using the given engine.""" return sqlalchemy.orm.sessionmaker(bind=engine, + class_=Session, autocommit=autocommit, expire_on_commit=expire_on_commit, query_cls=Query) diff --git a/nova/virt/baremetal/db/sqlalchemy/session.py b/nova/virt/baremetal/db/sqlalchemy/session.py index 3e562e32a..29d77c2a0 100644 --- a/nova/virt/baremetal/db/sqlalchemy/session.py +++ b/nova/virt/baremetal/db/sqlalchemy/session.py @@ -47,7 +47,6 @@ def get_session(autocommit=True, expire_on_commit=False): _MAKER = nova_session.get_maker(engine, autocommit, expire_on_commit) session = _MAKER() - session = nova_session.wrap_session(session) return session -- cgit