diff options
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 |
commit | ca959330516334a3eb4edd8112ebb6d180c978ea (patch) | |
tree | c630c3bd6f5ca7d9e38bc4e8c28b703f62e1c09a | |
parent | aff5e9ac058d49a6184fa2e635604f3f4ef8a03f (diff) | |
download | Ishtar-ca959330516334a3eb4edd8112ebb6d180c978ea.tar.bz2 Ishtar-ca959330516334a3eb4edd8112ebb6d180c978ea.zip |
Serialization: add an info file - put types in a types dir
-rw-r--r-- | ishtar_common/serializers.py | 31 |
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 |