mirror of
				https://github.com/django/django.git
				synced 2025-10-26 07:06:08 +00:00 
			
		
		
		
	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:
		| @@ -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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user