339) -> None:
340
342 from searx import settings
343
344
345
346 settings_engines = settings_engines or settings['engines']
347 settings_outgoing = settings_outgoing or settings['outgoing']
348
349
350
351 default_params: dict[str, t.Any] = {
352 'enable_http': False,
353 'verify': settings_outgoing['verify'],
354 'enable_http2': settings_outgoing['enable_http2'],
355 'max_connections': settings_outgoing['pool_connections'],
356 'max_keepalive_connections': settings_outgoing['pool_maxsize'],
357 'keepalive_expiry': settings_outgoing['keepalive_expiry'],
358 'local_addresses': settings_outgoing['source_ips'],
359 'using_tor_proxy': settings_outgoing['using_tor_proxy'],
360 'proxies': settings_outgoing['proxies'],
361 'max_redirects': settings_outgoing['max_redirects'],
362 'retries': settings_outgoing['retries'],
363 'retry_on_http_error': False,
364 }
365
366 def new_network(params: dict[str, t.Any], logger_name: str | None = None):
367 nonlocal default_params
368 result = {}
369 result.update(default_params)
370 result.update(params)
371 if logger_name:
372 result['logger_name'] = logger_name
373 return Network(**result)
374
375 def iter_networks():
376 nonlocal settings_engines
377 for engine_spec in settings_engines:
378 engine_name = engine_spec['name']
379 engine = engines.get(engine_name)
380 if engine is None:
381 continue
382 network = getattr(engine, 'network', None)
383 yield engine_name, engine, network
384
385 if NETWORKS:
386 done()
387 NETWORKS.clear()
388 NETWORKS[DEFAULT_NAME] = new_network({}, logger_name='default')
389 NETWORKS['ipv4'] = new_network({'local_addresses': '0.0.0.0'}, logger_name='ipv4')
390 NETWORKS['ipv6'] = new_network({'local_addresses': '::'}, logger_name='ipv6')
391
392
393 for network_name, network in settings_outgoing['networks'].items():
394 NETWORKS[network_name] = new_network(network, logger_name=network_name)
395
396
397 for engine_name, engine, network in iter_networks():
398 if network is None:
399 network = {}
400 for attribute_name, attribute_value in default_params.items():
401 if hasattr(engine, attribute_name):
402 network[attribute_name] = getattr(engine, attribute_name)
403 else:
404 network[attribute_name] = attribute_value
405 NETWORKS[engine_name] = new_network(network, logger_name=engine_name)
406 elif isinstance(network, dict):
407 NETWORKS[engine_name] = new_network(network, logger_name=engine_name)
408
409
410 for engine_name, engine, network in iter_networks():
411 if isinstance(network, str):
412 NETWORKS[engine_name] = NETWORKS[network]
413
414
415
416
417 if 'image_proxy' not in NETWORKS:
418 image_proxy_params = default_params.copy()
419 image_proxy_params['enable_http2'] = False
420 NETWORKS['image_proxy'] = new_network(image_proxy_params, logger_name='image_proxy')
421
422
423@atexit.register