Source code for opensearch_xml.views

"""
views for :mod:`opensearch_xml` application.

:creationdate:  13/06/2024 08:26
:moduleauthor: François GUÉRIN <fguerin@ville-tourcoing.fr>
:modulename: opensearch_xml.views
"""

import logging
from typing import Any

from django.conf import settings
from django.http import HttpResponse
from django.http.request import HttpRequest
from django.shortcuts import resolve_url
from django.template.loader import render_to_string

__author__ = "fguerin"
logger = logging.getLogger(__name__)


[docs] def opensearch_xml(request: HttpRequest) -> HttpResponse: """Render OpenSearch XML page.""" if settings.STATIC_URL.startswith("http") or settings.STATIC_URL.startswith("//"): _favicon_file = settings.STATIC_URL + settings.OPENSEARCH_XML_FAVICON_FILE else: _favicon_file = request.build_absolute_uri(settings.STATIC_URL + settings.OPENSEARCH_XML_FAVICON_FILE) context: dict[str, Any] = { "CONTACT_EMAIL": settings.OPENSEARCH_XML_CONTACT_EMAIL, "SHORT_NAME": settings.OPENSEARCH_XML_SHORT_NAME, "DESCRIPTION": settings.OPENSEARCH_XML_DESCRIPTION, "FAVICON_WIDTH": settings.OPENSEARCH_XML_FAVICON_WIDTH, "FAVICON_HEIGHT": settings.OPENSEARCH_XML_FAVICON_HEIGHT, "FAVICON_TYPE": settings.OPENSEARCH_XML_FAVICON_TYPE, "FAVICON_FILE": _favicon_file, "URL": "{url}?{querystring}{{searchTerms}}".format( # noqa: FS002 **{ "url": request.build_absolute_uri(resolve_url(to=settings.OPENSEARCH_XML_SEARCH_URL)), "querystring": settings.OPENSEARCH_XML_SEARCH_QUERYSTRING, } ), "INPUT_ENCODING": settings.OPENSEARCH_XML_INPUT_ENCODING.upper(), } output = render_to_string("opensearch_xml/opensearch.xml", context) logger.debug("opensearch_xml()\n%s", output) if settings.DEBUG: from xml.dom.minidom import parseString temp = parseString(output) logger.debug("opensearch_xml()\n%s", temp.toprettyxml()) return HttpResponse( output, content_type="application/opensearchdescription+xml", status=200, )