def retrieve_formatted(self, request, pk=None): item = self.get_object() serializer = ExpandedCredentialSerializer(item) return Response(serializer.data)
def list_credentials(self, request, pk=None): item = self.get_object() queryset = item.credentials serializer = ExpandedCredentialSerializer(queryset, many=True) return Response(serializer.data)
def list_historical_credentials(self, request, pk=None): item = self.get_object() queryset = item.credentials.filter(Q(revoked=True) | Q(inactive=True)) serializer = ExpandedCredentialSerializer(queryset, many=True) return Response(serializer.data)
class TopicViewSet(ReadOnlyModelViewSet): serializer_class = TopicSerializer queryset = Topic.objects.all() @action(detail=True, url_path="formatted", methods=["get"]) def retrieve_formatted(self, request, pk=None): item = self.get_object() serializer = CustomTopicSerializer(item) return Response(serializer.data) @swagger_auto_schema( responses={200: ExpandedCredentialSerializer(many=True)}) @action(detail=True, url_path="credential", methods=["get"]) def list_credentials(self, request, pk=None): item = self.get_object() queryset = item.credentials serializer = ExpandedCredentialSerializer(queryset, many=True) return Response(serializer.data) @swagger_auto_schema( responses={200: ExpandedCredentialSerializer(many=True)}) @action(detail=True, url_path="credential/active", methods=["get"]) def list_active_credentials(self, request, pk=None): item = self.get_object() queryset = item.credentials.filter(revoked=False, inactive=False) serializer = ExpandedCredentialSerializer(queryset, many=True) return Response(serializer.data) @swagger_auto_schema( responses={200: ExpandedCredentialSerializer(many=True)}) @action(detail=True, url_path="credential/historical", methods=["get"]) def list_historical_credentials(self, request, pk=None): item = self.get_object() queryset = item.credentials.filter(Q(revoked=True) | Q(inactive=True)) serializer = ExpandedCredentialSerializer(queryset, many=True) return Response(serializer.data) @swagger_auto_schema(responses={200: TopicSerializer(many=False)}) @action( detail=False, methods=["get"], url_path="ident/(?P<type>[^/]+)/(?P<source_id>[^/.]+)", ) def retrieve_by_type(self, request, type=None, source_id=None): return self.retrieve(request) @swagger_auto_schema(responses={200: CustomTopicSerializer(many=False)}) @action( detail=False, methods=["get"], url_path="ident/(?P<type>[^/]+)/(?P<source_id>[^/.]+)/formatted", ) def retrieve_by_type_formatted(self, request, type=None, source_id=None): return self.retrieve_formatted(request) @swagger_auto_schema( responses={200: ExpandedCredentialSetSerializer(many=True)}) @action(detail=True, url_path="credentialset", methods=["get"]) def list_credential_sets(self, request, pk=None): item = self.get_object() queryset = item.credential_sets.order_by("first_effective_date").all() serializer = ExpandedCredentialSetSerializer(queryset, many=True) return Response(serializer.data) def get_object(self): if self.kwargs.get("pk"): return super(TopicViewSet, self).get_object() type = self.kwargs.get("type") source_id = self.kwargs.get("source_id") if not type or not source_id: raise Http404() queryset = self.filter_queryset(self.get_queryset()) obj = get_object_or_404(queryset, type=type, source_id=source_id) # May raise a permission denied self.check_object_permissions(self.request, obj) return obj