1 # This file is part of Wolne Lektury, licensed under GNU Affero GPLv3 or later.
2 # Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
4 from rest_framework.generics import ListAPIView
5 from rest_framework.response import Response
6 from rest_framework import serializers
7 from rest_framework.views import APIView
8 import catalogue.models
9 import catalogue.api.serializers
10 from search.views import get_hints
11 from search.forms import SearchFilters
14 class HintView(APIView):
15 def get(self, request):
16 term = request.query_params.get('q')
17 hints = get_hints(term, request.user)
20 h['img'] = request.build_absolute_uri(h['img'])
21 return Response(hints)
24 class SearchView(APIView):
25 def get(self, request):
26 term = self.request.query_params.get('q')
27 f = SearchFilters({'q': term})
31 rl = res['author'] = []
32 c = {'request': request}
33 for item in r['author']:
35 catalogue.api.serializers.AuthorSerializer(item, context=c).data
37 rl = res['genre'] = []
38 for item in r['genre']:
40 catalogue.api.serializers.GenreSerializer(item, context=c).data
42 rl = res['theme'] = []
43 for item in r['theme']:
45 catalogue.api.serializers.ThemeSerializer(item, context=c).data
51 class BookSearchView(ListAPIView):
52 serializer_class = catalogue.api.serializers.BookSerializer
54 def get_queryset(self):
55 term = self.request.query_params.get('q')
56 f = SearchFilters({'q': term})
64 class SnippetSerializer(serializers.ModelSerializer):
65 anchor = serializers.CharField(source='sec')
66 headline = serializers.CharField()
69 model = catalogue.models.Snippet
70 fields = ['anchor', 'headline']
73 class BookSnippetsSerializer(serializers.Serializer):
74 book = catalogue.api.serializers.BookSerializer()
75 snippets = SnippetSerializer(many=True)
78 class TextSearchView(ListAPIView):
79 serializer_class = BookSnippetsSerializer
81 def get_queryset(self):
82 term = self.request.query_params.get('q')
83 f = SearchFilters({'q': term})
89 } for (book, snippets) in r['snippet'].items())