mirror of https://github.com/interlegis/sapl.git
Browse Source
* fix(assinatura): materializacao do PDF-alvo sobe com o servico O comando `materializar_pdfs_para_assinatura` era idempotente e "feito para cron" — mas nada o agendava: nem crontab no repo, nem celery, nem timer, nem entrada em /etc/cron.d na imagem. Na pratica virava passo manual de implantacao, e a falha e MUDA: materia protocolada nunca vira pendencia no app, sem erro nenhum, sem log. So aparece quando um vereador reclama que a materia nao chegou para assinar. - `--intervalo SEGUNDOS` no proprio comando. 0 (padrao) preserva a passada unica da invocacao manual; maior que zero fica em laco. A logica ficou em Python, e nao num `while true` de shell, para ser testavel, logar pelo Django e sobreviver a passada que estoura — um laco que morre em silencio seria o mesmo problema, so que mais dificil de achar. - `start.sh` sobe o laco junto do gunicorn, ao lado de migrate_db e create_admin. Onde a imagem subir, a rotina sobe. Intervalo por MATERIALIZACAO_INTERVALO_SEGUNDOS, padrao 300s. - compose de dev faz o mesmo, para o ambiente local nao divergir. Testes: passada unica preservada, laco dorme entre passadas e nao retorna, e laco sobrevive a passada que levanta excecao. Refs: refinamento da assinatura §5/§5.1 (o doc ja previa "em cron na VPS" — isto tira a dependencia de alguem lembrar de instalar). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * Fix(Assinatura): pendencia carrega o id do keyset e PDF sumido nao derruba o lote AB#1473 Dois defeitos mudos no mesmo caminho, os dois cortando a pendencia antes de ela chegar ao app: 1. `serializar_pendencia` nao emitia `id` no topo. O hub le exatamente esse campo para avancar o cursor (PollerSapl.pollAssinaturasPendentes) e devolve como `id_gt`, que a view filtra em `materia_id__gt`. Sem ele o cursor virava string vazia e a fonte relia a primeira pagina para sempre. Vai o id da MATERIA, nao o do registro de pendencia: o alvo e OneToOne e a view pagina por materia_id. Mesmo tratamento na fonte de concluidas, onde o id e o desempate do cursor composto (assinado_em, id). 2. Referencia no banco sem binario no MEDIA (969 materias em Franco, dump restaurado sem a media) levantava OSError em `.size`/`.read()` e derrubava a resposta INTEIRA do poll com 500 — uma materia podre travava a fonte para todas as outras. Agora o item continua na lista com `documento` nulo, o cursor anda e o buraco grita no log. Testes: 61 passed em sapl/integracao_hub/tests/. --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>pull/3858/head
committed by
GitHub
6 changed files with 274 additions and 17 deletions
Loading…
Reference in new issue