Skip to content

Commit

Permalink
Merge pull request #33888 from dimagi/nh/attr_list
Browse files Browse the repository at this point in the history
`JsonAttrsField.get_pre_value()` to handle native types
  • Loading branch information
kaapstorm committed Dec 18, 2023
2 parents 7341be9 + 1bd1f87 commit 4729985
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 4 deletions.
42 changes: 39 additions & 3 deletions corehq/apps/dump_reload/tests/test_sql_dump_load.py
Original file line number Diff line number Diff line change
Expand Up @@ -736,8 +736,44 @@ def test_zapier_subscription(self):

def test_lookup_table(self):
from corehq.apps.fixtures.models import LookupTable, LookupTableRow, LookupTableRowOwner, OwnerType
table = LookupTable.objects.create(domain=self.domain_name, tag="dump-load")
row = LookupTableRow.objects.create(domain=self.domain_name, table_id=table.id, sort_key=0)
table = LookupTable.objects.create(
domain=self.domain_name,
tag="dump-load",
fields=[
{
"name": "country",
"properties": [],
"is_indexed": True,
},
{
"name": "state_name",
"properties": ["lang"],
"is_indexed": False,
},
{
"name": "state_id",
"properties": [],
"is_indexed": False,
},
]
)
row = LookupTableRow.objects.create(
domain=self.domain_name,
table_id=table.id,
fields={
"country": [
{"value": "India", "properties": {}},
],
"state_name": [
{"value": "Delhi_IN_ENG", "properties": {"lang": "eng"}},
{"value": "Delhi_IN_HIN", "properties": {"lang": "hin"}},
],
"state_id": [
{"value": "DEL", "properties": {}}
],
},
sort_key=0,
)
LookupTableRowOwner.objects.create(
domain=self.domain_name,
row_id=row.id,
Expand Down Expand Up @@ -777,7 +813,7 @@ def _load_with_errors(self, chunk_size):
self.assertEqual(actual_model_counts['products.sqlproduct'], 3)

loader = SqlDataLoader()
with self.assertRaises(IntegrityError),\
with self.assertRaises(IntegrityError), \
mock.patch("corehq.apps.dump_reload.sql.load.CHUNK_SIZE", chunk_size):
# patch the chunk size so that the queue blocks
loader.load_objects(dump_lines)
Expand Down
9 changes: 8 additions & 1 deletion corehq/util/jsonattrs.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ class Plane(models.Model):
- Support for migrating/converting the outer collection of `AttrsDict` and
`AttrsList`.
"""
from attr.exceptions import NotAnAttrsClassError
from attrs import asdict, define, field

from django.db.models import JSONField
Expand All @@ -95,7 +96,13 @@ def __init__(self, *args, builder, **kw):
self.builder = builder

def get_prep_value(self, value):
return super().get_prep_value(self.builder.jsonify(value))
try:
prep_value = super().get_prep_value(self.builder.jsonify(value))
except NotAnAttrsClassError:
# `self.builder.jsonify()` expected a subclass of `attrs`
# but `value` is not. e.g. It is loaded from a data dump.
prep_value = super().get_prep_value(value)
return prep_value

def from_db_value(self, value, expression, connection):
value = super().from_db_value(value, expression, connection)
Expand Down

0 comments on commit 4729985

Please sign in to comment.