diff options
Diffstat (limited to 'archaeological_warehouse/serializers.py')
-rw-r--r-- | archaeological_warehouse/serializers.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/archaeological_warehouse/serializers.py b/archaeological_warehouse/serializers.py new file mode 100644 index 000000000..888c7d33f --- /dev/null +++ b/archaeological_warehouse/serializers.py @@ -0,0 +1,67 @@ +from ishtar_common.serializers import generic_get_results, archive_serialization +from archaeological_warehouse import models + + +WAREHOUSE_MODEL_LIST = [ + models.Warehouse, models.Container, + models.WarehouseDivisionLink, + models.ContainerLocalisation +] + +# TODO: associated documents + + +def warehouse_serialization(archive=False, return_empty_types=False, + archive_name=None, operation_queryset=None, + site_queryset=None, cr_queryset=None, + find_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), + } + elif find_queryset: + find_ids = find_queryset.values_list("id", flat=True) + result_queryset = { + models.BaseFind.__name__: models.BaseFind.objects.filter( + find__id__in=find_ids), + models.Find.__name__: find_queryset, + } + """ + result = generic_get_results(WAREHOUSE_MODEL_LIST, "warehouse", + result_queryset=result_queryset) + full_archive = archive_serialization( + result, archive_dir="warehouse", archive=archive, + return_empty_types=return_empty_types, archive_name=archive_name, + ) + return full_archive |