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 | 
