summaryrefslogtreecommitdiff
path: root/ishtar_common/serializers.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/serializers.py')
-rw-r--r--ishtar_common/serializers.py36
1 files changed, 31 insertions, 5 deletions
diff --git a/ishtar_common/serializers.py b/ishtar_common/serializers.py
index 99ec79933..6ff0ae9bb 100644
--- a/ishtar_common/serializers.py
+++ b/ishtar_common/serializers.py
@@ -276,7 +276,7 @@ def full_serialization(operation_queryset=None, site_queryset=None,
return archive_name
-def restore_serialized(archive_name, delete_existing=False):
+def restore_serialized(archive_name, user=None, delete_existing=False):
with zipfile.ZipFile(archive_name, "r") as zip_file:
# check version
info = json.loads(zip_file.read("info.json").decode("utf-8"))
@@ -321,15 +321,41 @@ def restore_serialized(archive_name, delete_existing=False):
if delete_existing:
model.objects.all().delete()
data = zip_file.read(json_filename).decode("utf-8")
+ # regenerate labels, add a new version, etc.
+ historized = hasattr(model, "history_modifier") and (
+ hasattr(model, "history_creator"))
+ need_resave = hasattr(model, "CACHED_LABELS") or \
+ hasattr(model, "cached_label") or \
+ (user and historized)
idx = -1
for idx, obj in enumerate(deserialize("json", data)):
+ extra_attrs = {}
+ if historized and not user:
+ keys = obj.object.natural_key()
+ old_obj = None
+ try:
+ old_obj = model.objects.get_by_natural_key(
+ *keys)
+ except model.DoesNotExist:
+ pass
+ if old_obj and (old_obj.history_creator or
+ old_obj.history_modifier):
+ extra_attrs = {
+ "history_modifier_id":
+ old_obj.history_modifier_id,
+ "history_creator_id":
+ old_obj.history_creator_id
+ }
obj.save()
- # force reindex
- if hasattr(model, "CACHED_LABELS") or \
- hasattr(model, "cached_label"):
+ if need_resave or extra_attrs:
obj = model.objects.get(id=obj.object.id)
- obj.skip_history_when_saving = True
+ if user:
+ obj.history_modifier = user
+ else:
+ obj.skip_history_when_saving = True
obj._no_move = True
+ for k in extra_attrs:
+ setattr(obj, k, extra_attrs[k])
obj.save()
if idx >= 0:
result.append((model.__name__, idx + 1))