Moving db error wrapping into heat session to avoid a nova import
This commit is contained in:
parent
ee56b0978e
commit
1029566561
|
@ -16,7 +16,6 @@
|
||||||
import sqlalchemy.interfaces
|
import sqlalchemy.interfaces
|
||||||
import sqlalchemy.orm
|
import sqlalchemy.orm
|
||||||
from sqlalchemy.exc import DisconnectionError
|
from sqlalchemy.exc import DisconnectionError
|
||||||
|
|
||||||
from heat.openstack.common import cfg
|
from heat.openstack.common import cfg
|
||||||
from heat.db import api as db_api
|
from heat.db import api as db_api
|
||||||
|
|
||||||
|
@ -24,6 +23,28 @@ _ENGINE = None
|
||||||
_MAKER = None
|
_MAKER = None
|
||||||
|
|
||||||
|
|
||||||
|
class Error(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class DBError(Error):
|
||||||
|
"""Wraps an implementation specific exception."""
|
||||||
|
def __init__(self, inner_exception=None):
|
||||||
|
self.inner_exception = inner_exception
|
||||||
|
super(DBError, self).__init__(str(inner_exception))
|
||||||
|
|
||||||
|
|
||||||
|
def _wrap_db_error(f):
|
||||||
|
def _wrap(*args, **kwargs):
|
||||||
|
try:
|
||||||
|
return f(*args, **kwargs)
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
raise InvalidUnicodeParameter()
|
||||||
|
except Exception, e:
|
||||||
|
LOG.exception(_('DB exception wrapped.'))
|
||||||
|
raise DBError(e)
|
||||||
|
_wrap.func_name = f.func_name
|
||||||
|
return _wrap
|
||||||
|
|
||||||
def get_session(autocommit=True, expire_on_commit=False):
|
def get_session(autocommit=True, expire_on_commit=False):
|
||||||
"""Return a SQLAlchemy session."""
|
"""Return a SQLAlchemy session."""
|
||||||
global _ENGINE, _MAKER
|
global _ENGINE, _MAKER
|
||||||
|
@ -31,8 +52,9 @@ def get_session(autocommit=True, expire_on_commit=False):
|
||||||
if _MAKER is None or _ENGINE is None:
|
if _MAKER is None or _ENGINE is None:
|
||||||
_ENGINE = get_engine()
|
_ENGINE = get_engine()
|
||||||
_MAKER = get_maker(_ENGINE, autocommit, expire_on_commit)
|
_MAKER = get_maker(_ENGINE, autocommit, expire_on_commit)
|
||||||
|
|
||||||
session = _MAKER()
|
session = _MAKER()
|
||||||
|
session.query = _wrap_db_error(session.query)
|
||||||
|
session.flush = _wrap_db_error(session.flush)
|
||||||
return session
|
return session
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue