Esempio n. 1
0
    def search(request):
        """EXPENSIVE: Search with query param `query` throughout the database."""
        MIN_LENGTH = 3

        req_query = request.GET.get("query")
        if not req_query or len(req_query) < MIN_LENGTH:
            return Response({"message": "No query or too short!"}, status=400)

        # Search bodies by name and description
        bodies = query_search(request, MIN_LENGTH, Body.objects,
                              ['name', 'description'])

        # Search events by name and description
        events = get_prioritized(
            query_search(request, MIN_LENGTH, Event.objects,
                         ['name', 'description'])[:20], request)

        # Search users by only name: don't add anything else here
        users = query_search(request, MIN_LENGTH, UserProfile.objects,
                             ['name', 'ldap_id', 'roll_no'])[:20]

        return Response({
            "bodies": BodySerializerMin(bodies, many=True).data,
            "events": EventSerializer(events, many=True).data,
            "users": UserProfileSerializer(users, many=True).data
        })
Esempio n. 2
0
 def training_blog(cls, request):
     """Get Training Blog."""
     queryset = BlogEntry.objects.filter(
         blog_url=settings.TRAINING_BLOG_URL)
     queryset = query_search(request, 3, queryset, ['title', 'content'])
     queryset = query_from_num(request, 20, queryset)
     return Response(BlogEntrySerializer(queryset, many=True).data)
Esempio n. 3
0
    def placement_blog(cls, request):
        """Get Placement Blog."""
        queryset = BlogEntry.objects.filter(blog_url=settings.PLACEMENTS_URL)
        queryset = query_search(request, 3, queryset, ['title', 'content'])
        queryset = query_from_num(request, 20, queryset)

        return Response(BlogEntrySerializer(queryset, many=True).data)
Esempio n. 4
0
    def search(request):
        """EXPENSIVE: Search with query param `query` throughout the database."""
        MIN_LENGTH = 3

        req_query = request.GET.get("query")
        if not req_query or len(req_query) < MIN_LENGTH:
            return Response({"message": "No query or too short!"}, status=400)

        types = ('bodies', 'events', 'users')
        req_types = request.GET.get('types')
        if req_types:
            types = tuple(req_types.split(','))

        # Include only the types we want
        bodies, events, users = ([] for i in range(3))

        # Search bodies by name and description
        if 'bodies' in types:
            bodies = query_search(request,
                                  MIN_LENGTH,
                                  Body.objects, ['name', 'description'],
                                  'bodies',
                                  order_relevance=True)

        # Search events by name and description
        if 'events' in types:
            events = get_prioritized(
                query_search(request, MIN_LENGTH, Event.objects,
                             ['name', 'description'], 'events')[:20], request)

        # Search users by only name: don't add anything else here
        if 'users' in types:
            users = query_search(request,
                                 MIN_LENGTH,
                                 UserProfile.objects.filter(active=True),
                                 ['name', 'ldap_id', 'roll_no'],
                                 'profiles',
                                 order_relevance=True)[:20]

        return Response({
            "bodies": BodySerializerMin(bodies, many=True).data,
            "events": EventSerializer(events, many=True).data,
            "users": UserProfileSerializer(users, many=True).data
        })
Esempio n. 5
0
    def news_feed(request):
        """Get News feed."""
        # Filter for body
        body = request.GET.get('body')
        if body is not None:
            queryset = NewsEntry.objects.filter(body__id=body)
        else:
            queryset = NewsEntry.objects.all()

        # Paging and search
        queryset = query_search(request, 3, queryset, ['title', 'content'])
        queryset = query_from_num(request, 20, queryset)

        # Eagerly load data
        queryset = NewsEntrySerializer.setup_eager_loading(queryset)

        # Get sliced news items
        return Response(
            NewsEntrySerializer(queryset,
                                many=True,
                                context={
                                    'request': request
                                }).data)