MCPcopy Index your code
hub / github.com/MongoEngine/mongoengine / _get_changed_fields

Method _get_changed_fields

mongoengine/base/document.py:639–686  ·  view source on GitHub ↗

Return a list of all fields that have explicitly been changed.

(self)

Source from the content-addressed store, hash-verified

637 )
638
639 def _get_changed_fields(self):
640 """Return a list of all fields that have explicitly been changed."""
641 EmbeddedDocument = _import_class("EmbeddedDocument")
642 LazyReferenceField = _import_class("LazyReferenceField")
643 ReferenceField = _import_class("ReferenceField")
644 GenericLazyReferenceField = _import_class("GenericLazyReferenceField")
645 GenericReferenceField = _import_class("GenericReferenceField")
646 SortedListField = _import_class("SortedListField")
647
648 changed_fields = []
649 changed_fields += getattr(self, "_changed_fields", [])
650
651 for field_name in self._fields_ordered:
652 db_field_name = self._db_field_map.get(field_name, field_name)
653 key = "%s." % db_field_name
654 data = self._data.get(field_name, None)
655 field = self._fields.get(field_name)
656
657 if db_field_name in changed_fields:
658 # Whole field already marked as changed, no need to go further
659 continue
660
661 if isinstance(field, ReferenceField): # Don't follow referenced documents
662 continue
663
664 if isinstance(data, EmbeddedDocument):
665 # Find all embedded fields that have been changed
666 changed = data._get_changed_fields()
667 changed_fields += [f"{key}{k}" for k in changed if k]
668 elif isinstance(data, (list, tuple, dict)):
669 if hasattr(field, "field") and isinstance(
670 field.field,
671 (
672 LazyReferenceField,
673 ReferenceField,
674 GenericLazyReferenceField,
675 GenericReferenceField,
676 ),
677 ):
678 continue
679 elif isinstance(field, SortedListField) and field._ordering:
680 # if ordering is affected whole list is changed
681 if any(field._ordering in d._changed_fields for d in data):
682 changed_fields.append(db_field_name)
683 continue
684
685 self._nestable_types_changed_fields(changed_fields, key, data)
686 return changed_fields
687
688 def _delta(self):
689 """Returns the delta (set, unset) of the changes for a document.

Callers 15

_clear_changed_fieldsMethod · 0.95
_deltaMethod · 0.95
deltaMethod · 0.80
delta_recursiveMethod · 0.80
delta_db_fieldMethod · 0.80
test_dynamic_deltaMethod · 0.80

Calls 3

_import_classFunction · 0.90
getMethod · 0.45