mirror of https://github.com/django/django.git
Fixed test failures on MySQL.
Some tests failed when the time zone definitions were loaded in MySQL and pytz wasn't installed. This setup isn't supported.
This commit is contained in:
parent
de8aa3a9a9
commit
1fff8daf88
|
@ -30,6 +30,11 @@ if (version < (1, 2, 1) or (version[:3] == (1, 2, 1) and
|
||||||
from MySQLdb.converters import conversions, Thing2Literal
|
from MySQLdb.converters import conversions, Thing2Literal
|
||||||
from MySQLdb.constants import FIELD_TYPE, CLIENT
|
from MySQLdb.constants import FIELD_TYPE, CLIENT
|
||||||
|
|
||||||
|
try:
|
||||||
|
import pytz
|
||||||
|
except ImportError:
|
||||||
|
pytz = None
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import utils
|
from django.db import utils
|
||||||
from django.db.backends import *
|
from django.db.backends import *
|
||||||
|
@ -186,6 +191,15 @@ class DatabaseFeatures(BaseDatabaseFeatures):
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def has_zoneinfo_database(self):
|
def has_zoneinfo_database(self):
|
||||||
|
# MySQL accepts full time zones names (eg. Africa/Nairobi) but rejects
|
||||||
|
# abbreviations (eg. EAT). When pytz isn't installed and the current
|
||||||
|
# time zone is LocalTimezone (the only sensible value in this
|
||||||
|
# context), the current time zone name will be an abbreviation. As a
|
||||||
|
# consequence, MySQL cannot perform time zone conversions reliably.
|
||||||
|
if pytz is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Test if the time zone definitions are installed.
|
||||||
cursor = self.connection.cursor()
|
cursor = self.connection.cursor()
|
||||||
cursor.execute("SELECT 1 FROM mysql.time_zone LIMIT 1")
|
cursor.execute("SELECT 1 FROM mysql.time_zone LIMIT 1")
|
||||||
return cursor.fetchone() is not None
|
return cursor.fetchone() is not None
|
||||||
|
|
|
@ -1092,7 +1092,7 @@ class SQLDateTimeCompiler(SQLCompiler):
|
||||||
if datetime is None:
|
if datetime is None:
|
||||||
raise ValueError("Database returned an invalid value "
|
raise ValueError("Database returned an invalid value "
|
||||||
"in QuerySet.dates(). Are time zone "
|
"in QuerySet.dates(). Are time zone "
|
||||||
"definitions installed?")
|
"definitions and pytz installed?")
|
||||||
datetime = datetime.replace(tzinfo=None)
|
datetime = datetime.replace(tzinfo=None)
|
||||||
datetime = timezone.make_aware(datetime, self.query.tzinfo)
|
datetime = timezone.make_aware(datetime, self.query.tzinfo)
|
||||||
yield datetime
|
yield datetime
|
||||||
|
|
|
@ -627,7 +627,8 @@ object. If it's ``None``, Django uses the :ref:`current time zone
|
||||||
- SQLite: install pytz_ — conversions are actually performed in Python.
|
- SQLite: install pytz_ — conversions are actually performed in Python.
|
||||||
- PostgreSQL: no requirements (see `Time Zones`_).
|
- PostgreSQL: no requirements (see `Time Zones`_).
|
||||||
- Oracle: no requirements (see `Choosing a Time Zone File`_).
|
- Oracle: no requirements (see `Choosing a Time Zone File`_).
|
||||||
- MySQL: load the time zone tables with `mysql_tzinfo_to_sql`_.
|
- MySQL: install pytz_ and load the time zone tables with
|
||||||
|
`mysql_tzinfo_to_sql`_.
|
||||||
|
|
||||||
.. _pytz: http://pytz.sourceforge.net/
|
.. _pytz: http://pytz.sourceforge.net/
|
||||||
.. _Time Zones: http://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-TIMEZONES
|
.. _Time Zones: http://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-TIMEZONES
|
||||||
|
|
Loading…
Reference in New Issue