mirror of
https://github.com/searxng/searxng.git
synced 2024-12-24 10:10:29 +00:00
0c725109e8
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>
84 lines
2.3 KiB
Python
Executable file
84 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())
|