From e1d839237f7ce38ef078b7f09cc3a1aeaacc02f0 Mon Sep 17 00:00:00 2001 From: Michael Manfre Date: Sun, 2 Feb 2014 16:38:28 -0500 Subject: [PATCH] Make mysql's CursorWrapper a contextmanager. --- django/db/backends/mysql/base.py | 10 +++++++++- tests/requests/tests.py | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py index 9d3935dc54..b752f4738f 100644 --- a/django/db/backends/mysql/base.py +++ b/django/db/backends/mysql/base.py @@ -152,6 +152,14 @@ class CursorWrapper(object): def __iter__(self): return iter(self.cursor) + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + # Ticket #17671 - Close instead of passing thru to avoid backend + # specific behavior. + self.close() + class DatabaseFeatures(BaseDatabaseFeatures): empty_fetchmany_value = () @@ -461,7 +469,7 @@ class DatabaseWrapper(BaseDatabaseWrapper): return conn def init_connection_state(self): - with self.connection.cursor() as cursor: + with self.cursor() as cursor: # SQL_AUTO_IS_NULL in MySQL controls whether an AUTO_INCREMENT column # on a recently-inserted row will return when the field is tested for # NULL. Disabling this value brings this aspect of MySQL in line with diff --git a/tests/requests/tests.py b/tests/requests/tests.py index 3e594376aa..175554e871 100644 --- a/tests/requests/tests.py +++ b/tests/requests/tests.py @@ -725,7 +725,7 @@ class DatabaseConnectionHandlingTests(TransactionTestCase): # request_finished signal. response = self.client.get('/') # Make sure there is an open connection - self.connection.ensure_connection() + connection.ensure_connection() connection.enter_transaction_management() signals.request_finished.send(sender=response._handler_class) self.assertEqual(len(connection.transaction_state), 0)