Skip to content

Commit bb15fa6

Browse files
feat(django-spanner): isolate Django 6.0 skip_tests via conditional version check
1 parent f4e3af6 commit bb15fa6

2 files changed

Lines changed: 34 additions & 27 deletions

File tree

packages/django-google-spanner/django_spanner/creation.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,16 @@ def mark_skips(self):
2626
test_app = test_name.split(".")[0]
2727
# Importing a test app that isn't installed raises RuntimeError.
2828
if test_app in settings.INSTALLED_APPS:
29+
test_case = import_string(test_case_name)
2930
try:
30-
test_case = import_string(test_case_name)
3131
method = getattr(test_case, method_name)
3232
setattr(
3333
test_case,
3434
method_name,
3535
skip("unsupported by Spanner")(method),
3636
)
37-
except (AttributeError, ImportError):
38-
# The test case or method might not exist in this version of Django.
37+
except AttributeError:
38+
# The test method might not exist in this version of Django.
3939
pass
4040

4141
def create_test_db(self, *args, **kwargs):

packages/django-google-spanner/django_spanner/features.py

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import os
88

9+
import django
910
from django.db.backends.base.features import BaseDatabaseFeatures
1011
from django.db.utils import InterfaceError
1112

@@ -205,9 +206,6 @@ def introspected_field_types(self):
205206
"many_to_one_null.tests.ManyToOneNullTests.test_set_clear_non_bulk",
206207
"many_to_one_null.tests.ManyToOneNullTests.test_unsaved",
207208
"foreign_object.tests.MultiColumnFKTests.test_prefetch_foreignobject_reverse",
208-
# Indexes tests
209-
"indexes.tests.CoveringIndexTests.test_covering_index",
210-
"indexes.tests.CoveringIndexTests.test_covering_partial_index",
211209
# Admin ChangeList tests
212210
"admin_changelist.tests.ChangeListTests.test_custom_lookup_in_search_fields",
213211
"admin_changelist.tests.ChangeListTests.test_deterministic_order_for_model_ordered_by_its_manager",
@@ -773,27 +771,6 @@ def introspected_field_types(self):
773771
"ordering.tests.OrderingTests.test_extra_ordering",
774772
"ordering.tests.OrderingTests.test_extra_ordering_quoting",
775773
"ordering.tests.OrderingTests.test_extra_ordering_with_table_name",
776-
# Spanner uses random int64 IDs; test assumes monotonic ordering matching insertion order.
777-
"prefetch_related.tests.PrefetchRelatedMTICacheTests.test_parent_m2m_available_in_child",
778-
# Client-side AutoField ID generation sets pk before save; _is_pk_set() triggers refresh_from_db instead of AttributeError.
779-
"defer_regress.tests.DeferCopyInstanceTests.test_bulk_create",
780-
"defer_regress.tests.DeferCopyInstanceTests.test_save",
781-
# Spanner does not support nested transactions/savepoints; raising inside atomic() aborts the whole transaction.
782-
"update_only_fields.tests.UpdateOnlyFieldsTests.test_update_fields_not_updated",
783-
# Test checks warning caller stacklevel; wrapping create_test_db shifts frame depth.
784-
"backends.base.test_creation.TestDbCreationTests.test_serialize_deprecation",
785-
# Runtime client-side AutoField initialization defaults trigger false-positive diffs in makemigrations autodetector.
786-
"migrations.test_commands.MakeMigrationsTests.test_makemigrations_check_no_changes",
787-
"migrations.test_commands.MakeMigrationsTests.test_makemigrations_model_rename_interactive",
788-
"migrations.test_commands.MakeMigrationsTests.test_makemigrations_no_changes",
789-
# Spanner query parameter limit (max_query_params = 900) limits batch chunk size.
790-
"bulk_create.tests.BulkCreateTests.test_max_batch_size",
791-
# Query count assertions mismatch due to Spanner batch DML execution behavior.
792-
"bulk_create.tests.BulkCreateTransactionTests.test_multiple_batches",
793-
# All objects get client-side PKs, collapsing multi-query insertion into a single batch query.
794-
"bulk_create.tests.BulkCreateTransactionTests.test_objs_with_and_without_pk",
795-
# Tie-breaker ordering on pk assumes sequential integer IDs; Spanner uses random IDs.
796-
"ordering.tests.OrderingTests.test_order_by_case_when_constant_value",
797774
"ordering.tests.OrderingTests.test_order_by_constant_value",
798775
"ordering.tests.OrderingTests.test_order_by_f_expression",
799776
"ordering.tests.OrderingTests.test_order_by_f_expression_duplicates",
@@ -2289,3 +2266,33 @@ def introspected_field_types(self):
22892266
"expressions.tests.BasicExpressionsTests.test_outerref_mixed_case_table_name",
22902267
"db_functions.text.test_concat.ConcatTests.test_concat_non_str",
22912268
)
2269+
2270+
django_6_0_skip_tests = (
2271+
# Indexes tests (upstream tests hardcode PostgreSQL's INCLUDE keyword)
2272+
"indexes.tests.CoveringIndexTests.test_covering_index",
2273+
"indexes.tests.CoveringIndexTests.test_covering_partial_index",
2274+
# Spanner uses random int64 IDs; test assumes monotonic ordering matching insertion order.
2275+
"prefetch_related.tests.PrefetchRelatedMTICacheTests.test_parent_m2m_available_in_child",
2276+
# Client-side AutoField ID generation sets pk before save; _is_pk_set() triggers refresh_from_db instead of AttributeError.
2277+
"defer_regress.tests.DeferCopyInstanceTests.test_bulk_create",
2278+
"defer_regress.tests.DeferCopyInstanceTests.test_save",
2279+
# Spanner does not support nested transactions/savepoints; raising inside atomic() aborts the whole transaction.
2280+
"update_only_fields.tests.UpdateOnlyFieldsTests.test_update_fields_not_updated",
2281+
# Test checks warning caller stacklevel; wrapping create_test_db shifts frame depth.
2282+
"backends.base.test_creation.TestDbCreationTests.test_serialize_deprecation",
2283+
# Runtime client-side AutoField initialization defaults trigger false-positive diffs in makemigrations autodetector.
2284+
"migrations.test_commands.MakeMigrationsTests.test_makemigrations_check_no_changes",
2285+
"migrations.test_commands.MakeMigrationsTests.test_makemigrations_model_rename_interactive",
2286+
"migrations.test_commands.MakeMigrationsTests.test_makemigrations_no_changes",
2287+
# Spanner query parameter limit (max_query_params = 900) limits batch chunk size.
2288+
"bulk_create.tests.BulkCreateTests.test_max_batch_size",
2289+
# Query count assertions mismatch due to Spanner batch DML execution behavior.
2290+
"bulk_create.tests.BulkCreateTransactionTests.test_multiple_batches",
2291+
# All objects get client-side PKs, collapsing multi-query insertion into a single batch query.
2292+
"bulk_create.tests.BulkCreateTransactionTests.test_objs_with_and_without_pk",
2293+
# Tie-breaker ordering on pk assumes sequential integer IDs; Spanner uses random IDs.
2294+
"ordering.tests.OrderingTests.test_order_by_case_when_constant_value",
2295+
)
2296+
2297+
if django.VERSION >= (6, 0):
2298+
skip_tests += django_6_0_skip_tests

0 commit comments

Comments
 (0)