]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
improve exception vs. exit handling
authorndparker <ndparker@users.noreply.github.com>
Tue, 23 Sep 2014 21:28:11 +0000 (23:28 +0200)
committerndparker <ndparker@users.noreply.github.com>
Tue, 23 Sep 2014 21:28:11 +0000 (23:28 +0200)
lib/sqlalchemy/dialects/mssql/base.py
lib/sqlalchemy/dialects/mysql/base.py
lib/sqlalchemy/dialects/mysql/mysqlconnector.py
lib/sqlalchemy/engine/base.py
lib/sqlalchemy/orm/mapper.py
lib/sqlalchemy/orm/state.py
lib/sqlalchemy/pool.py
lib/sqlalchemy/sql/elements.py
lib/sqlalchemy/sql/schema.py
lib/sqlalchemy/testing/provision.py
lib/sqlalchemy/util/langhelpers.py

index ba3050ae5d9e7b6b2df209b5f8ab78acd59fe329..ade2d00cbc4a44467bfcfe93579c13473b680f5d 100644 (file)
@@ -846,6 +846,8 @@ class MSExecutionContext(default.DefaultExecutionContext):
                         "SET IDENTITY_INSERT %s OFF" %
                         self.dialect.identifier_preparer. format_table(
                             self.compiled.statement.table)))
+            except (SystemExit, KeyboardInterrupt):
+                raise
             except:
                 pass
 
index 7ccd59abb33cd3ec757e58c51388e211614a6b07..0994e24160c56a12cd6b3f9326220a4c10685d90 100644 (file)
@@ -2317,6 +2317,8 @@ class MySQLDialect(default.DefaultDialect):
         # basic operations via autocommit fail.
         try:
             dbapi_connection.commit()
+        except (SystemExit, KeyboardInterrupt):
+            raise
         except:
             if self.server_version_info < (3, 23, 15):
                 args = sys.exc_info()[1].args
@@ -2329,6 +2331,8 @@ class MySQLDialect(default.DefaultDialect):
 
         try:
             dbapi_connection.rollback()
+        except (SystemExit, KeyboardInterrupt):
+            raise
         except:
             if self.server_version_info < (3, 23, 15):
                 args = sys.exc_info()[1].args
index e51e80005f638f6ad903c8010785aa7815070330..afa61d85b1adb386e232ef8cb40e7b191954db0b 100644 (file)
@@ -103,6 +103,8 @@ class MySQLDialect_mysqlconnector(MySQLDialect):
                     'client_flags', ClientFlag.get_default())
                 client_flags |= ClientFlag.FOUND_ROWS
                 opts['client_flags'] = client_flags
+            except (SystemExit, KeyboardInterrupt):
+                raise
             except:
                 pass
         return [[], opts]
index d2cc8890fd4bd7b244ae5ec184bc8ccca02bbe57..b3460c240b40e3f9282caeb1111e6eb79003a6bf 100644 (file)
@@ -1135,6 +1135,8 @@ class Connection(Connectable):
                         per_fn = fn(ctx)
                         if per_fn is not None:
                             ctx.chained_exception = newraise = per_fn
+                    except (SystemExit, KeyboardInterrupt):
+                        raise
                     except Exception as _raised:
                         # handler raises an exception - stop processing
                         newraise = _raised
index a59a38a5b978778cfcde089a9db69e14acbb5c54..bd28975ddc224964b396ce603ebdbce4e941d22a 100644 (file)
@@ -2649,6 +2649,8 @@ def configure_mappers():
                         mapper._expire_memoizations()
                         mapper.dispatch.mapper_configured(
                             mapper, mapper.class_)
+                    except (SystemExit, KeyboardInterrupt):
+                        raise
                     except:
                         exc = sys.exc_info()[1]
                         if not hasattr(exc, '_configure_failed'):
index 3c12fda1a632661b7ce708ee156a616b521a4067..4756f17073ca5a0638db91826ed7c34bbad7ca95 100644 (file)
@@ -258,8 +258,8 @@ class InstanceState(interfaces.InspectionAttr):
         try:
             return manager.original_init(*mixed[1:], **kwargs)
         except:
-            manager.dispatch.init_failure(self, args, kwargs)
-            raise
+            with util.safe_reraise():
+                manager.dispatch.init_failure(self, args, kwargs)
 
     def get_history(self, key, passive):
         return self.manager[key].impl.get_history(self, self.dict, passive)
