Contexto
Identificado na review do PR #257 (wiring TJPE etapa 2 da #197), mas e cross-tribunal.
Quando um scraper segue o padrao "wrapper publico (cjsg) → metodo de download (cjsg_download) com a validacao via apply_input_pipeline_search", o method_name passado ao helper e o do metodo interno:
# courts/tjpe/client.py:54-56 (idem TJRN, TJBA, ...)
inp = apply_input_pipeline_search(
InputCJSGTJPE,
\"TJPEScraper.cjsg_download()\", # ← interno, mesmo quando user chamou .cjsg
...
)
A mensagem resultante e:
>>> jus.scraper(\"tjpe\").cjsg(\"dano moral\", kwarg_inventado=\"x\")
TypeError: TJPEScraper.cjsg_download() got unexpected keyword argument(s): 'kwarg_inventado'
O usuario chamou cjsg, mas a mensagem fala de cjsg_download. Friccao leve de UX — o usuario pode ate procurar cjsg_download no codigo e ficar confuso por nao ter chamado.
Onde acontece
Mesmo padrao em:
courts/tjpe/client.py:54-56
courts/tjrn/client.py:165-167
courts/tjba/client.py:103-105
courts/tjap/client.py, courts/tjmt/client.py, courts/tjpa/client.py,
courts/tjes/client.py, courts/tjgo/client.py, courts/tjmg/client.py,
courts/tjpb/client.py, courts/tjrr/client.py, courts/tjrj/client.py,
courts/tjrs/client.py, courts/tjsc/client.py, courts/tjto/client.py,
courts/tjpr/client.py, courts/tjpi/client.py, courts/tjro/client.py,
courts/tjmt/client.py, courts/tjdft/client.py
(grep apply_input_pipeline_search em src/juscraper/courts/.)
Opcoes de fix
- Cosmetico — passar o nome do metodo publico (
\"TJPEScraper.cjsg()\" em vez de \"TJPEScraper.cjsg_download()\"). Mas ai quando o usuario chamar cjsg_download diretamente a mensagem fica errada no outro sentido.
- Detectar caller frame com
inspect.stack() — funciona mas e fragil e adiciona custo a cada validacao.
- Adicionar parametro
method_name em cjsg_download (com default = \"<TJxx>.cjsg_download()\") e o wrapper cjsg passa o seu proprio nome. Mudanca pequena, propaga bem entre tribunais, sem magia.
- Mover a validacao para o wrapper (
cjsg), pular em cjsg_download quando ja validado — mas se cjsg_download for chamado direto, valida la. Da pra fazer com flag _skip_validation, mas vira tres jeitos de validar.
Sugestao: opcao (3). Eh um refactor mecanico, sem mudanca de comportamento alem da mensagem.
Out of scope
- Mudar o formato da mensagem de erro de
raise_on_extra_kwargs (o \"got unexpected keyword argument(s)\" esta canonizado em tests/_helpers.py::assert_unknown_kwarg_raises).
- Tocar em endpoints que ja sao um metodo so (TJSP
cjsg/cjpg, ComunicaCNJ, DataJud — la o wrapper nao existe).
Refs
Contexto
Identificado na review do PR #257 (wiring TJPE etapa 2 da #197), mas e cross-tribunal.
Quando um scraper segue o padrao "wrapper publico (
cjsg) → metodo de download (cjsg_download) com a validacao viaapply_input_pipeline_search", omethod_namepassado ao helper e o do metodo interno:A mensagem resultante e:
O usuario chamou
cjsg, mas a mensagem fala decjsg_download. Friccao leve de UX — o usuario pode ate procurarcjsg_downloadno codigo e ficar confuso por nao ter chamado.Onde acontece
Mesmo padrao em:
courts/tjpe/client.py:54-56courts/tjrn/client.py:165-167courts/tjba/client.py:103-105courts/tjap/client.py,courts/tjmt/client.py,courts/tjpa/client.py,courts/tjes/client.py,courts/tjgo/client.py,courts/tjmg/client.py,courts/tjpb/client.py,courts/tjrr/client.py,courts/tjrj/client.py,courts/tjrs/client.py,courts/tjsc/client.py,courts/tjto/client.py,courts/tjpr/client.py,courts/tjpi/client.py,courts/tjro/client.py,courts/tjmt/client.py,courts/tjdft/client.py(grep
apply_input_pipeline_searchemsrc/juscraper/courts/.)Opcoes de fix
\"TJPEScraper.cjsg()\"em vez de\"TJPEScraper.cjsg_download()\"). Mas ai quando o usuario chamarcjsg_downloaddiretamente a mensagem fica errada no outro sentido.inspect.stack()— funciona mas e fragil e adiciona custo a cada validacao.method_nameemcjsg_download(com default =\"<TJxx>.cjsg_download()\") e o wrappercjsgpassa o seu proprio nome. Mudanca pequena, propaga bem entre tribunais, sem magia.cjsg), pular emcjsg_downloadquando ja validado — mas secjsg_downloadfor chamado direto, valida la. Da pra fazer com flag_skip_validation, mas vira tres jeitos de validar.Sugestao: opcao (3). Eh um refactor mecanico, sem mudanca de comportamento alem da mensagem.
Out of scope
raise_on_extra_kwargs(o\"got unexpected keyword argument(s)\"esta canonizado emtests/_helpers.py::assert_unknown_kwarg_raises).cjsg/cjpg, ComunicaCNJ, DataJud — la o wrapper nao existe).Refs
tests/_helpers.py::assert_unknown_kwarg_raisesso checa o nome do kwarg via regex, entao o fix nao quebra contratos existentes.