summaryrefslogtreecommitdiff
path: root/archaeological_finds/serializers.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-04 19:04:05 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-04 19:04:05 +0200
commit6f6485c8ebf46843209d70bcd4dfb5fb78417c29 (patch)
treec0c99bf70f7df262cd5a76b9b17bcd7dfb84a66c /archaeological_finds/serializers.py
parentda243748fc3ef819f93835329e5af245b26f2de8 (diff)
downloadIshtar-6f6485c8ebf46843209d70bcd4dfb5fb78417c29.tar.bz2
Ishtar-6f6485c8ebf46843209d70bcd4dfb5fb78417c29.zip
Serialization: finds - UUID for finds, base finds and baskets
Diffstat (limited to 'archaeological_finds/serializers.py')
-rw-r--r--archaeological_finds/serializers.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/archaeological_finds/serializers.py b/archaeological_finds/serializers.py
new file mode 100644
index 000000000..5fc8d2224
--- /dev/null
+++ b/archaeological_finds/serializers.py
@@ -0,0 +1,55 @@
+from ishtar_common.serializers import generic_get_results, archive_serialization
+from archaeological_finds import models
+
+
+FIND_MODEL_LIST = [
+ models.BaseFind, models.Find
+]
+
+# TODO: associated documents, property, findbasket
+
+
+def find_serialization(archive=False, return_empty_types=False,
+ archive_name=None, operation_queryset=None,
+ site_queryset=None, cr_queryset=None):
+ result_queryset = {}
+ if operation_queryset:
+ operation_ids = operation_queryset.values_list("id", flat=True)
+ result_queryset = {
+ models.BaseFind.__name__:
+ models.BaseFind.objects.filter(
+ context_record__operation_id__in=operation_ids),
+ models.Find.__name__:
+ models.Find.objects.filter(
+ base_finds__context_record__operation_id__in=operation_ids),
+ }
+ elif site_queryset:
+ sites = site_queryset.values_list("id", flat=True)
+ f_q = {
+ "base_finds__context_record__operation__archaeological_site_id__in": sites
+ }
+ result_queryset = {
+ models.BaseFind.__name__:
+ models.BaseFind.objects.filter(
+ context_record__operation__archaeological_site_id__in=sites
+ ),
+ models.Find.__name__:
+ models.Find.objects.filter(**f_q),
+ }
+ elif cr_queryset:
+ cr_ids = cr_queryset.values_list("id", flat=True)
+ result_queryset = {
+ models.BaseFind.__name__:
+ models.BaseFind.objects.filter(
+ context_record__in=cr_ids),
+ models.Find.__name__:
+ models.Find.objects.filter(
+ base_finds__context_record__in=cr_ids),
+ }
+ result = generic_get_results(FIND_MODEL_LIST, "finds",
+ result_queryset=result_queryset)
+ full_archive = archive_serialization(
+ result, archive_dir="operations", archive=archive,
+ return_empty_types=return_empty_types, archive_name=archive_name,
+ )
+ return full_archive