diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-07-13 21:05:52 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-07-13 21:05:52 +0000 |
commit | 3bf88a1741b75efc4ef331998b5f29fec4268e85 (patch) | |
tree | 0a4a1d100877e463647b778b21e0d95d15e45bbc | |
parent | 70469bf26092095590aa441f41f5bcde11968ffc (diff) | |
download | sqlalchemy-3bf88a1741b75efc4ef331998b5f29fec4268e85.tar.gz |
DB connection errors wrapped in DBAPIErrors
-rw-r--r-- | CHANGES | 1 | ||||
-rw-r--r-- | lib/sqlalchemy/engine/default.py | 7 | ||||
-rw-r--r-- | lib/sqlalchemy/exceptions.py | 4 |
3 files changed, 10 insertions, 2 deletions
@@ -11,6 +11,7 @@ activated when activemapper is imported - fixed up Boolean datatype - added count()/count_by() to list of methods proxied by assignmapper; this also adds them to activemapper +- connection exceptions wrapped in DBAPIError 0.2.5 - fixed endless loop bug in select_by(), if the traversal hit diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index bf023e319..f0ffd7797 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -24,7 +24,12 @@ class PoolConnectionProvider(base.ConnectionProvider): dbapi = dialect.dbapi() if dbapi is None: raise exceptions.InvalidRequestError("Cant get DBAPI module for dialect '%s'" % dialect) - self._pool = poolclass(lambda: dbapi.connect(*cargs, **cparams), **kwargs) + def connect(): + try: + return dbapi.connect(*cargs, **cparams) + except Exception, e: + raise exceptions.DBAPIError("Connection failed", e) + self._pool = poolclass(connect, **kwargs) else: if isinstance(pool, sqlalchemy.pool.DBProxy): self._pool = pool.get_pool(*cargs, **cparams) diff --git a/lib/sqlalchemy/exceptions.py b/lib/sqlalchemy/exceptions.py index 6aeca3efc..c803a06c3 100644 --- a/lib/sqlalchemy/exceptions.py +++ b/lib/sqlalchemy/exceptions.py @@ -49,4 +49,6 @@ class AssertionError(SQLAlchemyError): class DBAPIError(SQLAlchemyError): """something weird happened with a particular DBAPI version""" - pass + def __init__(self, message, orig): + SQLAlchemyError.__init__(self, "(%s) (%s) %s"% (message, orig.__class__.__name__, str(orig))) + self.orig = orig |