Commit 6a9dbe8
* bump(version): incrementa versão de 4.16.5 para 4.16.6
- Atualiza __version__ em packtools/version.py de '4.16.5' para '4.16.6'
- Versão incrementada em patch para refletir a correção de bug nas funções
validate_secs e validate_lists (issue #1227)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(xml_validations): corrige validate_secs, validate_lists e validate_response que não retornavam resultados
Problema (issue #1227):
- As funções validate_secs, validate_lists e validate_response em
xml_validations.py instanciavam o validador correspondente mas nunca
chamavam yield from validator.validate(), tornando-as funções regulares
que retornavam None em vez de generators
- Ao tentar iterar sobre o valor retornado (None), o orquestrador de
validação lançava TypeError: 'NoneType' object is not iterable
- Adicionalmente, validate_secs e validate_lists acessavam params["sec_rules"]
e params["list_rules"] diretamente, o que lançava KeyError quando as
chaves estavam ausentes no dicionário de parâmetros
Correções aplicadas:
- Adicionado `yield from validator.validate()` em validate_lists,
validate_response e validate_secs, tornando-as generators válidos
- Substituído params["list_rules"] por params.get("list_rules", {})
para evitar KeyError quando a chave não está presente
- Substituído params["sec_rules"] por params.get("sec_rules", {})
pelo mesmo motivo
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* test(test_list): adiciona testes de regressão para validate_lists em xml_validations
Contexto (issue #1227):
- Não havia testes para a função wrapper validate_lists de xml_validations.py,
apenas para a classe ArticleListValidation diretamente
- A ausência de cobertura permitiu que o bug (função retornando None)
passasse despercebido
Testes adicionados na classe TestValidateListsWrapper:
- test_list_without_list_type_returns_structured_result: garante que
<list> sem @list-type retorna resultado estruturado com response != "OK"
em vez de lançar TypeError (cenário exato reportado na issue)
- test_list_with_valid_list_type_returns_ok: garante que <list list-type="bullet">
retorna response "OK" para a validação de presença do atributo
- test_empty_params_does_not_raise: garante que params vazio ({}) não
lança KeyError ao chamar validate_lists
- test_no_lists_returns_empty: garante que XML sem elementos <list>
retorna um iterável vazio
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* test(test_sec): adiciona testes de regressão para validate_secs em xml_validations
Contexto (issue #1227):
- Não havia testes para a função wrapper validate_secs de xml_validations.py,
apenas para as classes SecValidation e XMLSecValidation diretamente
- A ausência de cobertura permitiu que o bug (função retornando None)
passasse despercebido
Testes adicionados na classe TestValidateSecsWrapper:
- test_sec_without_title_returns_structured_result: garante que <sec>
sem <title> retorna resultado estruturado com response != "OK" em vez
de lançar TypeError (cenário exato reportado na issue)
- test_sec_with_title_returns_ok: garante que <sec> com <title> retorna
response "OK" para a regra de validação de título
- test_empty_params_does_not_raise: garante que params vazio ({}) não
lança KeyError ao chamar validate_secs
- test_no_secs_returns_empty: garante que XML do tipo "editorial"
(sem obrigatoriedade de seções) sem elementos <sec> retorna vazio;
usa article-type="editorial" para evitar falso positivo de
data-availability que afetaria article-type="research-article"
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(xml_validations): reverte para acesso direto params["list_rules"] e params["sec_rules"]
Conforme revisão da robertatakenaka: params.get("list_rules", {}) e
params.get("sec_rules", {}) causavam execução dos validadores sem as
regras configuradas (usando apenas os defaults internos das classes)
quando as chaves estavam ausentes. O acesso direto torna explícito que
list_rules e sec_rules são obrigatórios no dict de parâmetros — o que
sempre ocorre na rota normal via get_default_rules().
Os testes de regressão do wrapper foram atualizados para usar
get_default_rules() em vez de {} como params, garantindo que a
validação seja exercitada com as regras reais de produção (list_rules.json
e sec_rules.json). O teste test_empty_params_does_not_raise foi
substituído por test_validate_*_does_not_raise_typeerror, que testa
a regressão correta do issue #1227 (TypeError por generator ausente).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent aec2af1 commit 6a9dbe8
4 files changed
Lines changed: 123 additions & 4 deletions
File tree
- packtools
- sps/validation
- tests/sps/validation
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
377 | 377 | | |
378 | 378 | | |
379 | 379 | | |
380 | | - | |
| 380 | + | |
| 381 | + | |
381 | 382 | | |
382 | 383 | | |
383 | 384 | | |
| |||
410 | 411 | | |
411 | 412 | | |
412 | 413 | | |
413 | | - | |
| 414 | + | |
| 415 | + | |
414 | 416 | | |
415 | 417 | | |
416 | 418 | | |
| |||
427 | 429 | | |
428 | 430 | | |
429 | 431 | | |
430 | | - | |
| 432 | + | |
| 433 | + | |
431 | 434 | | |
432 | 435 | | |
433 | 436 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
| 6 | + | |
5 | 7 | | |
6 | 8 | | |
7 | 9 | | |
| |||
416 | 418 | | |
417 | 419 | | |
418 | 420 | | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
419 | 480 | | |
420 | 481 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| 19 | + | |
| 20 | + | |
19 | 21 | | |
20 | 22 | | |
21 | 23 | | |
| |||
785 | 787 | | |
786 | 788 | | |
787 | 789 | | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
788 | 843 | | |
789 | 844 | | |
0 commit comments