]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
DB connection errors wrapped in DBAPIErrors
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 13 Jul 2006 21:05:52 +0000 (21:05 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 13 Jul 2006 21:05:52 +0000 (21:05 +0000)
CHANGES
lib/sqlalchemy/engine/default.py
lib/sqlalchemy/exceptions.py

diff --git a/CHANGES b/CHANGES
index d080ad9eaba1633d2400cb03500ddb0ae2714c8d..0efe992629ddea46409acc406dd544c0fff578d0 100644 (file)
--- 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
index bf023e3192f20b6082a25185170f02e528bee96b..f0ffd7797e2f10d4b6712d874d5d39fb631e7cf1 100644 (file)
@@ -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)
index 6aeca3efc4e2244c17dd16d0e0b52fc2c991e783..c803a06c3a5dcf0d0eedf8282f19df0ef7a647ad 100644 (file)
@@ -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