Author: russellm
Date: 2010-08-30 08:21:18 -0500 (Mon, 30 Aug 2010)
New Revision: 13672

Modified:
   django/trunk/django/contrib/gis/db/backends/spatialite/base.py
   django/trunk/django/db/backends/mysql/base.py
   django/trunk/django/db/backends/oracle/base.py
   django/trunk/django/db/backends/postgresql/base.py
   django/trunk/django/db/backends/postgresql_psycopg2/base.py
   django/trunk/django/db/backends/signals.py
   django/trunk/django/db/backends/sqlite3/base.py
   django/trunk/tests/regressiontests/backends/tests.py
Log:
Fixed #13798 -- Added connection argument to the connection_created signal. 
Thanks to liangent for the report, and Alex Gaynor for the patch.

Modified: django/trunk/django/contrib/gis/db/backends/spatialite/base.py
===================================================================
--- django/trunk/django/contrib/gis/db/backends/spatialite/base.py      
2010-08-30 12:33:45 UTC (rev 13671)
+++ django/trunk/django/contrib/gis/db/backends/spatialite/base.py      
2010-08-30 13:21:18 UTC (rev 13672)
@@ -51,7 +51,7 @@
             self.connection.create_function("django_extract", 2, 
_sqlite_extract)
             self.connection.create_function("django_date_trunc", 2, 
_sqlite_date_trunc)
             self.connection.create_function("regexp", 2, _sqlite_regexp)
-            connection_created.send(sender=self.__class__)
+            connection_created.send(sender=self.__class__, connection=self)
 
             ## From here on, customized for GeoDjango ##
 

Modified: django/trunk/django/db/backends/mysql/base.py
===================================================================
--- django/trunk/django/db/backends/mysql/base.py       2010-08-30 12:33:45 UTC 
(rev 13671)
+++ django/trunk/django/db/backends/mysql/base.py       2010-08-30 13:21:18 UTC 
(rev 13672)
@@ -297,7 +297,7 @@
             self.connection = Database.connect(**kwargs)
             self.connection.encoders[SafeUnicode] = 
self.connection.encoders[unicode]
             self.connection.encoders[SafeString] = 
self.connection.encoders[str]
-            connection_created.send(sender=self.__class__)
+            connection_created.send(sender=self.__class__, connection=self)
         cursor = CursorWrapper(self.connection.cursor())
         return cursor
 

Modified: django/trunk/django/db/backends/oracle/base.py
===================================================================
--- django/trunk/django/db/backends/oracle/base.py      2010-08-30 12:33:45 UTC 
(rev 13671)
+++ django/trunk/django/db/backends/oracle/base.py      2010-08-30 13:21:18 UTC 
(rev 13672)
@@ -384,7 +384,7 @@
                 # Django docs specify cx_Oracle version 4.3.1 or higher, but
                 # stmtcachesize is available only in 4.3.2 and up.
                 pass
-            connection_created.send(sender=self.__class__)
+            connection_created.send(sender=self.__class__, connection=self)
         if not cursor:
             cursor = FormatStylePlaceholderCursor(self.connection)
         return cursor

Modified: django/trunk/django/db/backends/postgresql/base.py
===================================================================
--- django/trunk/django/db/backends/postgresql/base.py  2010-08-30 12:33:45 UTC 
(rev 13671)
+++ django/trunk/django/db/backends/postgresql/base.py  2010-08-30 13:21:18 UTC 
(rev 13672)
@@ -135,8 +135,9 @@
             if settings_dict['PORT']:
                 conn_string += " port=%s" % settings_dict['PORT']
             self.connection = Database.connect(conn_string, 
**settings_dict['OPTIONS'])
-            self.connection.set_isolation_level(1) # make transactions 
transparent to all cursors
-            connection_created.send(sender=self.__class__)
+            # make transactions transparent to all cursors
+            self.connection.set_isolation_level(1)
+            connection_created.send(sender=self.__class__, connection=self)
         cursor = self.connection.cursor()
         if new_connection:
             if set_tz:

Modified: django/trunk/django/db/backends/postgresql_psycopg2/base.py
===================================================================
--- django/trunk/django/db/backends/postgresql_psycopg2/base.py 2010-08-30 
12:33:45 UTC (rev 13671)
+++ django/trunk/django/db/backends/postgresql_psycopg2/base.py 2010-08-30 
13:21:18 UTC (rev 13672)
@@ -136,7 +136,7 @@
             self.connection = Database.connect(**conn_params)
             self.connection.set_client_encoding('UTF8')
             self.connection.set_isolation_level(self.isolation_level)
-            connection_created.send(sender=self.__class__)
+            connection_created.send(sender=self.__class__, connection=self)
         cursor = self.connection.cursor()
         cursor.tzinfo_factory = None
         if new_connection:

