diff --git a/spsvalidator/pyproject.toml b/spsvalidator/pyproject.toml index f854db9..fd11e6a 100644 --- a/spsvalidator/pyproject.toml +++ b/spsvalidator/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "spsvalidator" -version = "0.2.0" +version = "0.3.0" description = "Standalone SPS package validator desktop webapp" readme = "README.md" requires-python = ">=3.11" @@ -12,7 +12,7 @@ dependencies = [ "Flask>=3.0.0", "Flask-Babel>=4.0.0", "lxml>=5.0.0", - "packtools @ git+https://git@github.com/scieloorg/packtools@4.16.7", + "packtools @ git+https://git@github.com/scieloorg/packtools@4.16.9", "pywebview>=5.1", "setuptools>=68,<82", "requests>=2.31.0", diff --git a/spsvalidator/src/spsvalidator/app.py b/spsvalidator/src/spsvalidator/app.py index 341acaa..b9a2903 100644 --- a/spsvalidator/src/spsvalidator/app.py +++ b/spsvalidator/src/spsvalidator/app.py @@ -4,6 +4,7 @@ from flask import Flask, current_app, request from flask_babel import Babel, get_locale +from packtools.sps import i18n as packtools_i18n from spsvalidator.build_metadata import get_footer_build_label from spsvalidator.db.repository import init_db @@ -11,6 +12,15 @@ from spsvalidator.web import i18n from spsvalidator.web.routes import web_blueprint +# Mapeia os codigos de idioma do spsvalidator (web/i18n.SUPPORTED_LANGUAGES) +# pros nomes de diretorio de catalogo do packtools (packtools/sps/locale/*). +# Nota: ate o packtools corrigir scieloorg/packtools#1267 (release nao inclui +# os .mo compilados quando instalado via git), set_locale() aqui fica sem +# efeito pratico - as mensagens de validacao continuam em ingles mesmo com o +# locale certo selecionado. O wiring fica pronto pra quando isso for corrigido +# no packtools. +_PACKTOOLS_LOCALE_MAP = {"pt": "pt_BR", "en": "en", "es": "es"} + def select_locale(): if current_app.config["EXECUTION_MODE"] == "desktop": @@ -39,6 +49,10 @@ def create_app( Babel(app, locale_selector=select_locale) + @app.before_request + def sync_packtools_locale(): + packtools_i18n.set_locale(_PACKTOOLS_LOCALE_MAP.get(str(get_locale()), "en")) + @app.context_processor def inject_app_info(): return { diff --git a/spsvalidator/tests/test_packtools_locale_sync.py b/spsvalidator/tests/test_packtools_locale_sync.py new file mode 100644 index 0000000..53e7176 --- /dev/null +++ b/spsvalidator/tests/test_packtools_locale_sync.py @@ -0,0 +1,44 @@ +import pytest + +from spsvalidator import app as app_module +from spsvalidator.app import create_app + + +@pytest.mark.parametrize( + ("accept_language", "expected_packtools_locale"), + [ + ("pt-BR,pt;q=0.9", "pt_BR"), + ("en-US,en;q=0.9", "en"), + ("es-AR,es;q=0.9", "es"), + ], +) +def test_before_request_sets_packtools_locale_from_accept_language( + tmp_path, monkeypatch, accept_language, expected_packtools_locale +): + calls = [] + monkeypatch.setattr(app_module.packtools_i18n, "set_locale", calls.append) + + app = create_app(str(tmp_path), execution_mode="browser") + app.test_client().get("/", headers={"Accept-Language": accept_language}) + + assert calls == [expected_packtools_locale] + + +def test_before_request_sets_packtools_locale_from_system_language(tmp_path, monkeypatch): + calls = [] + monkeypatch.setattr(app_module.packtools_i18n, "set_locale", calls.append) + + app = create_app(str(tmp_path), execution_mode="desktop", system_language="es_AR") + app.test_client().get("/", headers={"Accept-Language": "en-US"}) + + assert calls == ["es"] + + +def test_unsupported_locale_falls_back_to_packtools_portuguese(tmp_path, monkeypatch): + calls = [] + monkeypatch.setattr(app_module.packtools_i18n, "set_locale", calls.append) + + app = create_app(str(tmp_path), execution_mode="browser") + app.test_client().get("/", headers={"Accept-Language": "de-DE"}) + + assert calls == ["pt_BR"] \ No newline at end of file diff --git a/spsvalidator/tests/test_packtools_validations.py b/spsvalidator/tests/test_packtools_validations.py index 46e1102..c81edf2 100644 --- a/spsvalidator/tests/test_packtools_validations.py +++ b/spsvalidator/tests/test_packtools_validations.py @@ -331,10 +331,10 @@ def test_abstract_sem_lang_reporta_issue(tmp_path): def test_packtools_version(): - """packtools 4.16.7 deve estar instalada.""" + """packtools 4.16.9 deve estar instalada.""" import packtools - assert packtools.__version__ == "4.16.7" + assert packtools.__version__ == "4.16.9" # ---------------------------------------------------------------------------