.oO SearXNG Developer Documentation Oo.
Loading...
Searching...
No Matches
models.py
Go to the documentation of this file.
1# SPDX-License-Identifier: AGPL-3.0-or-later
2# pylint: disable=missing-module-docstring
3
4import typing
5import babel
6
7
9 """Reference by names to an engine and category"""
10
11 __slots__ = 'name', 'category'
12
13 def __init__(self, name: str, category: str):
14 self.name = name
15 self.category = category
16
17 def __repr__(self):
18 return "EngineRef({!r}, {!r})".format(self.name, self.category)
19
20 def __eq__(self, other):
21 return self.name == other.name and self.category == other.category
22
23 def __hash__(self):
24 return hash((self.name, self.category))
25
26
27@typing.final
29 """container for all the search parameters (query, language, etc...)"""
30
32 self,
33 query: str,
34 engineref_list: list[EngineRef],
35 lang: str = 'all',
36 safesearch: typing.Literal[0, 1, 2] = 0,
37 pageno: int = 1,
38 time_range: typing.Literal["day", "week", "month", "year"] | None = None,
39 timeout_limit: float | None = None,
40 external_bang: str | None = None,
41 engine_data: dict[str, dict[str, str]] | None = None,
42 redirect_to_first_result: bool | None = None,
43 ): # pylint:disable=too-many-arguments
44 self.query = query
45 self.engineref_list = engineref_list
46 self.lang = lang
47 self.safesearch: typing.Literal[0, 1, 2] = safesearch
48 self.pageno = pageno
49 self.time_range: typing.Literal["day", "week", "month", "year"] | None = time_range
50 self.timeout_limit = timeout_limit
51 self.external_bang = external_bang
52 self.engine_data = engine_data or {}
53 self.redirect_to_first_result = redirect_to_first_result
54
55 self.locale = None
56 if self.lang:
57 try:
58 self.locale = babel.Locale.parse(self.lang, sep='-')
59 except babel.core.UnknownLocaleError:
60 pass
61
62 @property
63 def categories(self):
64 return list(set(map(lambda engineref: engineref.category, self.engineref_list)))
65
66 def __repr__(self):
67 return "SearchQuery({!r}, {!r}, {!r}, {!r}, {!r}, {!r}, {!r}, {!r}, {!r})".format(
68 self.query,
69 self.engineref_list,
70 self.lang,
71 self.safesearch,
72 self.pageno,
73 self.time_range,
74 self.timeout_limit,
75 self.external_bang,
77 )
78
79 def __eq__(self, other):
80 return (
81 self.query == other.query
82 and self.engineref_list == other.engineref_list
83 and self.lang == other.lang
84 and self.safesearch == other.safesearch
85 and self.pageno == other.pageno
86 and self.time_range == other.time_range
87 and self.timeout_limit == other.timeout_limit
88 and self.external_bang == other.external_bang
89 and self.redirect_to_first_result == other.redirect_to_first_result
90 )
91
92 def __hash__(self):
93 return hash(
94 (
95 self.query,
96 tuple(self.engineref_list),
97 self.lang,
98 self.safesearch,
99 self.pageno,
100 self.time_range,
101 self.timeout_limit,
102 self.external_bang,
104 )
105 )
106
107 def __copy__(self):
108 return SearchQuery(
109 self.query,
110 self.engineref_list,
111 self.lang,
112 self.safesearch,
113 self.pageno,
114 self.time_range,
115 self.timeout_limit,
116 self.external_bang,
117 self.engine_data,
119 )
__init__(self, str name, str category)
Definition models.py:13
typing.Literal[0, 1, 2] safesearch
Definition models.py:47
__init__(self, str query, list[EngineRef] engineref_list, str lang='all', typing.Literal[0, 1, 2] safesearch=0, int pageno=1, typing.Literal["day", "week", "month", "year"]|None time_range=None, float|None timeout_limit=None, str|None external_bang=None, dict[str, dict[str, str]]|None engine_data=None, bool|None redirect_to_first_result=None)
Definition models.py:43
typing.Literal[,,,]|None time_range
Definition models.py:49