Modified: django/trunk/django/db/backends/signals.py
===================================================================
--- django/trunk/django/db/backends/signals.py  2010-08-30 12:33:45 UTC (rev 
13671)
+++ django/trunk/django/db/backends/signals.py  2010-08-30 13:21:18 UTC (rev 
13672)
@@ -1,3 +1,3 @@
 from django.dispatch import Signal
 
-connection_created = Signal()
+connection_created = Signal(providing_args=["connection"])

Modified: django/trunk/django/db/backends/sqlite3/base.py
===================================================================
--- django/trunk/django/db/backends/sqlite3/base.py     2010-08-30 12:33:45 UTC 
(rev 13671)
+++ django/trunk/django/db/backends/sqlite3/base.py     2010-08-30 13:21:18 UTC 
(rev 13672)
@@ -176,7 +176,7 @@
             self.connection.create_function("django_extract", 2, 
_sqlite_extract)
             self.connection.create_function("django_date_trunc", 2, 
_sqlite_date_trunc)
             self.connection.create_function("regexp", 2, _sqlite_regexp)
-            connection_created.send(sender=self.__class__)
+            connection_created.send(sender=self.__class__, connection=self)
         return self.connection.cursor(factory=SQLiteCursorWrapper)
 
     def close(self):

Modified: django/trunk/tests/regressiontests/backends/tests.py
===================================================================
--- django/trunk/tests/regressiontests/backends/tests.py        2010-08-30 
12:33:45 UTC (rev 13671)
+++ django/trunk/tests/regressiontests/backends/tests.py        2010-08-30 
13:21:18 UTC (rev 13672)
@@ -8,6 +8,7 @@
 from django.core.management.color import no_style
 from django.db import backend, connection, connections, DEFAULT_DB_ALIAS
 from django.db.backends.signals import connection_created
+from django.db.backends.postgresql import version as pg_version
 from django.test import TestCase
 
 from regressiontests.backends import models
@@ -154,46 +155,34 @@
         obj = models.Post.objects.create(name='New post', text='goodbye world')
         self.assertTrue(obj.pk > 10)
 
+class PostgresVersionTest(TestCase):
+    def assert_parses(self, version_string, version):
+        self.assertEqual(pg_version._parse_version(version_string), version)
 
-def connection_created_test(sender, **kwargs):
-    print 'connection_created signal'
+    def test_parsing(self):
+        self.assert_parses("PostgreSQL 8.3 beta4", (8, 3, None))
+        self.assert_parses("PostgreSQL 8.3", (8, 3, None))
+        self.assert_parses("EnterpriseDB 8.3", (8, 3, None))
+        self.assert_parses("PostgreSQL 8.3.6", (8, 3, 6))
+        self.assert_parses("PostgreSQL 8.4beta1", (8, 4, None))
+        self.assert_parses("PostgreSQL 8.3.1 on i386-apple-darwin9.2.2, 
compiled by GCC i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 
5478)", (8, 3, 1))
 
-__test__ = {'API_TESTS': """
-# Check Postgres version parsing
->>> from django.db.backends.postgresql import version as pg_version
-
->>> pg_version._parse_version("PostgreSQL 8.3.1 on i386-apple-darwin9.2.2, 
compiled by GCC i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 
5478)")
-(8, 3, 1)
-
->>> pg_version._parse_version("PostgreSQL 8.3.6")
-(8, 3, 6)
-
->>> pg_version._parse_version("PostgreSQL 8.3")
-(8, 3, None)
-
->>> pg_version._parse_version("EnterpriseDB 8.3")
-(8, 3, None)
-
->>> pg_version._parse_version("PostgreSQL 8.3 beta4")
-(8, 3, None)
-
->>> pg_version._parse_version("PostgreSQL 8.4beta1")
-(8, 4, None)
-
-"""}
-
 # Unfortunately with sqlite3 the in-memory test database cannot be
 # closed, and so it cannot be re-opened during testing, and so we
 # sadly disable this test for now.
-if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 
'django.db.backends.sqlite3':
-    __test__['API_TESTS'] += """
->>> connection_created.connect(connection_created_test)
->>> connection.close() # Ensure the connection is closed
->>> cursor = connection.cursor()
-connection_created signal
->>> connection_created.disconnect(connection_created_test)
->>> cursor = connection.cursor()
-"""
+if settings.DATABASES[DEFAULT_DB_ALIAS]["ENGINE"] != 
"django.db.backends.sqlite3":
+    class ConnectionCreatedSignalTest(TestCase):
+        def test_signal(self):
+            data = {}
+            def receiver(sender, connection, **kwargs):
+                data["connection"] = connection
 
-if __name__ == '__main__':
-    unittest.main()
+            connection_created.connect(receiver)
+            connection.close()
+            cursor = connection.cursor()
+            self.assertTrue(data["connection"] is connection)
+
+            connection_created.disconnect(receiver)
+            data.clear()
+            cursor = connection.cursor()
+            self.assertTrue(data == {})

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to