summaryrefslogtreecommitdiff
path: root/ishtar_common/serializers.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-08-29 15:57:28 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-01 10:32:52 +0200
commit857c17ea1f3f41dd17b0133f49e05c15229f97fb (patch)
treec630c3bd6f5ca7d9e38bc4e8c28b703f62e1c09a /ishtar_common/serializers.py
parent73f30398883b1f7659beb07751ec2677378200d3 (diff)
downloadIshtar-857c17ea1f3f41dd17b0133f49e05c15229f97fb.tar.bz2
Ishtar-857c17ea1f3f41dd17b0133f49e05c15229f97fb.zip
Serialization: add an info file - put types in a types dir
Diffstat (limited to 'ishtar_common/serializers.py')
-rw-r--r--ishtar_common/serializers.py31
1 files changed, 30 insertions, 1 deletions
diff --git a/ishtar_common/serializers.py b/ishtar_common/serializers.py
index 31caa8cb7..fdc3a6da5 100644
--- a/ishtar_common/serializers.py
+++ b/ishtar_common/serializers.py
@@ -1,12 +1,15 @@
import datetime
+import json
import os
import tempfile
from rest_framework import serializers
from zipfile import ZipFile
from django.apps import apps
+from django.contrib.sites.models import Site
from django.core.serializers import serialize
+from version import get_version
from . import models
@@ -15,6 +18,20 @@ class PublicSerializer(serializers.BaseSerializer):
return obj.public_representation()
+SERIALIZATION_VERSION = "1.0"
+
+
+def serialization_info():
+ site = Site.objects.get_current()
+ return json.dumps({
+ "serialize-version": SERIALIZATION_VERSION,
+ "ishtar-version": get_version(),
+ "domain": site.domain,
+ "name": site.name,
+ "date": datetime.datetime.now().isoformat()
+ }, indent=2)
+
+
def type_model_serialization(archive=False, return_empty_types=False,
archive_name=None):
"""
@@ -53,12 +70,24 @@ def type_model_serialization(archive=False, return_empty_types=False,
if not archive_name.endswith(".zip"):
archive_name += ".zip"
with tempfile.TemporaryDirectory() as tmpdirname:
+ os.mkdir(tmpdirname + os.sep + "types")
+
with ZipFile(archive_name, 'w') as current_zip:
+ base_filename = "info.json"
+ filename = tmpdirname + os.sep + base_filename
+ with open(filename, "w") as json_file:
+ json_file.write(serialization_info())
+ current_zip.write(filename, arcname=base_filename)
+
for model_name in result:
base_filename = model_name + ".json"
filename = tmpdirname + os.sep + base_filename
with open(filename, "w") as json_file:
json_file.write(result[model_name])
- current_zip.write(filename, arcname=base_filename)
+ current_zip.write(filename,
+ arcname="types" + os.sep + base_filename)
return archive_name
+
+def restore_serialized(archive_name):
+ pass