From 3e50e8de3e669972da194b3d416f7913e75da9f4 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Sat, 17 Jul 2021 19:03:54 +0200 Subject: [PATCH] [mod] drop usage of the searx.brand namespace (python procs) Added function searx.get_setting(name, default=_unset): Returns the value to which ``name`` point. If there is no such name in the settings and the ``default`` is unset, a KeyError exception is raised. In all the python processes .. - make docs - make buildenv - make install (setup.py) the usage of the 'brand.*' name space is replaced by 'searx.get_setting' function. - brand.SEARX_URL --> get_setting('server.base_url') - brand.GIT_URL --> get_setting('brand.git_url') - brand.GIT_BRANCH' --> get_setting('server.base_url') - brand.ISSUE_URL --> get_setting('brand.issue_url') - brand.DOCS_URL --> get_setting('brand.docs_url') - brand.PUBLIC_INSTANCES --> get_setting('brand.public_instances') - brand.CONTACT_URL --> get_setting('general.contact_url', '') - brand.WIKI_URL --> get_setting('brand.wiki_url') - brand.TWITTER_URL --> get_setting('brand.twitter_url', '') Signed-off-by: Markus Heiser --- docs/conf.py | 41 +++++++++++-------- searx/__init__.py | 21 ++++++++++ setup.py | 8 ++-- utils/build_env.py | 28 ++++++++----- .../etc/searx/use_default_settings.yml | 2 +- 5 files changed, 68 insertions(+), 32 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 09cc2287..04c8aa20 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -4,7 +4,7 @@ import sys, os from pallets_sphinx_themes import ProjectLink -from searx import brand +from searx import get_setting from searx.version import VERSION_STRING # Project -------------------------------------------------------------- @@ -14,6 +14,15 @@ copyright = u'2015-2020, Adam Tauber, Noémi Ványi' author = u'Adam Tauber' release, version = VERSION_STRING, VERSION_STRING +SEARX_URL = get_setting('server.base_url') or 'https://example.org/searx' +GIT_URL = get_setting('brand.git_url') +GIT_BRANCH = get_setting('brand.git_branch') +ISSUE_URL = get_setting('brand.issue_url') +DOCS_URL = get_setting('brand.docs_url') +PUBLIC_INSTANCES = get_setting('brand.public_instances') +CONTACT_URL = get_setting('general.contact_url') +WIKI_URL = get_setting('brand.wiki_url') + # hint: sphinx.ext.viewcode won't highlight when 'highlight_language' [1] is set # to string 'none' [2] # @@ -49,10 +58,10 @@ extlinks['pull'] = ('https://github.com/searxng/searxng/pull/%s', 'PR ') extlinks['pull-searx'] = ('https://github.com/searx/searx/pull/%s', 'PR ') # links to custom brand -extlinks['origin'] = (brand.GIT_URL + '/blob/' + brand.GIT_BRANCH + '/%s', 'git://') -extlinks['patch'] = (brand.GIT_URL + '/commit/%s', '#') -extlinks['search'] = (brand.SEARX_URL + '/%s', '#') -extlinks['docs'] = (brand.DOCS_URL + '/%s', 'docs: ') +extlinks['origin'] = (GIT_URL + '/blob/' + GIT_BRANCH + '/%s', 'git://') +extlinks['patch'] = (GIT_URL + '/commit/%s', '#') +extlinks['search'] = (SEARX_URL + '/%s', '#') +extlinks['docs'] = (DOCS_URL + '/%s', 'docs: ') extlinks['pypi'] = ('https://pypi.org/project/%s', 'PyPi: ') extlinks['man'] = ('https://manpages.debian.org/jump?q=%s', '') #extlinks['role'] = ( @@ -108,18 +117,16 @@ imgmath_font_size = 14 html_theme_options = {"index_sidebar_logo": True} html_context = {"project_links": [] } -if brand.GIT_URL: - html_context["project_links"].append(ProjectLink("Source", brand.GIT_URL)) -if brand.WIKI_URL: - html_context["project_links"].append(ProjectLink("Wiki", brand.WIKI_URL)) -if brand.PUBLIC_INSTANCES: - html_context["project_links"].append(ProjectLink("Public instances", brand.PUBLIC_INSTANCES)) -if brand.TWITTER_URL: - html_context["project_links"].append(ProjectLink("Twitter", brand.TWITTER_URL)) -if brand.ISSUE_URL: - html_context["project_links"].append(ProjectLink("Issue Tracker", brand.ISSUE_URL)) -if brand.CONTACT_URL: - html_context["project_links"].append(ProjectLink("Contact", brand.CONTACT_URL)) +html_context["project_links"].append(ProjectLink("Source", GIT_URL + '/tree/' + GIT_BRANCH)) + +if WIKI_URL: + html_context["project_links"].append(ProjectLink("Wiki", WIKI_URL)) +if PUBLIC_INSTANCES: + html_context["project_links"].append(ProjectLink("Public instances", PUBLIC_INSTANCES)) +if ISSUE_URL: + html_context["project_links"].append(ProjectLink("Issue Tracker", ISSUE_URL)) +if CONTACT_URL: + html_context["project_links"].append(ProjectLink("Contact", CONTACT_URL)) html_sidebars = { "**": ["project.html", "relations.html", "searchbox.html"], diff --git a/searx/__init__.py b/searx/__init__.py index 8452dd7b..55f6bb46 100644 --- a/searx/__init__.py +++ b/searx/__init__.py @@ -32,6 +32,27 @@ if max_request_timeout is None: else: logger.info('max_request_timeout=%i second(s)', max_request_timeout) +_unset = object() + +def get_setting(name, default=_unset): + """Returns the value to which ``name`` point. If there is no such name in the + settings and the ``default`` is unset, a :py:obj:`KeyError` is raised. + + """ + value = settings + for a in name.split('.'): + if isinstance(value, dict): + value = value.get(a, _unset) + else: + value = _unset + + if value is _unset: + if default is _unset: + raise KeyError(name) + value = default + break + + return value class _brand_namespace: # pylint: disable=invalid-name diff --git a/setup.py b/setup.py index 61227d19..b320524d 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ import os import sys from searx.version import VERSION_STRING -from searx import brand +from searx import get_setting with open('README.rst', encoding='utf-8') as f: long_description = f.read() @@ -24,10 +24,10 @@ setup( version=VERSION_STRING, description="A privacy-respecting, hackable metasearch engine", long_description=long_description, - url=brand.DOCS_URL, + url=get_setting('brand.docs_url'), project_urls={ - "Code": brand.GIT_URL, - "Issue tracker": brand.ISSUE_URL + "Code": get_setting('brand.git_url'), + "Issue tracker": get_setting('brand.issue_url') }, classifiers=[ "Development Status :: 4 - Beta", diff --git a/utils/build_env.py b/utils/build_env.py index ffb2689e..58d58d56 100644 --- a/utils/build_env.py +++ b/utils/build_env.py @@ -16,18 +16,26 @@ os.environ['SEARX_SETTINGS_PATH'] = abspath(dirname(__file__) + '/settings.yml') # from /etc/searx/settings.yml. os.environ['SEARX_SETTINGS_PATH'] = abspath(dirname(__file__) + sep + 'settings.yml') -from searx import brand +from searx import get_setting + +def _env(*arg, **kwargs): + val = get_setting(*arg, **kwargs) + if val is True: + val = '1' + elif val is False: + val = '' + return val name_val = [ - ('SEARX_URL' , brand.SEARX_URL), - ('GIT_URL' , brand.GIT_URL), - ('GIT_BRANCH' , brand.GIT_BRANCH), - ('ISSUE_URL' , brand.ISSUE_URL), - ('DOCS_URL' , brand.DOCS_URL), - ('PUBLIC_INSTANCES' , brand.PUBLIC_INSTANCES), - ('CONTACT_URL' , brand.CONTACT_URL), - ('WIKI_URL' , brand.WIKI_URL), - ('TWITTER_URL' , brand.TWITTER_URL), + ('SEARX_URL' , _env('server.base_url','')), + ('GIT_URL' , _env('brand.git_url', '')), + ('GIT_BRANCH' , _env('brand.git_branch', '')), + ('ISSUE_URL' , _env('brand.issue_url', '')), + ('DOCS_URL' , _env('brand.docs_url', '')), + ('PUBLIC_INSTANCES' , _env('brand.public_instances', '')), + ('CONTACT_URL' , _env('general.contact_url', '')), + ('WIKI_URL' , _env('brand.wiki_url', '')), + ('TWITTER_URL' , _env('brand.twitter_url', '')), ] brand_env = 'utils' + sep + 'brand.env' diff --git a/utils/templates/etc/searx/use_default_settings.yml b/utils/templates/etc/searx/use_default_settings.yml index f805373f..1e7530cd 100644 --- a/utils/templates/etc/searx/use_default_settings.yml +++ b/utils/templates/etc/searx/use_default_settings.yml @@ -25,7 +25,7 @@ server: secret_key: "ultrasecretkey" # change this! # Set custom base_url. Possible values: # false or "https://your.custom.host/location/" - base_url: https://darmarit.org/searx + # base_url: https://example.org/searx # Proxying image results through searx image_proxy: false