mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.7.x] Adjusted refactoring of vendor checks.
Thanks Shai for the thorough review.
Backport of fb90b7c from master
			
			
This commit is contained in:
		| @@ -616,8 +616,6 @@ class BaseDatabaseFeatures(object): | |||||||
|     supports_subqueries_in_group_by = True |     supports_subqueries_in_group_by = True | ||||||
|     supports_bitwise_or = True |     supports_bitwise_or = True | ||||||
|  |  | ||||||
|     supports_boolean_type = True |  | ||||||
|  |  | ||||||
|     supports_binary_field = True |     supports_binary_field = True | ||||||
|  |  | ||||||
|     # Do time/datetime fields have microsecond precision? |     # Do time/datetime fields have microsecond precision? | ||||||
| @@ -679,6 +677,9 @@ class BaseDatabaseFeatures(object): | |||||||
|     # Can the backend introspect an BinaryField, instead of an TextField? |     # Can the backend introspect an BinaryField, instead of an TextField? | ||||||
|     can_introspect_binary_field = True |     can_introspect_binary_field = True | ||||||
|  |  | ||||||
|  |     # Can the backend introspect an BooleanField, instead of an IntegerField? | ||||||
|  |     can_introspect_boolean_field = True | ||||||
|  |  | ||||||
|     # Can the backend introspect an IPAddressField, instead of an CharField? |     # Can the backend introspect an IPAddressField, instead of an CharField? | ||||||
|     can_introspect_ip_address_field = False |     can_introspect_ip_address_field = False | ||||||
|  |  | ||||||
| @@ -737,7 +738,7 @@ class BaseDatabaseFeatures(object): | |||||||
|     # Suffix for backends that don't support "SELECT xxx;" queries. |     # Suffix for backends that don't support "SELECT xxx;" queries. | ||||||
|     bare_select_suffix = '' |     bare_select_suffix = '' | ||||||
|  |  | ||||||
|     lowercases_column_names = False |     uppercases_column_names = True | ||||||
|  |  | ||||||
|     def __init__(self, connection): |     def __init__(self, connection): | ||||||
|         self.connection = connection |         self.connection = connection | ||||||
|   | |||||||
| @@ -172,13 +172,13 @@ class DatabaseFeatures(BaseDatabaseFeatures): | |||||||
|     has_select_for_update_nowait = False |     has_select_for_update_nowait = False | ||||||
|     supports_forward_references = False |     supports_forward_references = False | ||||||
|     supports_long_model_names = False |     supports_long_model_names = False | ||||||
|     supports_boolean_type = False |  | ||||||
|     # XXX MySQL DB-API drivers currently fail on binary data on Python 3. |     # XXX MySQL DB-API drivers currently fail on binary data on Python 3. | ||||||
|     supports_binary_field = six.PY2 |     supports_binary_field = six.PY2 | ||||||
|     supports_microsecond_precision = False |     supports_microsecond_precision = False | ||||||
|     supports_regex_backreferencing = False |     supports_regex_backreferencing = False | ||||||
|     supports_date_lookup_using_string = False |     supports_date_lookup_using_string = False | ||||||
|     can_introspect_binary_field = False |     can_introspect_binary_field = False | ||||||
|  |     can_introspect_boolean_field = False | ||||||
|     supports_timezones = False |     supports_timezones = False | ||||||
|     requires_explicit_null_ordering_when_grouping = True |     requires_explicit_null_ordering_when_grouping = True | ||||||
|     allows_auto_pk_0 = False |     allows_auto_pk_0 = False | ||||||
|   | |||||||
| @@ -120,7 +120,7 @@ class DatabaseFeatures(BaseDatabaseFeatures): | |||||||
|     connection_persists_old_columns = True |     connection_persists_old_columns = True | ||||||
|     closed_cursor_error_class = InterfaceError |     closed_cursor_error_class = InterfaceError | ||||||
|     bare_select_suffix = " FROM DUAL" |     bare_select_suffix = " FROM DUAL" | ||||||
|     lowercases_column_names = True |     uppercases_column_names = False | ||||||
|  |  | ||||||
|  |  | ||||||
| class DatabaseOperations(BaseDatabaseOperations): | class DatabaseOperations(BaseDatabaseOperations): | ||||||
|   | |||||||
| @@ -87,7 +87,7 @@ class InspectDBTestCase(TestCase): | |||||||
|         else: |         else: | ||||||
|             assertFieldType('big_int_field', "models.IntegerField()") |             assertFieldType('big_int_field', "models.IntegerField()") | ||||||
|  |  | ||||||
|         if connection.features.supports_boolean_type: |         if connection.features.can_introspect_boolean_field: | ||||||
|             assertFieldType('bool_field', "models.BooleanField()") |             assertFieldType('bool_field', "models.BooleanField()") | ||||||
|             assertFieldType('null_bool_field', "models.NullBooleanField()") |             assertFieldType('null_bool_field', "models.NullBooleanField()") | ||||||
|         else: |         else: | ||||||
| @@ -176,7 +176,7 @@ class InspectDBTestCase(TestCase): | |||||||
|         out = StringIO() |         out = StringIO() | ||||||
|         call_command('inspectdb', stdout=out) |         call_command('inspectdb', stdout=out) | ||||||
|         output = out.getvalue() |         output = out.getvalue() | ||||||
|         base_name = 'field' if connection.features.lowercases_column_names else 'Field' |         base_name = 'field' if not connection.features.uppercases_column_names else 'Field' | ||||||
|         self.assertIn("field = models.IntegerField()", output) |         self.assertIn("field = models.IntegerField()", output) | ||||||
|         self.assertIn("field_field = models.IntegerField(db_column='%s_')" % base_name, output) |         self.assertIn("field_field = models.IntegerField(db_column='%s_')" % base_name, output) | ||||||
|         self.assertIn("field_field_0 = models.IntegerField(db_column='%s__')" % base_name, output) |         self.assertIn("field_field_0 = models.IntegerField(db_column='%s__')" % base_name, output) | ||||||
|   | |||||||
| @@ -57,7 +57,8 @@ class IntrospectionTests(TestCase): | |||||||
|         self.assertEqual( |         self.assertEqual( | ||||||
|             [datatype(r[1], r) for r in desc], |             [datatype(r[1], r) for r in desc], | ||||||
|             ['AutoField' if connection.features.can_introspect_autofield else 'IntegerField', |             ['AutoField' if connection.features.can_introspect_autofield else 'IntegerField', | ||||||
|              'CharField', 'CharField', 'CharField', 'BigIntegerField', |              'CharField', 'CharField', 'CharField', | ||||||
|  |              'BigIntegerField' if connection.features.can_introspect_big_integer_field else 'IntegerField', | ||||||
|              'BinaryField' if connection.features.can_introspect_binary_field else 'TextField'] |              'BinaryField' if connection.features.can_introspect_binary_field else 'TextField'] | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -449,6 +449,7 @@ class SerializerTests(TestCase): | |||||||
|         self.assertEqual(base_data, proxy_proxy_data.replace('proxy', '')) |         self.assertEqual(base_data, proxy_proxy_data.replace('proxy', '')) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @skipUnlessDBFeature('supports_binary_field') | ||||||
| def serializerTest(format, self): | def serializerTest(format, self): | ||||||
|  |  | ||||||
|     # Create all the objects defined in the test data |     # Create all the objects defined in the test data | ||||||
| @@ -481,8 +482,6 @@ def serializerTest(format, self): | |||||||
|     for klass, count in instance_count.items(): |     for klass, count in instance_count.items(): | ||||||
|         self.assertEqual(count, klass.objects.count()) |         self.assertEqual(count, klass.objects.count()) | ||||||
|  |  | ||||||
| serializerTest = skipUnlessDBFeature('supports_binary_field')(serializerTest) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def naturalKeySerializerTest(format, self): | def naturalKeySerializerTest(format, self): | ||||||
|     # Create all the objects defined in the test data |     # Create all the objects defined in the test data | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user