diff options
author | Boris Pavlovic <boris@pavlovic.me> | 2012-12-28 15:21:08 +0400 |
---|---|---|
committer | Boris Pavlovic <boris@pavlovic.me> | 2012-12-28 15:21:08 +0400 |
commit | 4d16f2d037acebc986d32a8f2437824dab071fc3 (patch) | |
tree | de242bb3fa2d982c91bd17760f62f0855a28377f | |
parent | ab135433464865f6612f4b543157d62c05d2fb13 (diff) | |
download | nova-4d16f2d037acebc986d32a8f2437824dab071fc3.tar.gz nova-4d16f2d037acebc986d32a8f2437824dab071fc3.tar.xz nova-4d16f2d037acebc986d32a8f2437824dab071fc3.zip |
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
-rw-r--r-- | nova/db/sqlalchemy/session.py | 20 | ||||
-rw-r--r-- | 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 |