Skip to content

Commit 8cee9ce

Browse files
committed
fixing None types in hashes
1 parent 57fe8a2 commit 8cee9ce

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

aredis_om/model/model.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1680,6 +1680,9 @@ async def save(
16801680
self.check()
16811681
db = self._get_db(pipeline)
16821682
document = jsonable_encoder(self.dict())
1683+
1684+
# filter out values which are `None` because they are not valid in a HSET
1685+
document = {k: v for k, v in document.items() if v is not None}
16831686
# TODO: Wrap any Redis response errors in a custom exception?
16841687
await db.hset(self.key(), mapping=document)
16851688
return self

tests/test_hash_model.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -875,3 +875,24 @@ async def test_xfix_queries(members, m):
875875

876876
result = await m.Member.find(m.Member.bio % "*eat*").first()
877877
assert result.first_name == "Andrew"
878+
879+
880+
@py_test_mark_asyncio
881+
async def test_none():
882+
class ModelWithNoneDefault(HashModel):
883+
test: Optional[str] = Field(index=True, default=None)
884+
885+
class ModelWithStringDefault(HashModel):
886+
test: Optional[str] = Field(index=True, default='None')
887+
888+
await Migrator().run()
889+
890+
a = ModelWithNoneDefault(test=None)
891+
await a.save()
892+
res = await ModelWithNoneDefault.find(ModelWithNoneDefault.pk == a.pk).first()
893+
assert res.test is None
894+
895+
b = ModelWithStringDefault(test=None)
896+
await b.save()
897+
res = await ModelWithStringDefault.find(ModelWithStringDefault.pk == b.pk).first()
898+
assert res.test == 'None'

0 commit comments

Comments
 (0)