To reproduce the issue set base_url::
    diff --git a/searx/settings.yml b/searx/settings.yml
    index 841457b5e..4e282cb61 100644
    --- a/searx/settings.yml
    +++ b/searx/settings.yml
    @@ -72,7 +72,7 @@ server:
       bind_address: "127.0.0.1"
       # public URL of the instance, to ensure correct inbound links. Is overwritten
       # by ${SEARXNG_URL}.
    -  base_url: false  # "http://example.com/location"
    +  base_url: "http://example.com/location"
       limiter: false  # rate limit the number of request on the instance, block some bots
and build the docs::
    $ make docs
    SPHINX    HTML ./docs --> file:///800GBPCIex4/share/SearXNG/dist/docs
    DOCS      build build/docs/includes
    Traceback (most recent call last):
      File "searxng_extra/docs_prebuild", line 85, in <module>
        sys.exit(main())
      File "searxng_extra/docs_prebuild", line 31, in main
        f.write(page.content)
      File "/usr/lib/python3.8/contextlib.py", line 120, in __exit__
        next(self.gen)
      File "searxng_extra/docs_prebuild", line 81, in _instance_infosetset_ctx
        return DOC
    NameError: name 'DOC' is not defined
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
		
	
			
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python
 | 
						|
# lint: pylint
 | 
						|
# SPDX-License-Identifier: AGPL-3.0-or-later
 | 
						|
 | 
						|
"""Script that implements some prebuild tasks needed by target docs.prebuild
 | 
						|
"""
 | 
						|
 | 
						|
import sys
 | 
						|
import os.path
 | 
						|
import time
 | 
						|
from contextlib import contextmanager
 | 
						|
from searx import settings, get_setting, locales
 | 
						|
from searx.infopage import InfoPageSet, InfoPage
 | 
						|
 | 
						|
 | 
						|
_doc_user = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'docs', 'user'))
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    locales.locales_initialize()
 | 
						|
    base_url = get_setting('server.base_url', None)
 | 
						|
    if base_url:
 | 
						|
        infopageset_ctx = _instance_infosetset_ctx(base_url)
 | 
						|
    else:
 | 
						|
        infopageset_ctx = _offline_infosetset_ctx()
 | 
						|
 | 
						|
    with infopageset_ctx as infopageset:
 | 
						|
        for _, _, page in infopageset.iter_pages('en'):
 | 
						|
            fname = os.path.join(_doc_user, os.path.basename(page.fname))
 | 
						|
            with open(fname, 'w') as f:
 | 
						|
                f.write(page.content)
 | 
						|
 | 
						|
 | 
						|
class OfflinePage(InfoPage):
 | 
						|
 | 
						|
    def get_ctx(self):  # pylint: disable=no-self-use
 | 
						|
        """Jinja context to render :py:obj:`DocPage.content` for offline purpose (no
 | 
						|
        links to SearXNG instance)"""
 | 
						|
 | 
						|
        ctx = super().get_ctx()
 | 
						|
        ctx['link'] = lambda name, url: '`%s`' % name
 | 
						|
        ctx['search'] = lambda query: '`%s`' % query
 | 
						|
 | 
						|
        return ctx
 | 
						|
 | 
						|
 | 
						|
@contextmanager
 | 
						|
def _offline_infosetset_ctx():
 | 
						|
    yield InfoPageSet(OfflinePage)
 | 
						|
 | 
						|
 | 
						|
@contextmanager
 | 
						|
def _instance_infosetset_ctx(base_url):
 | 
						|
    # The url_for functions in the jinja templates need all routes to be
 | 
						|
    # registered in the Flask app.
 | 
						|
 | 
						|
    settings['server']['secret_key'] = ''
 | 
						|
    from searx.webapp import app
 | 
						|
 | 
						|
    # Specify base_url so that url_for() works for base_urls.  If base_url is
 | 
						|
    # specified, then these values from are given preference over any Flask's
 | 
						|
    # generics (see flaskfix.py).
 | 
						|
 | 
						|
    with app.test_request_context(base_url=base_url):
 | 
						|
        yield InfoPageSet()
 | 
						|
 | 
						|
    # The searx.webapp import from above fires some HTTP requests, thats
 | 
						|
    # why we get a RuntimeError::
 | 
						|
    #
 | 
						|
    #     RuntimeError: The connection pool was closed while 1 HTTP \
 | 
						|
    #       requests/responses were still in-flight.
 | 
						|
    #
 | 
						|
    # Closing network won't help ..
 | 
						|
    #   from searx.network import network
 | 
						|
    #   network.done()
 | 
						|
 | 
						|
    # waiting some seconds before ending the comand line was the only solution I
 | 
						|
    # found ..
 | 
						|
 | 
						|
    time.sleep(3)
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    sys.exit(main())
 |