diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-06 11:25:23 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-06 13:14:50 +0200 |
commit | a81fecad08c628e001357f085880cd10c918649d (patch) | |
tree | c90abf2c8ef326981b60fcde7691afbb1f6d1b8d /archaeological_warehouse/serializers.py | |
parent | 8e66679fe3d58abf081629ed1e8ab3528d09205d (diff) | |
download | Ishtar-a81fecad08c628e001357f085880cd10c918649d.tar.bz2 Ishtar-a81fecad08c628e001357f085880cd10c918649d.zip |
Serializers: warehouse module
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 |