Coverage for apis_core/apis_metainfo/viewsets.py: 50%
18 statements
« prev ^ index » next coverage.py v7.6.8, created at 2024-12-20 09:24 +0000
« prev ^ index » next coverage.py v7.6.8, created at 2024-12-20 09:24 +0000
1from django.http import HttpResponseRedirect, QueryDict
2from django.shortcuts import get_object_or_404
3from drf_spectacular.utils import OpenApiParameter, OpenApiTypes, extend_schema
4from rest_framework import viewsets
5from rest_framework.response import Response
7from apis_core.apis_metainfo.models import Uri
10class UriToObjectViewSet(viewsets.ViewSet):
11 """
12 This API route provides an endpoint for resolving URIs and forwarding
13 them to the endpoint in the local instance. Pass a `uri` request
14 parameter to resolve the uri.
15 """
17 @extend_schema(
18 parameters=[
19 OpenApiParameter(
20 "uri", OpenApiTypes.URI, OpenApiParameter.QUERY
21 ), # path variable was overridden
22 ],
23 responses={301: None},
24 description="This API route provides an endpoint for resolving URIs and forwarding them to the endpoint in the local instance. Pass a `uri` request parameter to resolve the uri.",
25 )
26 def list(self, request):
27 params = request.query_params.dict()
28 uri = params.pop("uri", None)
29 if uri:
30 u = get_object_or_404(Uri, uri=request.query_params.get("uri"))
31 r = u.root_object.get_api_detail_endpoint()
32 if params:
33 r += "?" + QueryDict.from_keys(params).urlencode()
34 return HttpResponseRedirect(r)
35 return Response()