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