diff --git a/.gitignore b/.gitignore index 44353df8..069b9113 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,11 @@ docs/source/changelog.md # generated cli docs docs/source/api/app-config.rst -.vscode/ +# jetbrains IDE stuff +*.iml +.idea/ + +# ms IDE stuff +*.code-workspace +.history +.vscode diff --git a/jupyterlab_server/settings_handler.py b/jupyterlab_server/settings_handler.py index a54aee3d..d17f1aeb 100755 --- a/jupyterlab_server/settings_handler.py +++ b/jupyterlab_server/settings_handler.py @@ -35,7 +35,14 @@ def get(self, schema_name=""): """Get setting(s)""" # Need to be update here as translator locale is not change when a new locale is put # from frontend - translator.set_locale(self.get_current_locale()) + try: + locale = self.get_current_locale() + except web.HTTPError as e: + # fallback in case of missing (404) or misshapen (500) translation schema + locale = DEFAULT_LOCALE + 'Failed loading or validating translation settings schema' + + translator.set_locale(locale) result, warnings = get_settings( self.app_settings_dir, diff --git a/jupyterlab_server/settings_utils.py b/jupyterlab_server/settings_utils.py index 1dfd8daf..bcd914d1 100755 --- a/jupyterlab_server/settings_utils.py +++ b/jupyterlab_server/settings_utils.py @@ -2,18 +2,16 @@ # Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. -import json -from jupyterlab_server.translation_utils import DEFAULT_LOCALE, L10N_SCHEMA_NAME, is_valid_locale -import os from glob import glob - +import json import json5 -from jsonschema import Draft4Validator as Validator -from jsonschema import ValidationError +from jsonschema import Draft4Validator as Validator, ValidationError from jupyter_server.services.config.manager import ConfigManager, recursive_update +import os from tornado import web from .server import APIHandler, tz +from .translation_utils import DEFAULT_LOCALE, L10N_SCHEMA_NAME, is_valid_locale # The JupyterLab settings file extension. SETTINGS_EXTENSION = '.jupyterlab-settings' @@ -436,14 +434,21 @@ def get_current_locale(self): ----- If the locale setting is not available or not valid, it will default to jupyterlab_server.translation_utils.DEFAULT_LOCALE. """ - settings, _ = get_settings( - self.app_settings_dir, - self.schemas_dir, - self.settings_dir, - schema_name=L10N_SCHEMA_NAME, - overrides=self.overrides, - labextensions_path=self.labextensions_path, - ) + try: + settings, _ = get_settings( + self.app_settings_dir, + self.schemas_dir, + self.settings_dir, + schema_name=L10N_SCHEMA_NAME, + overrides=self.overrides, + labextensions_path=self.labextensions_path, + ) + except web.HTTPError as e: + schema_warning = "Missing or misshappen translation settings schema:\n%s" + self.log.warn(schema_warning % str(e)) + + settings = {} + current_locale = settings.get("settings", {}).get("locale", DEFAULT_LOCALE) if not is_valid_locale(current_locale): current_locale = DEFAULT_LOCALE