fix: treat set/frozenset as JSON-storable types in types_for_column_types

This commit is contained in:
KooshaPari 2026-09-12 23:24:43 -07:00
commit 264510d3d7
2 changed files with 11 additions and 2 deletions

View file

@ -150,9 +150,9 @@ def types_for_column_types(
t = str
elif len(types) == 1:
t = next(iter(types))
# But if it's a subclass of list / tuple / dict, use str
# But if it's a subclass of list / tuple / dict / set, use str
# instead as we will be storing it as JSON in the table
for superclass in (list, tuple, dict):
for superclass in (list, tuple, dict, set, frozenset):
if issubclass(t, superclass):
t = str
elif {int, bool}.issuperset(types):

View file

@ -102,3 +102,12 @@ def test_flatten(input, expected):
)
def test_dedupe_keys(input, expected):
assert utils.dedupe_keys(input) == expected
def test_types_for_column_types_set_maps_to_str():
"""set and frozenset should be mapped to str for JSON storage, like list/tuple/dict"""
result = utils.types_for_column_types({"tags": {set}})
assert result["tags"] is str
result = utils.types_for_column_types({"tags": {frozenset}})
assert result["tags"] is str