| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | 
							- #!/usr/bin/env python
 
- # 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', encoding='utf-8') as f:
 
-                 f.write(page.content)
 
- class OfflinePage(InfoPage):  # pylint: disable=missing-class-docstring
 
-     def get_ctx(self):
 
-         """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  # pylint: disable=import-outside-toplevel
 
-     # 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, that's
 
-     # 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 command line was the only solution I
 
-     # found ..
 
-     time.sleep(3)
 
- if __name__ == '__main__':
 
-     sys.exit(main())
 
 
  |