diff --git a/searx/settings.yml b/searx/settings.yml index 580e4f111..d9426033e 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -16,7 +16,8 @@ server: http_protocol_version : "1.0" # 1.0 and 1.1 are supported ui: - themes_path : "" # Custom ui themes path - leave it blank if you didn't change + static_path : "" # Custom static path - leave it blank if you didn't change + templates_path : "" # Custom templates path - leave it blank if you didn't change default_theme : oscar # ui theme default_locale : "" # Default interface locale - leave blank to detect from browser information or use codes from the 'locales' config section diff --git a/searx/settings_robot.yml b/searx/settings_robot.yml index 59320480c..070a0edb6 100644 --- a/searx/settings_robot.yml +++ b/searx/settings_robot.yml @@ -16,7 +16,8 @@ server: http_protocol_version : "1.0" ui: - themes_path : "" + static_path : "" + templates_path : "" default_theme : oscar default_locale : "" diff --git a/searx/utils.py b/searx/utils.py index f24c57afa..9a08197cc 100644 --- a/searx/utils.py +++ b/searx/utils.py @@ -178,37 +178,39 @@ class UnicodeWriter: self.writerow(row) -def get_themes(root): +def get_resources_directory(searx_directory, subdirectory, resources_directory): + if not resources_directory: + resources_directory = os.path.join(searx_directory, subdirectory) + if not os.path.isdir(resources_directory): + raise Exception(directory + " is not a directory") + return resources_directory + + +def get_themes(static_path): """Returns available themes list.""" - - static_path = os.path.join(root, 'static') - templates_path = os.path.join(root, 'templates') - themes = os.listdir(os.path.join(static_path, 'themes')) if '__common__' in themes: themes.remove('__common__') - return static_path, templates_path, themes + return themes -def get_static_files(base_path): - base_path = os.path.join(base_path, 'static') +def get_static_files(static_path): static_files = set() - base_path_length = len(base_path) + 1 - for directory, _, files in os.walk(base_path): + static_path_length = len(static_path) + 1 + for directory, _, files in os.walk(static_path): for filename in files: - f = os.path.join(directory[base_path_length:], filename) + f = os.path.join(directory[static_path_length:], filename) static_files.add(f) return static_files -def get_result_templates(base_path): - base_path = os.path.join(base_path, 'templates') +def get_result_templates(templates_path): result_templates = set() - base_path_length = len(base_path) + 1 - for directory, _, files in os.walk(base_path): + templates_path_length = len(templates_path) + 1 + for directory, _, files in os.walk(templates_path): if directory.endswith('result_templates'): for filename in files: - f = os.path.join(directory[base_path_length:], filename) + f = os.path.join(directory[templates_path_length:], filename) result_templates.add(f) return result_templates diff --git a/searx/webapp.py b/searx/webapp.py index 03b572955..253d781ad 100644 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -56,9 +56,9 @@ from searx.engines import ( categories, engines, engine_shortcuts, get_engines_stats, initialize_engines ) from searx.utils import ( - UnicodeWriter, highlight_content, html_to_text, get_themes, - get_static_files, get_result_templates, gen_useragent, dict_subset, - prettify_url + UnicodeWriter, highlight_content, html_to_text, get_resources_directory, + get_static_files, get_result_templates, get_themes, gen_useragent, + dict_subset, prettify_url ) from searx.version import VERSION_STRING from searx.languages import language_codes @@ -91,17 +91,25 @@ if sys.version_info[0] == 3: from werkzeug.serving import WSGIRequestHandler WSGIRequestHandler.protocol_version = "HTTP/{}".format(settings['server'].get('http_protocol_version', '1.0')) -static_path, templates_path, themes =\ - get_themes(settings['ui']['themes_path'] - if settings['ui']['themes_path'] - else searx_dir) +# about static +static_path = get_resources_directory(searx_dir, 'static', settings['ui']['static_path']) +logger.debug('static directory is %s', static_path) +static_files = get_static_files(static_path) +# about templates default_theme = settings['ui']['default_theme'] +templates_path = get_resources_directory(searx_dir, 'templates', settings['ui']['templates_path']) +logger.debug('templates directory is %s', templates_path) +themes = get_themes(static_path) +result_templates = get_result_templates(templates_path) +global_favicons = [] +for indice, theme in enumerate(themes): + global_favicons.append([]) + theme_img_path = os.path.join(static_path, 'themes', theme, 'img', 'icons') + for (dirpath, dirnames, filenames) in os.walk(theme_img_path): + global_favicons[indice].extend(filenames) -static_files = get_static_files(searx_dir) - -result_templates = get_result_templates(searx_dir) - +# Flask app app = Flask( __name__, static_folder=static_path, @@ -120,13 +128,6 @@ babel = Babel(app) rtl_locales = ['ar', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'glk', 'he', 'ku', 'mzn', 'pnb'', ''ps', 'sd', 'ug', 'ur', 'yi'] -global_favicons = [] -for indice, theme in enumerate(themes): - global_favicons.append([]) - theme_img_path = searx_dir + "/static/themes/" + theme + "/img/icons/" - for (dirpath, dirnames, filenames) in os.walk(theme_img_path): - global_favicons[indice].extend(filenames) - # used when translating category names _category_names = (gettext('files'), gettext('general'),