1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- from time import time
- from django.core.exceptions import PermissionDenied
- from django.urls import reverse
- from django.utils.translation import gettext as _
- from rest_framework.decorators import api_view
- from rest_framework.response import Response
- from ..core.shortcuts import get_int_or_404
- from .searchproviders import searchproviders
- @api_view()
- def search(request, search_provider=None):
- allowed_providers = searchproviders.get_allowed_providers(request)
- if not request.user_acl["can_search"] or not allowed_providers:
- raise PermissionDenied(_("You don't have permission to search site."))
- search_query = get_search_query(request)
- response = []
- for provider in allowed_providers:
- provider_data = {
- "id": provider.url,
- "name": str(provider.name),
- "icon": provider.icon,
- "url": reverse("misago:search", kwargs={"search_provider": provider.url}),
- "api": reverse(
- "misago:api:search", kwargs={"search_provider": provider.url}
- ),
- "results": None,
- "time": None,
- }
- if not search_provider or search_provider == provider.url:
- start_time = time()
- if search_provider == provider.url:
- page = get_int_or_404(request.query_params.get("page", 1))
- else:
- page = 1
- provider_data["results"] = provider.search(search_query, page)
- provider_data["time"] = float("%.2f" % (time() - start_time))
- response.append(provider_data)
- return Response(response)
- def get_search_query(request):
- return request.query_params.get("q", "").strip()
|