feat(trf): download de peças via cpopg(download_pecas=True) para TRF1/3/5 (#272)#274
Open
jtrecenti wants to merge 3 commits into
Open
feat(trf): download de peças via cpopg(download_pecas=True) para TRF1/3/5 (#272)#274jtrecenti wants to merge 3 commits into
jtrecenti wants to merge 3 commits into
Conversation
Novo metodo `cpopg_download_pecas(id_cnj, diretorio=None)` que baixa as pecas (documentos juntados) de cada processo via `documentoSemLoginHTML.seam`. Cada peca vira `<diretorio>/<cnj>/<id_processo_doc>.html`, com o XHTML do viewer auto-contido (imagens embarcadas como data: URLs). O detalhe e refeito internamente em vez de receber a saida de `cpopg_download` porque os tokens `ca` que identificam cada peca estao amarrados a conversa Seam que renderizou o detalhe — peca tem que ser baixada na mesma `requests.Session`. Encapsular detalhe + pecas no mesmo metodo evita expor essa restricao na API publica (sessao expirada vira `login.seam` redirect). Os tres TRFs PJe compartilham exatamente a mesma URL e parametros, mas a infra foi duplicada por scraper (regra de memoria: evitar `_familia/` mesmo com 2+ ocorrencias). Apenas o `BASE_URL` muda; o resto e copia.
…ckedError Mudanças sobre o commit anterior (5f52094): - Remove `cpopg_download_pecas` separado e expõe a funcionalidade via `cpopg(id_cnj, download_pecas=False, diretorio=None)` nos 3 TRFs. Razão: a sessão é obrigatória para baixar as peças (tokens `ca` amarrados à conversa Seam do detalhe), então um método separado teria que refazer o GET do detalhe internamente para obter tokens válidos — desperdício. Junto na mesma chamada compartilha a session naturalmente. - Default `download_pecas=False`: comportamento atual de cpopg preservado. - Quando True, DataFrame ganha coluna `pecas` com lista de caminhos. - Schemas `InputCpopgTRF1/3/5` aceitam os 2 novos campos. - Nova exceção `juscraper.core.exceptions.BotChallengeBlockedError`. Detecta o padrão 403 + "Access Denied" + Reference Akamai e propaga em vez de ser engolida pelos try/except por-item (é session-wide). Mensagem orienta a aguardar minutos ou trocar de IP (VPN/hotspot) e inclui a Reference Akamai. 403 sem Access Denied segue como `requests.HTTPError`. - Notebooks `trf3.ipynb` e `trf5.ipynb` atualizados com a nova célula demonstrando `cpopg(..., download_pecas=True, diretorio=tmp)` e explicando por que a flag fica no cpopg (não num método separado).
A tabela `processoDocumentoGridTab` (Documentos juntados ao processo) usa o mesmo widget Richfaces da tabela de movimentacoes — pagina em blocos de 15. Antes desse fix, processos com > 15 documentos so devolviam a primeira pagina na coluna `documentos`, e com `download_pecas=True` so as 15 primeiras pecas eram baixadas. `extract_docs_pagination` espelha `extract_movs_pagination` (mesmo shape de `MovsPagination`, mesma POST AJAX via `fetch_movs_page`) mas alvo no panel `processoDocumentoGridTabPanel`. `merge_docs_pages` faz o splice no tbody correto sem mexer no de movs. `_fetch_one` paginas os dois sliders em sequencia dentro da mesma sessao. Refs #272.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
download_pecas: bool = False(+diretorio) emcpopgde TRF1, TRF3 e TRF5. QuandoTrue, baixa cada peça (documento juntado) viadocumentoSemLoginHTML.seampara<diretorio>/<cnj>/<id_processo_doc>.htmle adiciona colunapecasao DataFrame com a lista de caminhos por processo.Falsepreserva o comportamento atual (só metadados + movs + lista de documentos).cpopg(e não num método separado) porque os tokenscaque identificam cada peça estão amarrados à conversa Seam do detalhe — peças precisam ser baixadas na mesmarequests.Session. Folding na mesma chamada compartilha a session naturalmente e evita um GET duplicado do detalhe.cpopgagora pagina também a tabelaprocessoDocumentoGridTab(Documentos juntados ao processo). Antes só paginava movs — processos com > 15 documentos só devolviam a primeira página na colunadocumentos, e comdownload_pecas=Truesó as 15 primeiras peças eram baixadas. Verificado direto no sampledetail_paginated.html(2 sliders Richfaces: um pra movs com 11 páginas, outro pra docs com 2). Nova funçãoextract_docs_paginationespelhaextract_movs_pagination(mesmo shape, mesma POST AJAX), emerge_docs_pagesfaz o splice no tbody correto.juscraper.core.exceptions.BotChallengeBlockedError. Detecta o padrão 403 + bodyAccess Denied+ Reference Akamai e propaga em vez de virar warning silencioso por-item (é session-wide). Mensagem orienta a aguardar minutos ou trocar de IP (VPN/hotspot) e inclui a Reference Akamai. 403 semAccess Deniedsegue propagando comorequests.HTTPErrornormal viaraise_for_status.docs/notebooks/trf3.ipynbetrf5.ipynbdocumentam e demonstram a flag (célula nova executada ao vivo, output preservado).Test plan
BotChallengeBlockedErrore 3 novos para paginação de docs.test_cpopg_download_pecas_grava_arquivos(TRF3) baixou 4 peças de processo real.trf3etrf5executadas ao vivo (output real preservado).Refs #272