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