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

Method __setattr__

mongoengine/base/document.py:161–209  ·  view source on GitHub ↗
(self, name, value)

Source from the content-addressed store, hash-verified

159 super().__delattr__(*args, **kwargs)
160
161 def __setattr__(self, name, value):
162 # Handle dynamic data only if an initialised dynamic document
163 if self._dynamic and not self._dynamic_lock:
164 if name not in self._fields_ordered and not name.startswith("_"):
165 DynamicField = _import_class("DynamicField")
166 field = DynamicField(db_field=name, null=True)
167 field.name = name
168 self._dynamic_fields[name] = field
169 self._fields_ordered += (name,)
170
171 if not name.startswith("_"):
172 value = self.__expand_dynamic_values(name, value)
173
174 # Handle marking data as changed
175 if name in self._dynamic_fields:
176 self._data[name] = value
177 if hasattr(self, "_changed_fields"):
178 self._mark_as_changed(name)
179 try:
180 self__created = self._created
181 except AttributeError:
182 self__created = True
183
184 if (
185 self._is_document
186 and not self__created
187 and name in self._meta.get("shard_key", tuple())
188 and self._data.get(name) != value
189 ):
190 msg = "Shard Keys are immutable. Tried to update %s" % name
191 raise OperationError(msg)
192
193 try:
194 self__initialised = self._initialised
195 except AttributeError:
196 self__initialised = False
197
198 # Check if the user has created a new instance of a class
199 if (
200 self._is_document
201 and self__initialised
202 and self__created
203 and name == self._meta.get("id_field")
204 ):
205 # When setting the ID field of an instance already instantiated and that was user-created (i.e not saved in db yet)
206 # Typically this is when calling .save()
207 super().__setattr__("_created", False)
208
209 super().__setattr__(name, value)
210
211 def __getstate__(self):
212 data = {}

Callers

nothing calls this directly

Calls 6

_mark_as_changedMethod · 0.95
_import_classFunction · 0.90
OperationErrorClass · 0.90
DynamicFieldClass · 0.85
getMethod · 0.45

Tested by

no test coverage detected