Skip to content

Commit 67eb86f

Browse files
authored
Merge pull request #319 from Mosquito-Alert/api_search_filter
Added search filter for reports
2 parents 851b7c6 + bffd724 commit 67eb86f

File tree

4 files changed

+20
-1
lines changed

4 files changed

+20
-1
lines changed

api/serializers.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,7 @@ class Meta:
710710
read_only_fields = fields
711711

712712
uuid = BaseReportSerializer().fields['uuid']
713+
short_id = BaseReportSerializer().fields['short_id']
713714
# NOTE: user_uuid is used by AIMA for knowing who to send notifications.
714715
user_uuid = BaseReportSerializer().fields['user_uuid']
715716
created_at = BaseReportSerializer().fields['created_at']
@@ -724,6 +725,7 @@ class Meta:
724725
model = BaseReportSerializer.Meta.model
725726
fields = (
726727
"uuid",
728+
"short_id",
727729
"user_uuid",
728730
"created_at",
729731
"created_at_local",

api/tests/integration/identification_tasks/assignments/schema.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ variables:
88
response_data_validation: &retrieve_validation
99
observation:
1010
uuid: !re_fullmatch "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
11+
short_id: !anystr
1112
user:
1213
uuid: !re_fullmatch "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
1314
locale: !anystr

api/tests/integration/identification_tasks/schema.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ variables:
88
response_data_validation: &retrieve_validation
99
observation:
1010
uuid: !re_fullmatch "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
11+
short_id: !anystr
1112
user_uuid: !re_fullmatch "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
1213
created_at: !re_fullmatch \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}Z
1314
created_at_local: !re_fullmatch \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}([+-]\d{2}:\d{2}|Z)

api/views.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from rest_framework import status
1818
from rest_framework.decorators import action
1919
from rest_framework.exceptions import ValidationError
20+
from rest_framework.filters import SearchFilter
2021
from rest_framework.mixins import (
2122
CreateModelMixin,
2223
ListModelMixin,
@@ -238,11 +239,14 @@ class BaseReportViewSet(
238239
"photos",
239240
queryset=Photo.objects.visible()
240241
)
242+
).annotate(
243+
pk_str=models.functions.Cast('pk', output_field=models.CharField()),
241244
).non_deleted().filter(point__isnull=False).order_by('-server_upload_time')
242245

243246
lookup_url_kwarg = "uuid"
244247

245-
filter_backends = (DjangoFilterBackend,)
248+
filter_backends = (DjangoFilterBackend, SearchFilter)
249+
search_fields = ("report_id", "pk_str")
246250

247251
permission_classes = (ReportPermissions,)
248252

@@ -535,9 +539,13 @@ class IdentificationTaskViewSet(RetrieveModelMixin, ListModelMixin, GenericNoMob
535539
"report__photos",
536540
queryset=Photo.objects.visible(),
537541
)
542+
).annotate(
543+
pk_str=models.functions.Cast('pk', output_field=models.CharField()),
538544
)
539545
serializer_class = IdentificationTaskSerializer
540546
filterset_class = IdentificationTaskFilter
547+
filter_backends = (DjangoFilterBackend, SearchFilter)
548+
search_fields = ("report__report_id", "pk_str")
541549
permission_classes = (IdentificationTaskPermissions | UserRolePermission,)
542550

543551
lookup_field = 'pk'
@@ -678,9 +686,14 @@ class AnnotationViewSet(IdentificationTaskNestedAttribute, NestedViewSetMixin, L
678686
report=models.OuterRef('report')
679687
)
680688
)
689+
).annotate(
690+
report_pk_str=models.functions.Cast('report_id', output_field=models.CharField()),
681691
)
692+
682693
serializer_class = AnnotationSerializer
694+
filter_backends = (DjangoFilterBackend, SearchFilter)
683695
filterset_class = AnnotationFilter
696+
search_fields = ("report_pk_str",) #NOTE: not filtering by 'report__report_id' because in not being shown in the response.
684697
permission_classes = (AnnotationPermissions | UserRolePermission, )
685698

686699
parent_lookup_kwargs = {
@@ -736,7 +749,9 @@ def get_queryset(self):
736749
class MyAnnotationViewSet(ListModelMixin, GenericNoMobileViewSet):
737750
queryset = IdentificationTaskViewSet.AnnotationViewSet.queryset
738751
serializer_class = IdentificationTaskViewSet.AnnotationViewSet.serializer_class
752+
filter_backends = IdentificationTaskViewSet.AnnotationViewSet.filter_backends
739753
filterset_class = IdentificationTaskViewSet.AnnotationViewSet.filterset_class
754+
search_fields = IdentificationTaskViewSet.AnnotationViewSet.search_fields
740755
permission_classes = (MyAnnotationPermissions, )
741756

742757
lookup_field = 'pk'

0 commit comments

Comments
 (0)