Skip to content

Commit

Permalink
Another stab at error-tolerant versioning
Browse files Browse the repository at this point in the history
  • Loading branch information
FreneticScribbler committed Jun 28, 2023
1 parent 53b09e4 commit 29db3b5
Showing 1 changed file with 13 additions and 9 deletions.
22 changes: 13 additions & 9 deletions versioning/versioning.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ def diff(self):

class ModelComparison:
def __init__(self, old=None, new=None, version=None, follow=False, excluded_keys=['date_joined']):
if new is None and old is None:
logging.warning("Both new and old are none, this won't work")
pass
# recieves two objects of the same model, and compares them. Returns an array of FieldCompare objects
try:
self.fields = old._meta.get_fields()
Expand Down Expand Up @@ -152,19 +155,20 @@ def item_changes(self):
from training.models import TrainingLevelQualification, TrainingItemQualification
if self.follow and self.version.object is not None:
item_type = ContentType.objects.get_for_model(self.version.object)
old_item_versions = self.version.parent.revision.version_set.exclude(content_type=item_type).exclude(content_type=ContentType.objects.get_for_model(TrainingItemQualification)) \
.exclude(content_type=ContentType.objects.get_for_model(TrainingLevelQualification))
new_item_versions = self.version.revision.version_set.exclude(content_type=item_type).exclude(content_type=ContentType.objects.get_for_model(EventAuthorisation))

comparisonParams = {'excluded_keys': ['id', 'event', 'order', 'checklist', 'level', '_order', 'date_joined']}

# Build some dicts of what we have
item_dict = {} # build a list of items, key is the item_pk
for version in old_item_versions: # put all the old versions in a list
if version is None or version._object_version is None:
logging.warning(f"Something was null when it really shouldn't be! {old_item_versions}")
compare = ModelComparison(old=version._object_version.object, **comparisonParams)
item_dict[version.object_id] = compare
if self.version.parent is not None:
old_item_versions = self.version.parent.revision.version_set.exclude(content_type=item_type).exclude(content_type=ContentType.objects.get_for_model(TrainingItemQualification)) \
.exclude(content_type=ContentType.objects.get_for_model(TrainingLevelQualification))
for version in old_item_versions: # put all the old versions in a list
if version is None or version._object_version is None:
logging.warning(f"Something was null when it really shouldn't be! {old_item_versions}")
compare = ModelComparison(old=version._object_version.object, **comparisonParams)
item_dict[version.object_id] = compare

for version in new_item_versions: # go through the new versions
try:
Expand Down Expand Up @@ -227,7 +231,7 @@ def parent(self):
try:
previousVersion = versions.filter(revision_id__lt=self.revision_id).latest('revision__date_created')
except ObjectDoesNotExist:
return False
return None

return previousVersion

Expand All @@ -236,7 +240,7 @@ def changes(self):
return ModelComparison(
version=self,
new=self._object_version.object,
old=self.parent._object_version.object if self.parent else None,
old=self.parent._object_version.object,
follow=True
)

Expand Down

0 comments on commit 29db3b5

Please sign in to comment.