index bc9affe4a176a0d403a6cafe911137aa3758589c..0c162e98491fde7a7a643f42fc8edc019d480cd1 100644 (file)
@@ -441,8 +441,8 @@ class _ConnectionRecord(object):
         try:
             dbapi_connection = rec.get_connection()
         except:
-            rec.checkin()
-            raise
+            with util.safe_reraise():
+                rec.checkin()
         echo = pool._should_log_debug()
         fairy = _ConnectionFairy(dbapi_connection, rec, echo)
         rec.fairy_ref = weakref.ref(
@@ -962,8 +962,8 @@ class QueuePool(Pool):
                 try:
                     return self._create_connection()
                 except:
-                    self._dec_overflow()
-                    raise
+                    with util.safe_reraise():
+                        self._dec_overflow()
             else:
                 return self._do_get()
 
index 8ec0aa7002d74eaf2c21b6ffe9c1fda463c0a90f..8e18a22fe13be365d4adc2d4603487e2034cd4d3 100644 (file)
@@ -3491,6 +3491,8 @@ def _string_or_unprintable(element):
     else:
         try:
             return str(element)
+        except (SystemExit, KeyboardInterrupt):
+            raise
         except:
             return "unprintable element %r" % element
 
index d9fd37f922579f4e321c96e83b22ccec8785083c..9afc31be82574ed3ec39dedea48abea0a74c78d4 100644 (file)
@@ -412,8 +412,8 @@ class Table(DialectKWArgs, SchemaItem, TableClause):
                 table.dispatch.after_parent_attach(table, metadata)
                 return table
             except:
-                metadata._remove_table(name, schema)
-                raise
+                with util.safe_reraise():
+                    metadata._remove_table(name, schema)
 
     @property
     @util.deprecated('0.9', 'Use ``table.schema.quote``')
index 0bcdad9594df5ee5b7c10ded7f48109db3d167c5..64688d6b5189c20d9f56ef206d8a4b666bf24d4f 100644 (file)
@@ -120,6 +120,8 @@ def _pg_create_db(cfg, eng, ident):
             isolation_level="AUTOCOMMIT") as conn:
         try:
             _pg_drop_db(cfg, conn, ident)
+        except (SystemExit, KeyboardInterrupt):
+            raise
         except:
             pass
         currentdb = conn.scalar("select current_database()")
@@ -131,6 +133,8 @@ def _mysql_create_db(cfg, eng, ident):
     with eng.connect() as conn:
         try:
             _mysql_drop_db(cfg, conn, ident)
+        except (SystemExit, KeyboardInterrupt):
+            raise
         except:
             pass
         conn.execute("CREATE DATABASE %s" % ident)
@@ -173,14 +177,20 @@ def _mysql_drop_db(cfg, eng, ident):
     with eng.connect() as conn:
         try:
             conn.execute("DROP DATABASE %s_test_schema" % ident)
+        except (SystemExit, KeyboardInterrupt):
+            raise
         except:
             pass
         try:
             conn.execute("DROP DATABASE %s_test_schema_2" % ident)
+        except (SystemExit, KeyboardInterrupt):
+            raise
         except:
             pass
         try:
             conn.execute("DROP DATABASE %s" % ident)
+        except (SystemExit, KeyboardInterrupt):
+            raise
         except:
             pass
 
index 76f85f605fc819d0c7c2ab03acd2e187fcd55aa6..75c6e7b468bd3cb2c1a151a4a56c8a649a10f7fa 100644 (file)
@@ -490,6 +490,8 @@ def generic_repr(obj, additional_kw=(), to_inspect=None, omit_kwarg=()):
             val = getattr(obj, arg, missing)
             if val is not missing and val != defval:
                 output.append('%s=%r' % (arg, val))
+        except (SystemExit, KeyboardInterrupt):
+            raise
         except:
             pass
 
@@ -499,6 +501,8 @@ def generic_repr(obj, additional_kw=(), to_inspect=None, omit_kwarg=()):
                 val = getattr(obj, arg, missing)
                 if val is not missing and val != defval:
                     output.append('%s=%r' % (arg, val))
+            except (SystemExit, KeyboardInterrupt):
+                raise
             except:
                 pass
 
@@ -1185,6 +1189,8 @@ def warn_exception(func, *args, **kwargs):
     """
     try:
         return func(*args, **kwargs)
+    except (SystemExit, KeyboardInterrupt):
+        raise
     except:
         warn("%s('%s') ignored" % sys.exc_info()[0:2])