.oO SearXNG Developer Documentation Oo.
Loading...
Searching...
No Matches
searx.enginelib.traits.EngineTraitsMap Class Reference
Inheritance diagram for searx.enginelib.traits.EngineTraitsMap:
Collaboration diagram for searx.enginelib.traits.EngineTraitsMap:

Public Member Functions

 save_data (self)
'EngineTraitsMapfrom_data (cls)
'EngineTraitsMapfetch_traits (cls, t.Callable[[str], None] log)
 set_traits (self, "Engine | types.ModuleType" engine)
Public Member Functions inherited from searx.enginelib.traits.EngineTraits
 get_language (self, str searxng_locale, t.Any default=None)
t.Any get_region (self, str searxng_locale, t.Any default=None)
bool is_locale_supported (self, str searxng_locale)
 copy (self)

Static Public Attributes

tuple ENGINE_TRAITS_FILE = (data_dir / 'engine_traits.json').resolve()
Static Public Attributes inherited from searx.enginelib.traits.EngineTraits
dict regions = dataclasses.field(default_factory=dict)
dict languages = dataclasses.field(default_factory=dict)
str all_locale = None
data_type = 'traits_v1'
dict custom = dataclasses.field(default_factory=dict)

Additional Inherited Members

Protected Member Functions inherited from searx.enginelib.traits.EngineTraits
 _set_traits_v1 (self, "Engine | types.ModuleType" engine)

Detailed Description

A python dictionary to map :class:`EngineTraits` by engine name.

Definition at line 194 of file traits.py.

Member Function Documentation

◆ fetch_traits()

'EngineTraitsMap' searx.enginelib.traits.EngineTraitsMap.fetch_traits ( cls,
t.Callable[[str], None] engine )
Call a function ``fetch_traits(engine_traits)`` from engines namespace to fetch
and set properties from the origin engine in the object ``engine_traits``.  If
function does not exists, ``None`` is returned.

Reimplemented from searx.enginelib.traits.EngineTraits.

Definition at line 214 of file traits.py.

214 def fetch_traits(cls, log: t.Callable[[str], None]) -> 'EngineTraitsMap':
215 from searx import engines # pylint: disable=cyclic-import, import-outside-toplevel
216
217 names = list(engines.engines)
218 names.sort()
219 obj = cls()
220
221 for engine_name in names:
222 engine: Engine | types.ModuleType = engines.engines[engine_name]
223 traits = None
224
225 # pylint: disable=broad-exception-caught
226 try:
227 traits = EngineTraits.fetch_traits(engine)
228 except Exception as exc:
229 log("FATAL: while fetch_traits %s: %s" % (engine_name, exc))
230 if os.environ.get('FORCE', '').lower() not in ['on', 'true', '1']:
231 raise
232 v = ENGINE_TRAITS.get(engine_name)
233 if v:
234 log("FORCE: re-use old values from fetch_traits - ENGINE_TRAITS[%s]" % engine_name)
235 traits = EngineTraits(**v)
236
237 if traits is not None:
238 log("%-20s: SearXNG languages --> %s " % (engine_name, len(traits.languages)))
239 log("%-20s: SearXNG regions --> %s" % (engine_name, len(traits.regions)))
240 obj[engine_name] = traits
241
242 return obj
243

◆ from_data()

'EngineTraitsMap' searx.enginelib.traits.EngineTraitsMap.from_data ( cls)
Instantiate :class:`EngineTraitsMap` object from :py:obj:`ENGINE_TRAITS`

Definition at line 206 of file traits.py.

206 def from_data(cls) -> 'EngineTraitsMap':
207 """Instantiate :class:`EngineTraitsMap` object from :py:obj:`ENGINE_TRAITS`"""
208 obj = cls()
209 for k, v in ENGINE_TRAITS.items():
210 obj[k] = EngineTraits(**v)
211 return obj
212

◆ save_data()

searx.enginelib.traits.EngineTraitsMap.save_data ( self)
Store EngineTraitsMap in in file :py:obj:`self.ENGINE_TRAITS_FILE`

Definition at line 200 of file traits.py.

200 def save_data(self):
201 """Store EngineTraitsMap in in file :py:obj:`self.ENGINE_TRAITS_FILE`"""
202 with open(self.ENGINE_TRAITS_FILE, 'w', encoding='utf-8') as f:
203 json.dump(self, f, indent=2, sort_keys=True, cls=EngineTraitsEncoder)
204

References ENGINE_TRAITS_FILE.

◆ set_traits()

searx.enginelib.traits.EngineTraitsMap.set_traits ( self,
"Engine | types.ModuleType" engine )
Set traits in a :py:obj:`Engine` namespace.

:param engine: engine instance build by :py:func:`searx.engines.load_engine`

Reimplemented from searx.enginelib.traits.EngineTraits.

Definition at line 244 of file traits.py.

244 def set_traits(self, engine: "Engine | types.ModuleType"):
245 """Set traits in a :py:obj:`Engine` namespace.
246
247 :param engine: engine instance build by :py:func:`searx.engines.load_engine`
248 """
249
250 engine_traits = EngineTraits(data_type='traits_v1')
251 if engine.name in self.keys():
252 engine_traits = self[engine.name]
253
254 elif engine.engine in self.keys():
255 # The key of the dictionary traits_map is the *engine name*
256 # configured in settings.xml. When multiple engines are configured
257 # in settings.yml to use the same origin engine (python module)
258 # these additional engines can use the languages from the origin
259 # engine. For this use the configured ``engine: ...`` from
260 # settings.yml
261 engine_traits = self[engine.engine]
262
263 engine_traits.set_traits(engine)

Member Data Documentation

◆ ENGINE_TRAITS_FILE

searx.enginelib.traits.EngineTraitsMap.ENGINE_TRAITS_FILE = (data_dir / 'engine_traits.json').resolve()
static

Definition at line 197 of file traits.py.

Referenced by save_data().


The documentation for this class was generated from the following file:
  • /home/andrew/Documents/code/public/searxng/searx/enginelib/traits.py