From e7614d1947bf327228bc5e9aa306def5c599fe6c Mon Sep 17 00:00:00 2001 From: Birger Schacht Date: Tue, 18 Apr 2023 10:20:09 +0200 Subject: [PATCH] WIP: start working on #25 --- apis_bibsonomy/api_views.py | 20 +++++++++++++++++++ apis_bibsonomy/serializers.py | 12 +++++++++++ .../apis_bibsonomy/reference_list.html | 12 +++++++++++ apis_bibsonomy/templates/base.html | 9 +++++++++ .../templatetags/bibsonomy_templatetags.py | 5 +++++ apis_bibsonomy/urls.py | 7 ++++--- apis_bibsonomy/views.py | 16 +++++++++++++++ 7 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 apis_bibsonomy/serializers.py create mode 100644 apis_bibsonomy/templates/apis_bibsonomy/reference_list.html create mode 100644 apis_bibsonomy/templates/base.html create mode 100644 apis_bibsonomy/views.py diff --git a/apis_bibsonomy/api_views.py b/apis_bibsonomy/api_views.py index 16bca63..2b4cbc0 100644 --- a/apis_bibsonomy/api_views.py +++ b/apis_bibsonomy/api_views.py @@ -8,9 +8,29 @@ from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView +from rest_framework import viewsets, generics from .models import Reference from .utils import BibsonomyEntry +from .serializers import ReferenceSerializer, ReferenceQuerySerializer + +class ReferenceList(APIView): + """ + API endpoint that allows references to be viewed. + """ + authentication_classes = [] + permission_classes = [] + + def post(self, request, format=None): + serializer = ReferenceQuerySerializer(data=request.data, many=True) + references = [] + if serializer.is_valid(): + for item in serializer.validated_data: + print(item) + references.extend(list(Reference.objects.filter(**item))) + print(references) + reference_data = ReferenceSerializer(references, many=True).data + return Response(reference_data) class SaveBibsonomyEntry(APIView): diff --git a/apis_bibsonomy/serializers.py b/apis_bibsonomy/serializers.py new file mode 100644 index 0000000..86a91d3 --- /dev/null +++ b/apis_bibsonomy/serializers.py @@ -0,0 +1,12 @@ +from .models import Reference +from rest_framework import serializers + + +class ReferenceSerializer(serializers.ModelSerializer): + class Meta: + model = Reference + fields = '__all__' + +class ReferenceQuerySerializer(serializers.Serializer): + content_type_id = serializers.IntegerField() + object_id = serializers.IntegerField() diff --git a/apis_bibsonomy/templates/apis_bibsonomy/reference_list.html b/apis_bibsonomy/templates/apis_bibsonomy/reference_list.html new file mode 100644 index 0000000..e355364 --- /dev/null +++ b/apis_bibsonomy/templates/apis_bibsonomy/reference_list.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} +{% load bibsonomy_templatetags %} + +{% block content %} + +{% endblock content %} diff --git a/apis_bibsonomy/templates/base.html b/apis_bibsonomy/templates/base.html new file mode 100644 index 0000000..c8e90d9 --- /dev/null +++ b/apis_bibsonomy/templates/base.html @@ -0,0 +1,9 @@ + + + + Bibsonomy + + + {% block content %}{% endblock content %} + + diff --git a/apis_bibsonomy/templatetags/bibsonomy_templatetags.py b/apis_bibsonomy/templatetags/bibsonomy_templatetags.py index fa8c0d6..f815711 100644 --- a/apis_bibsonomy/templatetags/bibsonomy_templatetags.py +++ b/apis_bibsonomy/templatetags/bibsonomy_templatetags.py @@ -1,3 +1,5 @@ +import json + from django import template from apis_bibsonomy.forms import ReferenceForm @@ -16,3 +18,6 @@ def bibsonomy_list(content_type=None, object_pk=None, attribute_name=None): c_dict = {'content_type': content_type, 'object_pk': object_pk, 'attribute_name': attribute_name} form = ReferenceForm(**c_dict) return {"form": form} + +def json(value): + return json.loads(value) diff --git a/apis_bibsonomy/urls.py b/apis_bibsonomy/urls.py index 38bc236..f4a7993 100644 --- a/apis_bibsonomy/urls.py +++ b/apis_bibsonomy/urls.py @@ -1,11 +1,12 @@ +from rest_framework.routers import DefaultRouter from django.urls import path -from . import api_views +from . import api_views, views from . import autocompletes app_name = 'apis_bibsonomy' urlpatterns = [ path('save_get/', api_views.SaveBibsonomyEntry.as_view(), name='savegetbibsonomyentry'), - path('autocomplete/', autocompletes.BibsonomyAutocomplete.as_view(), name='bibsonomyautocomplete') + path('autocomplete/', autocompletes.BibsonomyAutocomplete.as_view(), name='bibsonomyautocomplete'), + path('references/', views.ReferenceListView.as_view(), name='referenceslist'), ] - diff --git a/apis_bibsonomy/views.py b/apis_bibsonomy/views.py new file mode 100644 index 0000000..8947efc --- /dev/null +++ b/apis_bibsonomy/views.py @@ -0,0 +1,16 @@ +from django.views.generic.list import ListView +from django.db.models import Q + +from .models import Reference + + +class ReferenceListView(ListView): + def get_queryset(self): + ctois = self.request.GET.getlist("ctoi") + q_objects = Q() + for ctoi in ctois: + ctoi = ctoi.split(":") + if len(ctoi) == 2: + q_objects |= Q(content_type__id=ctoi[0], object_id=ctoi[1]) + refs = Reference.objects.filter(q_objects) + return refs