From da2c6959c8da20ff9e4ebc5e68e2be44930116cd Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Sat, 2 May 2015 22:26:27 +0200 Subject: [PATCH] Dropped the needs_datetime_string_cast feature. It has been superseded by the converter infrastructure. --- django/db/backends/base/features.py | 3 -- django/db/backends/oracle/features.py | 1 - .../backends/postgresql_psycopg2/features.py | 1 - docs/releases/1.9.txt | 2 ++ tests/timezones/tests.py | 34 ------------------- 5 files changed, 2 insertions(+), 39 deletions(-) diff --git a/django/db/backends/base/features.py b/django/db/backends/base/features.py index e03a097a04259..8c7b31e471b22 100644 --- a/django/db/backends/base/features.py +++ b/django/db/backends/base/features.py @@ -7,9 +7,6 @@ class BaseDatabaseFeatures(object): gis_enabled = False allows_group_by_pk = False allows_group_by_selected_pks = False - # True if django.db.backends.utils.typecast_timestamp is used on values - # returned from dates() calls. - needs_datetime_string_cast = True empty_fetchmany_value = [] update_can_self_select = True diff --git a/django/db/backends/oracle/features.py b/django/db/backends/oracle/features.py index 2a17bc5a8f1ce..2be00acd99b50 100644 --- a/django/db/backends/oracle/features.py +++ b/django/db/backends/oracle/features.py @@ -9,7 +9,6 @@ class DatabaseFeatures(BaseDatabaseFeatures): empty_fetchmany_value = () - needs_datetime_string_cast = False interprets_empty_strings_as_nulls = True uses_savepoints = True has_select_for_update = True diff --git a/django/db/backends/postgresql_psycopg2/features.py b/django/db/backends/postgresql_psycopg2/features.py index 789e0e0ccfa4f..3c5aebfef861d 100644 --- a/django/db/backends/postgresql_psycopg2/features.py +++ b/django/db/backends/postgresql_psycopg2/features.py @@ -4,7 +4,6 @@ class DatabaseFeatures(BaseDatabaseFeatures): allows_group_by_selected_pks = True - needs_datetime_string_cast = False can_return_id_from_insert = True has_real_datatype = True has_native_uuid_field = True diff --git a/docs/releases/1.9.txt b/docs/releases/1.9.txt index ebf2ce45c4d19..28bd915a2315b 100644 --- a/docs/releases/1.9.txt +++ b/docs/releases/1.9.txt @@ -326,6 +326,8 @@ Database backend API fetched from the database is to register a converter for ``DateTimeField`` in ``DatabaseOperations.get_db_converters()``. + The ``needs_datetime_string_cast`` database feature was removed. Database + backends that set it must register a converter instead, as explained above. * The ``DatabaseOperations.value_to_db_()`` methods were renamed to ``adapt_field_value()`` to mirror the ``convert_field_value()`` diff --git a/tests/timezones/tests.py b/tests/timezones/tests.py index 825663436c5e5..3983ec9fa8c21 100644 --- a/tests/timezones/tests.py +++ b/tests/timezones/tests.py @@ -106,7 +106,6 @@ def test_aware_datetime_in_local_timezone_with_microsecond_unsupported(self): self.assertEqual(event.dt.replace(tzinfo=EAT), dt.replace(microsecond=0)) @skipUnlessDBFeature('supports_timezones') - @skipIfDBFeature('needs_datetime_string_cast') def test_aware_datetime_in_utc(self): dt = datetime.datetime(2011, 9, 1, 10, 20, 30, tzinfo=UTC) Event.objects.create(dt=dt) @@ -115,24 +114,7 @@ def test_aware_datetime_in_utc(self): # interpret the naive datetime in local time to get the correct value self.assertEqual(event.dt.replace(tzinfo=EAT), dt) - # This combination is no longer possible since timezone support - # was removed from the SQLite backend -- it didn't work. @skipUnlessDBFeature('supports_timezones') - @skipUnlessDBFeature('needs_datetime_string_cast') - def test_aware_datetime_in_utc_unsupported(self): - dt = datetime.datetime(2011, 9, 1, 10, 20, 30, tzinfo=UTC) - Event.objects.create(dt=dt) - event = Event.objects.get() - self.assertIsNone(event.dt.tzinfo) - # django.db.backends.utils.typecast_dt will just drop the - # timezone, so a round-trip in the database alters the data (!) - # interpret the naive datetime in local time and you get a wrong value - self.assertNotEqual(event.dt.replace(tzinfo=EAT), dt) - # interpret the naive datetime in original time to get the correct value - self.assertEqual(event.dt.replace(tzinfo=UTC), dt) - - @skipUnlessDBFeature('supports_timezones') - @skipIfDBFeature('needs_datetime_string_cast') def test_aware_datetime_in_other_timezone(self): dt = datetime.datetime(2011, 9, 1, 17, 20, 30, tzinfo=ICT) Event.objects.create(dt=dt) @@ -141,22 +123,6 @@ def test_aware_datetime_in_other_timezone(self): # interpret the naive datetime in local time to get the correct value self.assertEqual(event.dt.replace(tzinfo=EAT), dt) - # This combination is no longer possible since timezone support - # was removed from the SQLite backend -- it didn't work. - @skipUnlessDBFeature('supports_timezones') - @skipUnlessDBFeature('needs_datetime_string_cast') - def test_aware_datetime_in_other_timezone_unsupported(self): - dt = datetime.datetime(2011, 9, 1, 17, 20, 30, tzinfo=ICT) - Event.objects.create(dt=dt) - event = Event.objects.get() - self.assertIsNone(event.dt.tzinfo) - # django.db.backends.utils.typecast_dt will just drop the - # timezone, so a round-trip in the database alters the data (!) - # interpret the naive datetime in local time and you get a wrong value - self.assertNotEqual(event.dt.replace(tzinfo=EAT), dt) - # interpret the naive datetime in original time to get the correct value - self.assertEqual(event.dt.replace(tzinfo=ICT), dt) - @skipIfDBFeature('supports_timezones') def test_aware_datetime_unspported(self): dt = datetime.datetime(2011, 9, 1, 13, 20, 30, tzinfo=EAT)