summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2018-07-26 15:04:58 -0400
committerTim Graham <timograham@gmail.com>2018-07-27 11:53:49 -0400
commitc72dde41e603093ab0bb12fa24fa69cfda0d35f9 (patch)
tree37411ccfb079358cbf62213093e2090d33636296 /django
parent3af695eda24b874486ee8be7e0d729761b3bdc71 (diff)
Fixed #29595 -- Allowed using timedelta in migrations questioner.
Refs #29600 -- Removed usage of django.utils.datetime_safe in migrations.
Diffstat (limited to 'django')
-rw-r--r--django/db/migrations/questioner.py5
-rw-r--r--django/db/migrations/serializer.py46
2 files changed, 15 insertions, 36 deletions
diff --git a/django/db/migrations/questioner.py b/django/db/migrations/questioner.py
index d482de6388..08e7719dc1 100644
--- a/django/db/migrations/questioner.py
+++ b/django/db/migrations/questioner.py
@@ -1,10 +1,11 @@
+import datetime
import importlib
import os
import sys
from django.apps import apps
from django.db.models.fields import NOT_PROVIDED
-from django.utils import datetime_safe, timezone
+from django.utils import timezone
from .loader import MigrationLoader
@@ -135,7 +136,7 @@ class InteractiveMigrationQuestioner(MigrationQuestioner):
sys.exit(1)
else:
try:
- return eval(code, {}, {"datetime": datetime_safe, "timezone": timezone})
+ return eval(code, {}, {'datetime': datetime, 'timezone': timezone})
except (SyntaxError, NameError) as e:
print("Invalid input: %s" % e)
diff --git a/django/db/migrations/serializer.py b/django/db/migrations/serializer.py
index 9b251e54cd..911cf0f359 100644
--- a/django/db/migrations/serializer.py
+++ b/django/db/migrations/serializer.py
@@ -12,7 +12,6 @@ import uuid
from django.db import models
from django.db.migrations.operations.base import Operation
from django.db.migrations.utils import COMPILED_REGEX_TYPE, RegexObject
-from django.utils import datetime_safe
from django.utils.functional import LazyObject, Promise
from django.utils.timezone import utc
from django.utils.version import get_docs_version
@@ -46,25 +45,21 @@ class BaseSimpleSerializer(BaseSerializer):
return repr(self.value), set()
-class DatetimeSerializer(BaseSerializer):
+class DateTimeSerializer(BaseSerializer):
+ """For datetime.*, except datetime.datetime."""
+ def serialize(self):
+ return repr(self.value), {'import datetime'}
+
+
+class DatetimeDatetimeSerializer(BaseSerializer):
+ """For datetime.datetime."""
def serialize(self):
if self.value.tzinfo is not None and self.value.tzinfo != utc:
self.value = self.value.astimezone(utc)
- value_repr = repr(self.value).replace("<UTC>", "utc")
- if isinstance(self.value, datetime_safe.datetime):
- value_repr = "datetime.%s" % value_repr
imports = ["import datetime"]
if self.value.tzinfo is not None:
imports.append("from django.utils.timezone import utc")
- return value_repr, set(imports)
-
-
-class DateSerializer(BaseSerializer):
- def serialize(self):
- value_repr = repr(self.value)
- if isinstance(self.value, datetime_safe.date):
- value_repr = "datetime.%s" % value_repr
- return value_repr, {"import datetime"}
+ return repr(self.value).replace('<UTC>', 'utc'), set(imports)
class DecimalSerializer(BaseSerializer):
@@ -246,19 +241,6 @@ class SettingsReferenceSerializer(BaseSerializer):
return "settings.%s" % self.value.setting_name, {"from django.conf import settings"}
-class TimedeltaSerializer(BaseSerializer):
- def serialize(self):
- return repr(self.value), {"import datetime"}
-
-
-class TimeSerializer(BaseSerializer):
- def serialize(self):
- value_repr = repr(self.value)
- if isinstance(self.value, datetime_safe.time):
- value_repr = "datetime.%s" % value_repr
- return value_repr, {"import datetime"}
-
-
class TupleSerializer(BaseSequenceSerializer):
def _format(self):
# When len(value)==0, the empty tuple should be serialized as "()",
@@ -322,13 +304,9 @@ def serializer_factory(value):
if isinstance(value, enum.Enum):
return EnumSerializer(value)
if isinstance(value, datetime.datetime):
- return DatetimeSerializer(value)
- if isinstance(value, datetime.date):
- return DateSerializer(value)
- if isinstance(value, datetime.time):
- return TimeSerializer(value)
- if isinstance(value, datetime.timedelta):
- return TimedeltaSerializer(value)
+ return DatetimeDatetimeSerializer(value)
+ if isinstance(value, (datetime.date, datetime.timedelta, datetime.time)):
+ return DateTimeSerializer(value)
if isinstance(value, SettingsReference):
return SettingsReferenceSerializer(value)
if isinstance(value, float):