Mark a key as explicitly changed by the user.
(self, key)
| 519 | return value |
| 520 | |
| 521 | def _mark_as_changed(self, key): |
| 522 | """Mark a key as explicitly changed by the user.""" |
| 523 | if not hasattr(self, "_changed_fields"): |
| 524 | return |
| 525 | |
| 526 | if "." in key: |
| 527 | key, rest = key.split(".", 1) |
| 528 | key = self._db_field_map.get(key, key) |
| 529 | key = f"{key}.{rest}" |
| 530 | else: |
| 531 | key = self._db_field_map.get(key, key) |
| 532 | |
| 533 | if key not in self._changed_fields: |
| 534 | levels, idx = key.split("."), 1 |
| 535 | while idx <= len(levels): |
| 536 | if ".".join(levels[:idx]) in self._changed_fields: |
| 537 | break |
| 538 | idx += 1 |
| 539 | else: |
| 540 | self._changed_fields.append(key) |
| 541 | # remove lower level changed fields |
| 542 | level = ".".join(levels[:idx]) + "." |
| 543 | remove = self._changed_fields.remove |
| 544 | for field in self._changed_fields[:]: |
| 545 | if field.startswith(level): |
| 546 | remove(field) |
| 547 | |
| 548 | def _clear_changed_fields(self): |
| 549 | """Using _get_changed_fields iterate and remove any fields that |
no test coverage detected