[typing] add ExtendedRequest

webapp.py monkey-patches the Flask request global.
This commit adds a type cast so that e.g. Pyright[1]
doesn't show "Cannot access member" errors everywhere.

[1]: https://github.com/microsoft/pyright
This commit is contained in:
Martin Fischer 2022-01-17 07:54:37 +01:00
parent 96ab5e57ff
commit 1ed618222f

View File

@ -14,6 +14,8 @@ from datetime import datetime, timedelta
from timeit import default_timer
from html import escape
from io import StringIO
import typing
from typing import List, Dict
import urllib
from urllib.parse import urlencode
@ -28,7 +30,6 @@ import flask
from flask import (
Flask,
request,
render_template,
url_for,
Response,
@ -89,7 +90,7 @@ from searx.utils import (
)
from searx.version import VERSION_STRING, GIT_URL, GIT_BRANCH
from searx.query import RawTextQuery
from searx.plugins import plugins, initialize as plugin_initialize
from searx.plugins import Plugin, plugins, initialize as plugin_initialize
from searx.plugins.oa_doi_rewrite import get_doi_resolver
from searx.preferences import (
Preferences,
@ -224,6 +225,21 @@ exception_classname_to_text = {
_flask_babel_get_translations = flask_babel.get_translations
class ExtendedRequest(flask.Request):
"""This class is never initialized and only used for type checking."""
preferences: Preferences
errors: List[str]
user_plugins: List[Plugin]
form: Dict[str, str]
start_time: float
render_time: float
timings: List[dict]
request = typing.cast(ExtendedRequest, flask.request)
def _get_translations():
if has_request_context() and request.form.get('use-translation') == 'oc':
babel_ext = flask_babel.current_app.extensions['babel']