'collective_noun',
]
+class ThemeSerializer(serializers.ModelSerializer):
+ url = AbsoluteURLField()
+ href = AbsoluteURLField(
+ view_name='catalogue_api_theme',
+ view_args=('slug',)
+ )
+ class Meta:
+ model = Tag
+ fields = [
+ 'url', 'href', 'name', 'slug', 'sort_key', 'description',
+ ]
+
class TranslatorSerializer(serializers.Serializer):
name = serializers.CharField(source='*')
path('genres/<slug:slug>/',
piwik_track_view(views.GenreView.as_view()),
name='catalogue_api_genre'),
+ path('themes/',
+ piwik_track_view(views.ThemeList.as_view()),
+ name="catalogue_api_theme_list"),
+ path('themes/<slug:slug>/',
+ piwik_track_view(views.ThemeView.as_view()),
+ name='catalogue_api_theme'),
]
queryset = Tag.objects.filter(category='kind')
lookup_field = 'slug'
+class ThemeList(ListAPIView):
+ serializer_class = serializers.ThemeSerializer
+ queryset = Tag.objects.filter(category='theme')
+
+class ThemeView(RetrieveAPIView):
+ serializer_class = serializers.ThemeSerializer
+ queryset = Tag.objects.filter(category='theme')
+ lookup_field = 'slug'
+
class TagView(RetrieveAPIView):
permission_classes = [DjangoModelPermissionsOrAnonReadOnly]
#
from rest_framework.generics import ListAPIView
from rest_framework.response import Response
+from rest_framework import serializers
from rest_framework.views import APIView
+import catalogue.models
+import catalogue.api.serializers
from search.views import get_hints
from search.forms import SearchFilters
def get(self, request):
term = request.query_params.get('q')
hints = get_hints(term, request.user)
+ for h in hints:
+ if h.get('img'):
+ h['img'] = request.build_absolute_uri(h['img'])
return Response(hints)
def get(self, request):
term = self.request.query_params.get('q')
f = SearchFilters({'q': term})
- r = {}
if f.is_valid():
r = f.results()
- return Response(r)
+ res = {}
+ rl = res['author'] = []
+ c = {'request': request}
+ for item in r['author']:
+ rl.append(
+ catalogue.api.serializers.AuthorSerializer(item, context=c).data
+ )
+ rl = res['genre'] = []
+ for item in r['genre']:
+ rl.append(
+ catalogue.api.serializers.GenreSerializer(item, context=c).data
+ )
+ rl = res['theme'] = []
+ for item in r['theme']:
+ rl.append(
+ catalogue.api.serializers.ThemeSerializer(item, context=c).data
+ )
+
+ return Response(res)
+
class BookSearchView(ListAPIView):
- def get_queryset(self, request):
+ serializer_class = catalogue.api.serializers.BookSerializer
+
+ def get_queryset(self):
term = self.request.query_params.get('q')
+ f = SearchFilters({'q': term})
+ if f.is_valid():
+ r = f.results()
+ return r['book']
+ return []
+
+
+
+class SnippetSerializer(serializers.ModelSerializer):
+ anchor = serializers.CharField(source='sec')
+ headline = serializers.CharField()
+
+ class Meta:
+ model = catalogue.models.Snippet
+ fields = ['anchor', 'headline']
+
+
+class BookSnippetsSerializer(serializers.Serializer):
+ book = catalogue.api.serializers.BookSerializer()
+ snippets = SnippetSerializer(many=True)
+
class TextSearchView(ListAPIView):
- def get_queryset(self, request):
+ serializer_class = BookSnippetsSerializer
+
+ def get_queryset(self):
term = self.request.query_params.get('q')
+ f = SearchFilters({'q': term})
+ if f.is_valid():
+ r = f.results()
+ r = list({
+ 'book': book,
+ 'snippets': snippets
+ } for (book, snippets) in r['snippet'].items())
+ return r
+ return []
+