]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Converted mxODBC's raised Warning exceptions into normal Python warnings.
authorBrad Allen <bradallen137@gmail.com>
Thu, 11 Mar 2010 22:24:06 +0000 (16:24 -0600)
committerBrad Allen <bradallen137@gmail.com>
Thu, 11 Mar 2010 22:24:06 +0000 (16:24 -0600)
lib/sqlalchemy/connectors/mxodbc.py

index fd1a69ace395e5401a2002020c862087f8536358..47a5904b822f6eb6eb8c6ce453f8bf7466aa161f 100644 (file)
@@ -1,9 +1,11 @@
 
 import sys
 import re
+import warnings
 
 from sqlalchemy.connectors import Connector
 from mx.ODBC import InterfaceError
+from mx.ODBC.Error import Warning as MxOdbcWarning
 
 class MxODBCConnector(Connector):
     driver='mxodbc'
@@ -31,6 +33,8 @@ class MxODBCConnector(Connector):
         def connect(conn, rec):
             conn.stringformat = self.dbapi.MIXED_STRINGFORMAT
             conn.datetimeformat = self.dbapi.PYDATETIME_DATETIMEFORMAT
+            conn.errorhandler = error_handler
+            # Alternatives to experiment with:
             #conn.bindmethod = self.dbapi.BIND_USING_PYTHONTYPE
             #conn.bindmethod = self.dbapi.BIND_USING_SQLTYPE
 
@@ -90,3 +94,17 @@ class MxODBCConnector(Connector):
             cursor.execute(statement, tuple(parameters))
         except InterfaceError:
             cursor.executedirect(statement, tuple(parameters))
+
+            
+def error_handler(connection, cursor, errorclass, errorvalue):
+    """
+    Adjust mxODBC's raised Warnings to emit Python standard warnings.
+    """
+    if issubclass(errorclass, MxOdbcWarning):
+        errorclass.__bases__ = (Warning,)
+        warnings.warn(message=str(errorvalue),
+                  category=errorclass,
+                  stacklevel=2)
+    else:
+        raise errorclass, errorvalue
+