Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions aredis_om/model/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -1680,6 +1680,9 @@ async def save(
self.check()
db = self._get_db(pipeline)
document = jsonable_encoder(self.dict())

# filter out values which are `None` because they are not valid in a HSET
document = {k: v for k, v in document.items() if v is not None}
# TODO: Wrap any Redis response errors in a custom exception?
await db.hset(self.key(), mapping=document)
return self
Expand Down
21 changes: 21 additions & 0 deletions tests/test_hash_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -875,3 +875,24 @@ async def test_xfix_queries(members, m):

result = await m.Member.find(m.Member.bio % "*eat*").first()
assert result.first_name == "Andrew"


@py_test_mark_asyncio
async def test_none():
class ModelWithNoneDefault(HashModel):
test: Optional[str] = Field(index=True, default=None)

class ModelWithStringDefault(HashModel):
test: Optional[str] = Field(index=True, default="None")

await Migrator().run()

a = ModelWithNoneDefault()
await a.save()
res = await ModelWithNoneDefault.find(ModelWithNoneDefault.pk == a.pk).first()
assert res.test is None

b = ModelWithStringDefault()
await b.save()
res = await ModelWithStringDefault.find(ModelWithStringDefault.pk == b.pk).first()
assert res.test == "None"
21 changes: 21 additions & 0 deletions tests/test_json_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -971,3 +971,24 @@ async def test_xfix_queries(m):

result = await m.Member.find(m.Member.bio % "*ack*").first()
assert result.first_name == "Steve"


@py_test_mark_asyncio
async def test_none():
class ModelWithNoneDefault(JsonModel):
test: Optional[str] = Field(index=True, default=None)

class ModelWithStringDefault(JsonModel):
test: Optional[str] = Field(index=True, default="None")

await Migrator().run()

a = ModelWithNoneDefault()
await a.save()
res = await ModelWithNoneDefault.find(ModelWithNoneDefault.pk == a.pk).first()
assert res.test is None

b = ModelWithStringDefault()
await b.save()
res = await ModelWithStringDefault.find(ModelWithStringDefault.pk == b.pk).first()
assert res.test == "None"