-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathbase.py
More file actions
51 lines (39 loc) · 1.71 KB
/
base.py
File metadata and controls
51 lines (39 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from drf_spectacular.utils import extend_schema
from rest_framework.generics import GenericAPIView
from rest_framework.request import Request
from rest_framework.response import Response
from common.auth.cognito_jwt import backend
from public_api.metrics_interface.interface import MetricsPublicAPIInterface
from public_api.serializers.api_time_series_request_serializer import (
APITimeSeriesDTO,
APITimeSeriesRequestSerializer,
)
PUBLIC_API_TAG = "public-api"
class BaseNestedAPITimeSeriesView(GenericAPIView):
queryset = MetricsPublicAPIInterface.get_api_timeseries_model().objects.all()
@property
def lookup_field(self):
raise NotImplementedError
@property
def serializer_class(self):
raise NotImplementedError
def _build_request_serializer(
self, *, request: Request
) -> APITimeSeriesRequestSerializer:
serializer_context = {"request": request, "lookup_field": self.lookup_field}
return APITimeSeriesRequestSerializer(context=serializer_context)
@extend_schema(tags=[PUBLIC_API_TAG])
def get(self, request: Request, *args, **kwargs) -> Response:
serializer: APITimeSeriesRequestSerializer = self._build_request_serializer(
request=request
)
timeseries_dto_slice: list[APITimeSeriesDTO] = (
serializer.build_timeseries_dto_slice()
)
serializer = self.get_serializer(timeseries_dto_slice, many=True)
response = Response(data=serializer.data)
auth = backend.JSONWebTokenAuthentication()
is_valid_non_public_request = auth.authenticate(request)
if is_valid_non_public_request:
response["Cache-Control"] = "private, no-cache"
return response