Coverage for website/thaliawebsite/api/v2/admin/model/diff.py: 81.82%
29 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from django.forms import model_to_dict
4class ModelDiffCalculator:
5 def __init__(self, initial):
6 self.__initial = self._dict(initial)
7 self._new_object = None
9 def set_changed_model(self, new_object):
10 data = self._dict(new_object)
11 if self._new_object is not None: 11 ↛ 12line 11 didn't jump to line 12 because the condition on line 11 was never true
12 self.__initial = data
13 self._new_object = data
14 return self
16 @property
17 def diff(self):
18 if not self._new_object: 18 ↛ 19line 18 didn't jump to line 19 because the condition on line 18 was never true
19 return {}
20 d1 = self.__initial
21 d2 = self._new_object
22 diffs = [(k, (v, d2[k])) for k, v in d1.items() if v != d2[k]]
23 return dict(diffs)
25 @property
26 def has_changed(self):
27 return bool(self.diff)
29 @property
30 def changed_fields(self):
31 return list(self.diff.keys())
33 def get_field_diff(self, field_name):
34 return self.diff.get(field_name, None)
36 def _dict(self, model):
37 return model_to_dict(model, fields=[field.name for field in model._meta.fields])