Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions spsvalidator/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ 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"
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",
Expand Down
14 changes: 14 additions & 0 deletions spsvalidator/src/spsvalidator/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,23 @@

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
from spsvalidator.version import APP_DISPLAY_NAME
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":
Expand Down Expand Up @@ -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 {
Expand Down
44 changes: 44 additions & 0 deletions spsvalidator/tests/test_packtools_locale_sync.py
Original file line number Diff line number Diff line change
@@ -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"]
4 changes: 2 additions & 2 deletions spsvalidator/tests/test_packtools_validations.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"


# ---------------------------------------------------------------------------
Expand Down