Merge pull request #2408 from bagerard/refactoring_remove_useless_code_only_fields
Removed code related to Document.__only_fields
This commit is contained in:
commit
161493c0d2
@ -14,6 +14,7 @@ Development
|
||||
- Bug fix in ListField when updating the first item, it was saving the whole list, instead of
|
||||
just replacing the first item (as it's usually done) #2392
|
||||
- Add EnumField: ``mongoengine.fields.EnumField``
|
||||
- Refactoring - Remove useless code related to Document.__only_fields and Queryset.only_fields
|
||||
|
||||
Changes in 0.20.0
|
||||
=================
|
||||
|
@ -64,8 +64,6 @@ class BaseDocument:
|
||||
It may contain additional reserved keywords, e.g. "__auto_convert".
|
||||
:param __auto_convert: If True, supplied values will be converted
|
||||
to Python-type values via each field's `to_python` method.
|
||||
:param __only_fields: A set of fields that have been loaded for
|
||||
this document. Empty if all fields have been loaded.
|
||||
:param _created: Indicates whether this is a brand new document
|
||||
or whether it's already been persisted before. Defaults to true.
|
||||
"""
|
||||
@ -80,8 +78,6 @@ class BaseDocument:
|
||||
|
||||
__auto_convert = values.pop("__auto_convert", True)
|
||||
|
||||
__only_fields = set(values.pop("__only_fields", values))
|
||||
|
||||
_created = values.pop("_created", True)
|
||||
|
||||
signals.pre_init.send(self.__class__, document=self, values=values)
|
||||
@ -106,10 +102,8 @@ class BaseDocument:
|
||||
self._dynamic_fields = SON()
|
||||
|
||||
# Assign default values to the instance.
|
||||
# We set default values only for fields loaded from DB. See
|
||||
# https://github.com/mongoengine/mongoengine/issues/399 for more info.
|
||||
for key, field in self._fields.items():
|
||||
if self._db_field_map.get(key, key) in __only_fields:
|
||||
if self._db_field_map.get(key, key) in values:
|
||||
continue
|
||||
value = getattr(self, key, None)
|
||||
setattr(self, key, value)
|
||||
@ -758,11 +752,8 @@ class BaseDocument:
|
||||
return cls._meta.get("collection", None)
|
||||
|
||||
@classmethod
|
||||
def _from_son(cls, son, _auto_dereference=True, only_fields=None, created=False):
|
||||
def _from_son(cls, son, _auto_dereference=True, created=False):
|
||||
"""Create an instance of a Document (subclass) from a PyMongo SON."""
|
||||
if not only_fields:
|
||||
only_fields = []
|
||||
|
||||
if son and not isinstance(son, dict):
|
||||
raise ValueError(
|
||||
"The source SON object needs to be of type 'dict' but a '%s' was found"
|
||||
@ -817,9 +808,7 @@ class BaseDocument:
|
||||
if cls.STRICT:
|
||||
data = {k: v for k, v in data.items() if k in cls._fields}
|
||||
|
||||
obj = cls(
|
||||
__auto_convert=False, _created=created, __only_fields=only_fields, **data
|
||||
)
|
||||
obj = cls(__auto_convert=False, _created=created, **data)
|
||||
obj._changed_fields = []
|
||||
if not _auto_dereference:
|
||||
obj._fields = fields
|
||||
|
@ -88,7 +88,6 @@ class BaseQuerySet:
|
||||
self._hint = -1 # Using -1 as None is a valid value for hint
|
||||
self._collation = None
|
||||
self._batch_size = None
|
||||
self.only_fields = []
|
||||
self._max_time_ms = None
|
||||
self._comment = None
|
||||
|
||||
@ -190,9 +189,7 @@ class BaseQuerySet:
|
||||
if queryset._scalar:
|
||||
return queryset._get_scalar(
|
||||
queryset._document._from_son(
|
||||
queryset._cursor[key],
|
||||
_auto_dereference=self._auto_dereference,
|
||||
only_fields=self.only_fields,
|
||||
queryset._cursor[key], _auto_dereference=self._auto_dereference,
|
||||
)
|
||||
)
|
||||
|
||||
@ -200,9 +197,7 @@ class BaseQuerySet:
|
||||
return queryset._cursor[key]
|
||||
|
||||
return queryset._document._from_son(
|
||||
queryset._cursor[key],
|
||||
_auto_dereference=self._auto_dereference,
|
||||
only_fields=self.only_fields,
|
||||
queryset._cursor[key], _auto_dereference=self._auto_dereference,
|
||||
)
|
||||
|
||||
raise TypeError("Provide a slice or an integer index")
|
||||
@ -719,12 +714,10 @@ class BaseQuerySet:
|
||||
|
||||
if full_response:
|
||||
if result["value"] is not None:
|
||||
result["value"] = self._document._from_son(
|
||||
result["value"], only_fields=self.only_fields
|
||||
)
|
||||
result["value"] = self._document._from_son(result["value"])
|
||||
else:
|
||||
if result is not None:
|
||||
result = self._document._from_son(result, only_fields=self.only_fields)
|
||||
result = self._document._from_son(result)
|
||||
|
||||
return result
|
||||
|
||||
@ -757,18 +750,14 @@ class BaseQuerySet:
|
||||
docs = self._collection.find({"_id": {"$in": object_ids}}, **self._cursor_args)
|
||||
if self._scalar:
|
||||
for doc in docs:
|
||||
doc_map[doc["_id"]] = self._get_scalar(
|
||||
self._document._from_son(doc, only_fields=self.only_fields)
|
||||
)
|
||||
doc_map[doc["_id"]] = self._get_scalar(self._document._from_son(doc))
|
||||
elif self._as_pymongo:
|
||||
for doc in docs:
|
||||
doc_map[doc["_id"]] = doc
|
||||
else:
|
||||
for doc in docs:
|
||||
doc_map[doc["_id"]] = self._document._from_son(
|
||||
doc,
|
||||
only_fields=self.only_fields,
|
||||
_auto_dereference=self._auto_dereference,
|
||||
doc, _auto_dereference=self._auto_dereference,
|
||||
)
|
||||
|
||||
return doc_map
|
||||
@ -841,7 +830,6 @@ class BaseQuerySet:
|
||||
"_collation",
|
||||
"_auto_dereference",
|
||||
"_search_text",
|
||||
"only_fields",
|
||||
"_max_time_ms",
|
||||
"_comment",
|
||||
"_batch_size",
|
||||
@ -1045,7 +1033,6 @@ class BaseQuerySet:
|
||||
.. versionchanged:: 0.5 - Added subfield support
|
||||
"""
|
||||
fields = {f: QueryFieldList.ONLY for f in fields}
|
||||
self.only_fields = list(fields.keys())
|
||||
return self.fields(True, **fields)
|
||||
|
||||
def exclude(self, *fields):
|
||||
@ -1310,10 +1297,7 @@ class BaseQuerySet:
|
||||
def from_json(self, json_data):
|
||||
"""Converts json data to unsaved objects"""
|
||||
son_data = json_util.loads(json_data)
|
||||
return [
|
||||
self._document._from_son(data, only_fields=self.only_fields)
|
||||
for data in son_data
|
||||
]
|
||||
return [self._document._from_son(data) for data in son_data]
|
||||
|
||||
def aggregate(self, pipeline, *suppl_pipeline, **kwargs):
|
||||
"""Perform a aggregate function based in your queryset params
|
||||
@ -1638,9 +1622,7 @@ class BaseQuerySet:
|
||||
return raw_doc
|
||||
|
||||
doc = self._document._from_son(
|
||||
raw_doc,
|
||||
_auto_dereference=self._auto_dereference,
|
||||
only_fields=self.only_fields,
|
||||
raw_doc, _auto_dereference=self._auto_dereference,
|
||||
)
|
||||
|
||||
if self._scalar:
|
||||
|
@ -3434,7 +3434,7 @@ class TestDocumentInstance(MongoDBTestCase):
|
||||
assert obj3 != dbref2
|
||||
assert dbref2 != obj3
|
||||
|
||||
def test_default_values(self):
|
||||
def test_default_values_dont_get_override_upon_save_when_only_is_used(self):
|
||||
class Person(Document):
|
||||
created_on = DateTimeField(default=lambda: datetime.utcnow())
|
||||
name = StringField()
|
||||
|
Loading…
x
Reference in New Issue
Block a user