diff options
-rw-r--r-- | archaeological_context_records/serializers.py | 16 | ||||
-rw-r--r-- | archaeological_finds/serializers.py | 10 | ||||
-rw-r--r-- | archaeological_finds/tests.py | 49 | ||||
-rw-r--r-- | archaeological_operations/serializers.py | 20 |
4 files changed, 85 insertions, 10 deletions
diff --git a/archaeological_context_records/serializers.py b/archaeological_context_records/serializers.py index 70e93f10f..7bb9b6724 100644 --- a/archaeological_context_records/serializers.py +++ b/archaeological_context_records/serializers.py @@ -10,8 +10,8 @@ CR_MODEL_LIST = [ def cr_serialization(archive=False, return_empty_types=False, - archive_name=None, operation_queryset=None, - site_queryset=None, cr_queryset=None): + 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) @@ -47,6 +47,18 @@ def cr_serialization(archive=False, return_empty_types=False, right_record_id__in=cr_ids, ) } + elif find_queryset: + find_ids = find_queryset.values_list("id", flat=True) + result_queryset = { + models.ContextRecord.__name__: models.ContextRecord.objects.filter( + base_finds__find__id__in=find_ids, + ), + models.RecordRelations.__name__: + models.RecordRelations.objects.filter( + left_record__base_finds__find__id__in=find_ids, + right_record__base_finds__find__id__in=find_ids, + ) + } result = generic_get_results(CR_MODEL_LIST, "context_records", result_queryset=result_queryset) diff --git a/archaeological_finds/serializers.py b/archaeological_finds/serializers.py index 5fc8d2224..56d113636 100644 --- a/archaeological_finds/serializers.py +++ b/archaeological_finds/serializers.py @@ -11,7 +11,8 @@ FIND_MODEL_LIST = [ def find_serialization(archive=False, return_empty_types=False, archive_name=None, operation_queryset=None, - site_queryset=None, cr_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) @@ -46,6 +47,13 @@ def find_serialization(archive=False, return_empty_types=False, 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(FIND_MODEL_LIST, "finds", result_queryset=result_queryset) full_archive = archive_serialization( diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index 63090ce04..2d6b85b1a 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -54,6 +54,8 @@ from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \ from archaeological_operations.tests import ImportTest, create_operation from archaeological_context_records.tests import ContextRecordInit +from archaeological_operations.serializers import operation_serialization +from archaeological_context_records.serializers import cr_serialization from archaeological_finds import serializers @@ -173,8 +175,22 @@ class SerializationTest(GenericSerializationTest, FindInit, TestCase): ) self.assertEqual(len(bfind_json), 1) - """ - def test_ope_serialization_with_cr_filter(self): + result_queryset = models.Find.objects.filter( + uuid=self.finds[0].uuid) + res = self.generic_serialization_test( + serializers.find_serialization, no_test=True, + kwargs={"find_queryset": result_queryset} + ) + find_json = json.loads( + res[('finds', 'archaeological_finds__Find')] + ) + self.assertEqual(len(find_json), 1) + bfind_json = json.loads( + res[('finds', 'archaeological_finds__BaseFind')] + ) + self.assertEqual(len(bfind_json), 1) + + def test_ope_serialization_with_find_filter(self): res = self.generic_serialization_test( operation_serialization, no_test=True, ) @@ -183,17 +199,38 @@ class SerializationTest(GenericSerializationTest, FindInit, TestCase): ) self.assertEqual(len(ope_json), 2) - result_queryset = models.ContextRecord.objects.filter( - uuid=self.context_records[0].uuid) + result_queryset = models.Find.objects.filter( + uuid=self.finds[0].uuid) res = self.generic_serialization_test( operation_serialization, no_test=True, - kwargs={"cr_queryset": result_queryset} + kwargs={"find_queryset": result_queryset} ) ope_json = json.loads( res[('operations', 'archaeological_operations__Operation')] ) self.assertEqual(len(ope_json), 1) - """ + + def test_cr_serialization_with_find_filter(self): + res = self.generic_serialization_test( + cr_serialization, no_test=True, + ) + cr_json = json.loads( + res[('context_records', + 'archaeological_context_records__ContextRecord')] + ) + self.assertEqual(len(cr_json), 2) + + result_queryset = models.Find.objects.filter( + uuid=self.finds[0].uuid) + res = self.generic_serialization_test( + cr_serialization, no_test=True, + kwargs={"find_queryset": result_queryset} + ) + cr_json = json.loads( + res[('context_records', + 'archaeological_context_records__ContextRecord')] + ) + self.assertEqual(len(cr_json), 1) def test_restore(self): current_number, zip_filename = self.generic_restore_test_genzip( diff --git a/archaeological_operations/serializers.py b/archaeological_operations/serializers.py index a480f307a..4dd6f106b 100644 --- a/archaeological_operations/serializers.py +++ b/archaeological_operations/serializers.py @@ -12,7 +12,8 @@ OPERATION_MODEL_LIST = [ def operation_serialization(archive=False, return_empty_types=False, archive_name=None, operation_queryset=None, - site_queryset=None, cr_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) @@ -54,6 +55,23 @@ def operation_serialization(archive=False, return_empty_types=False, right_record__context_record__id__in=cr_ids, ), } + elif find_queryset: + find_ids = find_queryset.values_list("id", flat=True) + result_queryset = { + models.ArchaeologicalSite.__name__: + models.ArchaeologicalSite.objects.filter( + operations__context_record__base_finds__find__id__in + =find_ids), + models.Operation.__name__: models.Operation.objects.filter( + context_record__base_finds__find__id__in=find_ids), + models.RecordRelations.__name__: + models.RecordRelations.objects.filter( + left_record__context_record__base_finds__find__id__in= + find_ids, + right_record__context_record__base_finds__find__id__in= + find_ids, + ), + } result = generic_get_results(OPERATION_MODEL_LIST, "operations", result_queryset=result_queryset) |