summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-07-13 21:05:52 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-07-13 21:05:52 +0000
commit3bf88a1741b75efc4ef331998b5f29fec4268e85 (patch)
tree0a4a1d100877e463647b778b21e0d95d15e45bbc
parent70469bf26092095590aa441f41f5bcde11968ffc (diff)
downloadsqlalchemy-3bf88a1741b75efc4ef331998b5f29fec4268e85.tar.gz
DB connection errors wrapped in DBAPIErrors
-rw-r--r--CHANGES1
-rw-r--r--lib/sqlalchemy/engine/default.py7
-rw-r--r--lib/sqlalchemy/exceptions.py4
3 files changed, 10 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index d080ad9ea..0efe99262 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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