mirror of https://github.com/interlegis/sapl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Tree:
dc93586bae
2756-status-materia-pauta
2989-adicionado-presenca-em-reunioes-3.1.x
3.1.162-patch
3.1.x
3007-Adcionando-mudança-de-apresentaçã0-de-oradores-painel
3058-refatorar-tela-composicao-de-comissao-para-vue
3217-registro-numeracao
3268-result-votacao
3279-leitura-em-bloco
3299-orderby-explicito
3828_refatorar_mesa_diretora
AlertaSonoroPainel
MateriaDiscussao
OsTicket_#635416
Reuniao_frente_3364
StringsNaoFormatadas
Websocket_painel
adicionar-cron-job
bump_django
centraliza_resultado
configuracao_impressao
cron-update-solr-index
deduplica_comissao
dependabot/npm_and_yarn/diff-8.0.3
dependabot/npm_and_yarn/js-yaml-4.1.1
dependabot/npm_and_yarn/lodash-4.17.23
dependabot/npm_and_yarn/multi-c8afcbbcd8
dependabot/npm_and_yarn/node-forge-1.3.2
dependabot/pip/requirements/django-4.2.26
dependabot/pip/requirements/weasyprint-68.0
django-celery
faceted-search-2
feat/file-metafields
feat/painel-votacao-v2
feat/rate-limiter-2026
feat/sessao-relatorio-perf
fix/painel-registro-votacao-trava
fixes_protocolo_materia
form-appconfig
frontend_assets
hotfix/sanitize-textfield-xss
impressao-materia-tramitacao
insere_ano_numeracao_audiencia_publica
issue#3396
issue#3438
js-update
legislatura-fevereiro
master
merged-migrations-2021
mesa-vuejs
migracao
performance-relatorios
pesquisar-auditlog
refatora-relatorio-tramitacao
refatora-relatorios-pauta-sessao
sapl-logs
script-comissao
script-migracao-norma-materia
situacao-pauta
tela-config-relatorio
tipo-proposicao
upgrade-sapl
upgrade-sapl-sync-2026-02-25
valida-html
vuejs_painel
3.1.0-BETA
3.1.0-alpha
3.1.1-BETA
3.1.1-alpha
3.1.10-BETA
3.1.100
3.1.101
3.1.102
3.1.103
3.1.104
3.1.105
3.1.106
3.1.107
3.1.108
3.1.109
3.1.11-BETA
3.1.110
3.1.111
3.1.112
3.1.113
3.1.113-ALPHA
3.1.114
3.1.115
3.1.116
3.1.117
3.1.118
3.1.119
3.1.12-BETA
3.1.120
3.1.121
3.1.122
3.1.123
3.1.124
3.1.125
3.1.126
3.1.127
3.1.128
3.1.129
3.1.13-BETA
3.1.130
3.1.131
3.1.132
3.1.133
3.1.134
3.1.135
3.1.136
3.1.137
3.1.138
3.1.139
3.1.14-BETA
3.1.140
3.1.141
3.1.142
3.1.143
3.1.144
3.1.145
3.1.146
3.1.147
3.1.148
3.1.149
3.1.15-BETA
3.1.150
3.1.151
3.1.152
3.1.153
3.1.154
3.1.155
3.1.156
3.1.157
3.1.157-RC0
3.1.157-RC1
3.1.157-RC2
3.1.157-RC3
3.1.157-RC4
3.1.157-RC5
3.1.158
3.1.159
3.1.159-RC0
3.1.159-RC1
3.1.159-RC2
3.1.159-RC3
3.1.16-BETA
3.1.160
3.1.160-RC0
3.1.160-RC1
3.1.160-RC10
3.1.160-RC11
3.1.160-RC12
3.1.160-RC13
3.1.160-RC14
3.1.160-RC15
3.1.160-RC2
3.1.160-RC4
3.1.160-RC5
3.1.160-RC6
3.1.160-RC7
3.1.160-RC8
3.1.160-RC9
3.1.161
3.1.161-RC0
3.1.161-RC1
3.1.161-RC10
3.1.161-RC11
3.1.161-RC12
3.1.161-RC13
3.1.161-RC14
3.1.161-RC15
3.1.161-RC16
3.1.161-RC17
3.1.161-RC18
3.1.161-RC19
3.1.161-RC2
3.1.161-RC20
3.1.161-RC3
3.1.161-RC4
3.1.161-RC5
3.1.161-RC6
3.1.161-RC7
3.1.161-RC8
3.1.161-RC9
3.1.162
3.1.162-RC0
3.1.162-RC1
3.1.162-RC10
3.1.162-RC11
3.1.162-RC12
3.1.162-RC13
3.1.162-RC14
3.1.162-RC15
3.1.162-RC16
3.1.162-RC17
3.1.162-RC18
3.1.162-RC19
3.1.162-RC2
3.1.162-RC20
3.1.162-RC3
3.1.162-RC4
3.1.162-RC5
3.1.162-RC6
3.1.162-RC7
3.1.162-RC8
3.1.162-RC9
3.1.163
3.1.163-RC1
3.1.163-RC10
3.1.163-RC11
3.1.163-RC12
3.1.163-RC13
3.1.163-RC14
3.1.163-RC15
3.1.163-RC16
3.1.163-RC17
3.1.163-RC18
3.1.163-RC19
3.1.163-RC2
3.1.163-RC20
3.1.163-RC21
3.1.163-RC22
3.1.163-RC23
3.1.163-RC24
3.1.163-RC3
3.1.163-RC4
3.1.163-RC5
3.1.163-RC6
3.1.163-RC7
3.1.163-RC8
3.1.163-RC9
3.1.164-RC0
3.1.164-RC1
3.1.164-RC2
3.1.164-RC2-test
3.1.164-RC3
3.1.164-RC4
3.1.164-RC5
3.1.164-alpha
3.1.165-RC0
3.1.165-RC1
3.1.165-RC2
3.1.165-RC3
3.1.17-BETA
3.1.18-BETA
3.1.19-BETA
3.1.2-BETA
3.1.20-BETA
3.1.21-BETA
3.1.22-BETA
3.1.23-BETA
3.1.24-BETA
3.1.25-BETA
3.1.26-BETA
3.1.27-BETA
3.1.28-BETA
3.1.29-BETA
3.1.3-BETA
3.1.30-BETA
3.1.31-BETA
3.1.32-BETA
3.1.33-BETA
3.1.34-BETA
3.1.35-BETA
3.1.36-BETA
3.1.37-BETA
3.1.38-BETA
3.1.39-BETA
3.1.4-BETA
3.1.40-BETA
3.1.41-BETA
3.1.42-BETA
3.1.43-BETA
3.1.44-BETA
3.1.45
3.1.46
3.1.47
3.1.48
3.1.49
3.1.5-BETA
3.1.50
3.1.51
3.1.52
3.1.53
3.1.54
3.1.55
3.1.56
3.1.57
3.1.58
3.1.59
3.1.6-BETA
3.1.60
3.1.61
3.1.62
3.1.63
3.1.64
3.1.65
3.1.66
3.1.67
3.1.68
3.1.69
3.1.7-BETA
3.1.70
3.1.71
3.1.72
3.1.73
3.1.74
3.1.75
3.1.76
3.1.77
3.1.78
3.1.79
3.1.8-BETA
3.1.80
3.1.81
3.1.82
3.1.83
3.1.84
3.1.85
3.1.86
3.1.87
3.1.88
3.1.89
3.1.9-BETA
3.1.90
3.1.91
3.1.92
3.1.93
3.1.94
3.1.95
3.1.96
3.1.97
3.1.98
3.1.99
${ noResults }
Substitui o polling HTTP do painel legislativo por push via WebSockets (um PainelConsumer por sessão, broadcast de snapshot completo a partir de build_dados_painel()) e cobre com páginas Vue 2 + Pinia as telas de exibição pública do painel, votação nominal, voto individual, votação simbólica e leitura de matéria — todas consumindo o mesmo broadcast via normalizePainelData()/painelStore, sem componentes Vuex remanescentes. - Backend: PainelConsumer/ASGI (Channels + Redis), views Postgres (SessaoPresencasView/SessaoMateriasVotacoesView) para eliminar N+1, cronômetro com estado compartilhado em cache, migrations 0070-0073 como cadeia única. - Máscara de voto preservada: o broadcast público continua sempre mascarado por mostrar_voto; estado por-operador e por-eleitor vem de endpoints HTTP dedicados (votante_status, _status_json), nunca do broadcast compartilhado. - Infra: docker-compose e nginx atualizados para /ws/, requirements (channels/daphne/channels-redis) e vue.config.js com as novas entries de webpack. - Testes: test_broadcasts.py, test_consumers.py, test_votacao_nominal.py e test_sessao_view.py cobrindo o novo backend. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H85beqPY6uKTmSdCEovbPa Painel: remove polling fallback, WS-only with connection error UI Documents local-dev setup requirements in sapl/sessao/README.md and finishes the polling->push migration by removing the HTTP polling that was still running as a fallback everywhere: the three legacy templates (painel/index.html, voto_individual.html, sessao/votacao/nominal.html) and voto-individual/main.js. Every painel/votação screen — legacy and Vue — is now WebSocket-only. - Reconnect: exponential backoff with jitter (was flat 500ms in Vue), and connections now distinguish PainelConsumer's permanent close codes (4401/4403/4404 — auth/permission/no-such-sessão) from transient drops instead of retrying forever. New frontend/src/__apps/painel/ws/ painelSocket.js + WsStatusBanner.vue share this across the five Vue apps; the three legacy templates get an equivalent vanilla-JS banner. - Broadcast coverage: without polling to mask it, every write path that changes the painel payload now has to call broadcast_dados_painel() itself. Added it to PresencaView/PresencaOrdemDiaView, the three Orador*Crud create/update/delete views (via a new BroadcastPainelOnSaveMixin — covered by a new end-to-end test, since self.kwargs['pk'] means the parent sessão in CreateView but the Orador's own pk in Update/DeleteView), LeituraEmBloco, and VotacaoEmBlocoSimbolicaView/VotacaoEmBlocoNominalView. - voto_individual.html now opens its WebSocket whenever a sessão is open (not just when a matéria is), gated on sessao_id being present rather than on materia — otherwise a page with no votação aberta at all had no sessao_id to build a WS URL from. - Dead code removed: painel_mensagem/painel_parlamentar/painel_votacao (views, urls, templates) had no references anywhere and predate this work. dados_painel/get_dados_painel (the HTTP polling endpoint) and its ETag helper are also removed now that nothing polls them, along with the tests pinning their HTTP-specific behavior — build_dados_painel() itself is untouched and still backs every WS broadcast. - scripts/verify_painel_websockets.sh now runs a single Daphne process instead of Daphne+runserver on separate ports: WS-only clients need HTTP and WS on the same origin, which the old split-port setup never actually provided (it only appeared to work via the polling fallback that's now gone). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H85beqPY6uKTmSdCEovbPa |
4 weeks ago | |
|---|---|---|
| .. | ||
| create_admin.py | Atualização da imagem base Docker (#3787) | 1 year ago |
| genkey.py | Atualização da imagem base Docker (#3787) | 1 year ago |
| gunicorn.conf.py | Fix recibo proposição e adiciona rate limiter em matéria e norma | 1 year ago |
| solr_cli.py | Atualização da imagem base Docker (#3787) | 1 year ago |
| start.sh | Painel de votação em tempo real: Django Channels/WebSockets + Vue 2/Pinia | 4 weeks ago |
| wait-for-pg.sh | Atualização da imagem base Docker (#3787) | 1 year ago |
| wait-for-solr.sh | Atualização da imagem base Docker (#3787) | 1 year ago |