Skip to content

Commit

Permalink
Dropped the needs_datetime_string_cast feature.
Browse files Browse the repository at this point in the history
It has been superseded by the converter infrastructure.
  • Loading branch information
aaugustin committed May 17, 2015
1 parent e2a652f commit da2c695
Show file tree
Hide file tree
Showing 5 changed files with 2 additions and 39 deletions.
3 changes: 0 additions & 3 deletions django/db/backends/base/features.py
Expand Up @@ -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

Expand Down
1 change: 0 additions & 1 deletion django/db/backends/oracle/features.py
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion django/db/backends/postgresql_psycopg2/features.py
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions docs/releases/1.9.txt
Expand Up @@ -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_<type>()`` methods were renamed to
``adapt_<type>field_value()`` to mirror the ``convert_<type>field_value()``
Expand Down
34 changes: 0 additions & 34 deletions tests/timezones/tests.py
Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down

0 comments on commit da2c695

Please sign in to comment.