8000 fix: override AutoField default value only for Spanner (#780) · googleapis/python-spanner-django@3bf2c77 · GitHub
[go: up one dir, main page]

Skip to content

Commit 3bf2c77

Browse files
authored
fix: override AutoField default value only for Spanner (#780)
1 parent 8cad6f6 commit 3bf2c77

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

django_spanner/__init__.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import pkg_resources
1616
from google.cloud.spanner_v1 import JsonObject
1717
from django.db.models.fields import (
18+
NOT_PROVIDED,
1819
AutoField,
1920
Field,
2021
)
@@ -61,7 +62,12 @@ def gen_rand_int64():
6162
def autofield_init(self, *args, **kwargs):
6263
kwargs["blank"] = True
6364
Field.__init__(self, *args, **kwargs)
64-
self.default = gen_rand_int64
65+
66+
if (
67+
django.db.connection.settings_dict["ENGINE"] == "django_spanner"
68+
and self.default == NOT_PROVIDED
69+
):
70+
self.default = gen_rand_int64
6571

6672

6773
AutoField.__init__ = autofield_init

tests/unit/django_spanner/test_schema.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66

77

88
from .models import Author
9-
from django.db import NotSupportedError
9+
from django.db import NotSupportedError, connection
1010
from django.db.models import Index
11-
from django.db.models.fields import IntegerField
11+
from django.db.models.fields import AutoField, IntegerField
12+
from django_spanner import gen_rand_int64
1213
from django_spanner.schema import DatabaseSchemaEditor
1314
from tests._helpers import HAS_OPENTELEMETRY_INSTALLED
1415
from tests.unit.django_spanner.simple_test import SpannerSimpleTestClass
@@ -404,3 +405,31 @@ def constraint_names(*args, **kwargs):
404405
new_field.set_attributes_from_name("author_num")
405406
with self.assertRaises(NotSupportedError):
406407
schema_editor.alter_field(Author, old_field, new_field)
408+
409+
def test_autofield_no_default(self):
410+
"""Spanner, default is not provided."""
411+
field = AutoField(name="field_name")
412+
assert gen_rand_int64 == field.default
413+
414+
def test_autofield_default(self):
415+
"""Spanner, default provided."""
416+
mock_func = mock.Mock()
417+
field = AutoField 9ED0 (name="field_name", default=mock_func)
418+
assert gen_rand_int64 != field.default
419+
assert mock_func == field.default
420+
421+
def test_autofield_not_spanner(self):
422+
"""Not Spanner, default not provided."""
423+
connection.settings_dict["ENGINE"] = "another_db"
424+
field = AutoField(name="field_name")
425+
assert gen_rand_int64 != field.default
426+
connection.settings_dict["ENGINE"] = "django_spanner"
427+
428+
def test_autofield_not_spanner_w_default(self):
429+
"""Not Spanner, default provided."""
430+
connection.settings_dict["ENGINE"] = "another_db"
431+
mock_func = mock.Mock()
432+
field = AutoField(name="field_name", default=mock_func)
433+
assert gen_rand_int64 != field.default
434+
assert mock_func == field.default
435+
connection.settings_dict["ENGINE"] = "django_spanner"

0 commit comments

Comments
 (0)
0