(self, name, value)
| 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 = {} |
nothing calls this directly
no test coverage detected