Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
5 changes: 4 additions & 1 deletion mongoengine_plus/models/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,10 @@ def mongo_to_dict(obj, exclude_fields: list = None) -> dict:
)
return_data[field_name] = list_field_to_dict(data)
elif isinstance(obj._fields[field_name], EmbeddedDocumentField):
return_data[field_name] = mongo_to_dict(data, [])
if callable(getattr(data, "to_dict", None)):
return_data[field_name] = data.to_dict()
else:
return_data[field_name] = mongo_to_dict(data)
elif isinstance(obj._fields[field_name], DictField):
return_data[field_name] = data
elif isinstance(obj._fields[field_name], EnumField):
Expand Down
2 changes: 1 addition & 1 deletion mongoengine_plus/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '1.2.0'
__version__ = '1.2.1'
54 changes: 49 additions & 5 deletions tests/models/test_base.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,61 @@
from mongoengine import Document, StringField
from mongoengine import (
Document,
EmbeddedDocument,
EmbeddedDocumentField,
StringField,
)

from mongoengine_plus.models import BaseModel


class File(EmbeddedDocument):
url = StringField()
file_type = StringField()


class Address(EmbeddedDocument, BaseModel):
# Inheritance from BaseModel, to use _excluded and _hidden
_excluded = ['reference']
_hidden = ['secret_code']
street = StringField()
secret_code = StringField()
reference = StringField()


class TestModel(BaseModel, Document):
id = StringField()
id = StringField(primary_key=True)
secret_field = StringField()
address = EmbeddedDocumentField(Address)
document = EmbeddedDocumentField(File)

__test__ = False
_hidden = ['secret_field']


def test_hide_field():
model = TestModel(id='12345', secret_field='secret')
address = Address(
street='123 Main St',
reference='not display this',
secret_code='898612',
)
doc = File(url='https://example.com', file_type='pdf')
model = TestModel(
id='12345',
secret_field='secret',
document=doc,
address=address,
)
model_dict = model.to_dict()
assert model_dict['secret_field'] == '********'
assert model_dict['id'] == '12345'
expected = {
'id': '12345',
'secret_field': '********',
'address': {
'street': '123 Main St',
'secret_code': '********',
},
'document': {
'url': 'https://example.com',
'file_type': 'pdf',
},
}
assert model_dict == expected
Loading