@ -0,0 +1,17 @@ |
|||
kind: pipeline |
|||
type: kubernetes |
|||
name: default |
|||
steps: |
|||
- name: docker |
|||
image: plugins/docker |
|||
settings: |
|||
repo: porto.interlegis.leg.br/spdt/sapl |
|||
registry: porto.interlegis.leg.br |
|||
mirror: https://registrycache.interlegis.leg.br |
|||
pull: if-not-exists |
|||
dockerfile: docker/Dockerfile |
|||
auto_tag: true |
|||
username: |
|||
from_secret: porto_user |
|||
password: |
|||
from_secret: porto_pw |
@ -0,0 +1,12 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
SOLR_USER=solr |
|||
SOLR_PASSWORD=SolrRocks |
|||
SOLR_HOST=localhost |
|||
SOLR_PORT=8983 |
|||
|
|||
CONFIGSET_NAME=sapl_configset |
|||
CONFIGSET_FILE=sapl_configset.zip |
|||
|
|||
export SOLR_URL="http://$SOLR_USER:$SOLR_PASSWORD@$SOLR_HOST:$SOLR_PORT/solr/admin/configs?action=UPLOAD&name=$CONFIGSET_NAME&wt=json" |
|||
curl -X POST -L -F "file=@$CONFIGSET_FILE;type=application/zip" $SOLR_URL |
@ -0,0 +1,111 @@ |
|||
version: "3.7" |
|||
services: |
|||
sapldb: |
|||
image: postgres:10.5-alpine |
|||
restart: always |
|||
container_name: postgres |
|||
labels: |
|||
NAME: "postgres" |
|||
environment: |
|||
POSTGRES_PASSWORD: sapl |
|||
POSTGRES_USER: sapl |
|||
POSTGRES_DB: sapl |
|||
PGDATA : /var/lib/postgresql/data/ |
|||
volumes: |
|||
- sapldb_data:/var/lib/postgresql/data/ |
|||
ports: |
|||
- "5433:5432" |
|||
networks: |
|||
- sapl-net |
|||
solr1: |
|||
image: solr:8.11 |
|||
restart: unless-stopped |
|||
command: bash -c "docker-entrypoint.sh solr zk cp file:/var/security.json zk:security.json && exec solr-foreground" |
|||
container_name: solr |
|||
labels: |
|||
NAME: "solr" |
|||
ports: |
|||
- "8983:8983" |
|||
environment: |
|||
- ZK_HOST=zoo1:2181 |
|||
- SOLR_HEAP=1g |
|||
- SOLR_OPTS=-Djute.maxbuffer=50000000 |
|||
networks: |
|||
- sapl-net |
|||
depends_on: |
|||
- zoo1 |
|||
volumes: |
|||
- type: bind |
|||
source: ./solr_cloud/security.json |
|||
target: /var/security.json |
|||
- solr_data:/opt/solr/server/solr |
|||
- solr_configsets:/opt/solr/server/solr/configsets |
|||
|
|||
sapl: |
|||
image: interlegis/sapl:3.1.163-RC2 |
|||
# build: |
|||
# context: ../ |
|||
# dockerfile: ./docker/Dockerfile |
|||
container_name: sapl |
|||
labels: |
|||
NAME: "sapl" |
|||
restart: always |
|||
environment: |
|||
ADMIN_PASSWORD: interlegis |
|||
ADMIN_EMAIL: email@dominio.net |
|||
DEBUG: 'False' |
|||
EMAIL_PORT: 587 |
|||
EMAIL_USE_TLS: 'False' |
|||
EMAIL_HOST: smtp.dominio.net |
|||
EMAIL_HOST_USER: usuariosmtp |
|||
EMAIL_SEND_USER: usuariosmtp |
|||
EMAIL_HOST_PASSWORD: senhasmtp |
|||
USE_SOLR: 'True' |
|||
SOLR_COLLECTION: sapl |
|||
SOLR_URL: http://solr:SolrRocks@solr1:8983 |
|||
TZ: America/Sao_Paulo |
|||
volumes: |
|||
- sapl_data:/var/interlegis/sapl/data |
|||
- sapl_media:/var/interlegis/sapl/media |
|||
depends_on: |
|||
- sapldb |
|||
- solr1 |
|||
ports: |
|||
- "80:80" |
|||
networks: |
|||
- sapl-net |
|||
zoo1: |
|||
image: zookeeper:3.8 |
|||
container_name: zoo1 |
|||
hostname: zoo1 |
|||
restart: unless-stopped |
|||
ports: |
|||
- 2181:2181 |
|||
- 7001:7000 |
|||
environment: |
|||
ZOO_MY_ID: 1 |
|||
ZOOKEEPER_TICK_TIME: 2000 |
|||
ZOOKEEPER_CLIENT_PORT: 2181 |
|||
JVMFLAGS: "-Xmx1024m -Djute.maxbuffer=50000000" |
|||
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 |
|||
ZOO_LOG4J_PROP: "INFO,ROLLINGFILE" |
|||
ZOO_4LW_COMMANDS_WHITELIST: mntr, conf, ruok |
|||
ZOO_CFG_EXTRA: "metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider metricsProvider.httpPort=7000 metricsProvider.exportJvmInfo=true" |
|||
volumes: |
|||
- zoo_data:/data |
|||
- zoo_log:/datalog |
|||
networks: |
|||
- sapl-net |
|||
networks: |
|||
sapl-net: |
|||
name: sapl-net |
|||
driver: bridge |
|||
volumes: |
|||
sapldb_data: |
|||
sapl_data: |
|||
sapl_media: |
|||
solr_data: |
|||
solr_home: |
|||
solr_configsets: |
|||
zoo_data: |
|||
zoo_log: |
@ -0,0 +1,13 @@ |
|||
{ |
|||
"authentication":{ |
|||
"blockUnknown": true, |
|||
"class":"solr.BasicAuthPlugin", |
|||
"credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="}, |
|||
"forwardCredentials": false, |
|||
"realm": "Solr Login" |
|||
}, |
|||
"authorization":{ |
|||
"class":"solr.RuleBasedAuthorizationPlugin", |
|||
"permissions":[{"name":"security-edit", "role":"admin"}], |
|||
"user-role":{"solr":"admin"} |
|||
}} |
Before Width: | Height: | Size: 262 B |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 682 B |
Before Width: | Height: | Size: 694 B |
Before Width: | Height: | Size: 975 B |
Before Width: | Height: | Size: 1021 B |
Before Width: | Height: | Size: 502 B |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 568 B |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 343 B |
Before Width: | Height: | Size: 238 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 367 B |
Before Width: | Height: | Size: 290 B |
@ -1 +1,807 @@ |
|||
{"status":"done","publicPath":"/static/sapl/frontend/","chunks":{"chunk-vendors":[{"name":"css/chunk-vendors.e8d8c6de.css","publicPath":"/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css","path":"sapl/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css"},{"name":"js/chunk-vendors.8a6bb3dd.js","publicPath":"/static/sapl/frontend/js/chunk-vendors.8a6bb3dd.js","path":"sapl/static/sapl/frontend/js/chunk-vendors.8a6bb3dd.js"},{"name":"css/chunk-vendors.e8d8c6de.css.map","publicPath":"/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css.map","path":"sapl/static/sapl/frontend/css/chunk-vendors.e8d8c6de.css.map"},{"name":"js/chunk-vendors.8a6bb3dd.js.map","publicPath":"/static/sapl/frontend/js/chunk-vendors.8a6bb3dd.js.map","path":"sapl/static/sapl/frontend/js/chunk-vendors.8a6bb3dd.js.map"}],"compilacao":[{"name":"css/compilacao.90ba9ac3.css","publicPath":"/static/sapl/frontend/css/compilacao.90ba9ac3.css","path":"sapl/static/sapl/frontend/css/compilacao.90ba9ac3.css"},{"name":"js/compilacao.2659b00e.js","publicPath":"/static/sapl/frontend/js/compilacao.2659b00e.js","path":"sapl/static/sapl/frontend/js/compilacao.2659b00e.js"},{"name":"css/compilacao.90ba9ac3.css.map","publicPath":"/static/sapl/frontend/css/compilacao.90ba9ac3.css.map","path":"sapl/static/sapl/frontend/css/compilacao.90ba9ac3.css.map"},{"name":"js/compilacao.2659b00e.js.map","publicPath":"/static/sapl/frontend/js/compilacao.2659b00e.js.map","path":"sapl/static/sapl/frontend/js/compilacao.2659b00e.js.map"}],"global":[{"name":"css/global.80b7564c.css","publicPath":"/static/sapl/frontend/css/global.80b7564c.css","path":"sapl/static/sapl/frontend/css/global.80b7564c.css"},{"name":"js/global.9079a4fb.js","publicPath":"/static/sapl/frontend/js/global.9079a4fb.js","path":"sapl/static/sapl/frontend/js/global.9079a4fb.js"},{"name":"css/global.80b7564c.css.map","publicPath":"/static/sapl/frontend/css/global.80b7564c.css.map","path":"sapl/static/sapl/frontend/css/global.80b7564c.css.map"},{"name":"js/global.9079a4fb.js.map","publicPath":"/static/sapl/frontend/js/global.9079a4fb.js.map","path":"sapl/static/sapl/frontend/js/global.9079a4fb.js.map"}],"painel":[{"name":"css/painel.5d957a9b.css","publicPath":"/static/sapl/frontend/css/painel.5d957a9b.css","path":"sapl/static/sapl/frontend/css/painel.5d957a9b.css"},{"name":"js/painel.37936654.js","publicPath":"/static/sapl/frontend/js/painel.37936654.js","path":"sapl/static/sapl/frontend/js/painel.37936654.js"},{"name":"css/painel.5d957a9b.css.map","publicPath":"/static/sapl/frontend/css/painel.5d957a9b.css.map","path":"sapl/static/sapl/frontend/css/painel.5d957a9b.css.map"},{"name":"js/painel.37936654.js.map","publicPath":"/static/sapl/frontend/js/painel.37936654.js.map","path":"sapl/static/sapl/frontend/js/painel.37936654.js.map"}],"parlamentar":[{"name":"css/parlamentar.0e433876.css","publicPath":"/static/sapl/frontend/css/parlamentar.0e433876.css","path":"sapl/static/sapl/frontend/css/parlamentar.0e433876.css"},{"name":"js/parlamentar.84997ad7.js","publicPath":"/static/sapl/frontend/js/parlamentar.84997ad7.js","path":"sapl/static/sapl/frontend/js/parlamentar.84997ad7.js"},{"name":"css/parlamentar.0e433876.css.map","publicPath":"/static/sapl/frontend/css/parlamentar.0e433876.css.map","path":"sapl/static/sapl/frontend/css/parlamentar.0e433876.css.map"},{"name":"js/parlamentar.84997ad7.js.map","publicPath":"/static/sapl/frontend/js/parlamentar.84997ad7.js.map","path":"sapl/static/sapl/frontend/js/parlamentar.84997ad7.js.map"}]}} |
|||
{ |
|||
"status": "done", |
|||
"assets": { |
|||
"fonts/fa-brands-400.86c7e1fa.woff2": { |
|||
"name": "fonts/fa-brands-400.86c7e1fa.woff2", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/fonts/fa-brands-400.86c7e1fa.woff2", |
|||
"publicPath": "/static/sapl/frontend/fonts/fa-brands-400.86c7e1fa.woff2" |
|||
}, |
|||
"fonts/fa-brands-400.f5defc2e.ttf": { |
|||
"name": "fonts/fa-brands-400.f5defc2e.ttf", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/fonts/fa-brands-400.f5defc2e.ttf", |
|||
"publicPath": "/static/sapl/frontend/fonts/fa-brands-400.f5defc2e.ttf" |
|||
}, |
|||
"fonts/fa-regular-400.e0550912.woff2": { |
|||
"name": "fonts/fa-regular-400.e0550912.woff2", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/fonts/fa-regular-400.e0550912.woff2", |
|||
"publicPath": "/static/sapl/frontend/fonts/fa-regular-400.e0550912.woff2" |
|||
}, |
|||
"fonts/fa-regular-400.3edb9004.ttf": { |
|||
"name": "fonts/fa-regular-400.3edb9004.ttf", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/fonts/fa-regular-400.3edb9004.ttf", |
|||
"publicPath": "/static/sapl/frontend/fonts/fa-regular-400.3edb9004.ttf" |
|||
}, |
|||
"fonts/fa-solid-900.64d5644d.woff2": { |
|||
"name": "fonts/fa-solid-900.64d5644d.woff2", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/fonts/fa-solid-900.64d5644d.woff2", |
|||
"publicPath": "/static/sapl/frontend/fonts/fa-solid-900.64d5644d.woff2" |
|||
}, |
|||
"fonts/fa-solid-900.f418d876.ttf": { |
|||
"name": "fonts/fa-solid-900.f418d876.ttf", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/fonts/fa-solid-900.f418d876.ttf", |
|||
"publicPath": "/static/sapl/frontend/fonts/fa-solid-900.f418d876.ttf" |
|||
}, |
|||
"fonts/fa-v4compatibility.7e7e1dad.ttf": { |
|||
"name": "fonts/fa-v4compatibility.7e7e1dad.ttf", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/fonts/fa-v4compatibility.7e7e1dad.ttf", |
|||
"publicPath": "/static/sapl/frontend/fonts/fa-v4compatibility.7e7e1dad.ttf" |
|||
}, |
|||
"css/global.45591136.css": { |
|||
"name": "css/global.45591136.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/css/global.45591136.css", |
|||
"publicPath": "/static/sapl/frontend/css/global.45591136.css" |
|||
}, |
|||
"js/global.babaa14f.js": { |
|||
"name": "js/global.babaa14f.js", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/global.babaa14f.js", |
|||
"publicPath": "/static/sapl/frontend/js/global.babaa14f.js" |
|||
}, |
|||
"css/parlamentar.cd5dc5a8.css": { |
|||
"name": "css/parlamentar.cd5dc5a8.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/css/parlamentar.cd5dc5a8.css", |
|||
"publicPath": "/static/sapl/frontend/css/parlamentar.cd5dc5a8.css" |
|||
}, |
|||
"js/parlamentar.25e7f0fa.js": { |
|||
"name": "js/parlamentar.25e7f0fa.js", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/parlamentar.25e7f0fa.js", |
|||
"publicPath": "/static/sapl/frontend/js/parlamentar.25e7f0fa.js" |
|||
}, |
|||
"css/painel.e2b9504e.css": { |
|||
"name": "css/painel.e2b9504e.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/css/painel.e2b9504e.css", |
|||
"publicPath": "/static/sapl/frontend/css/painel.e2b9504e.css" |
|||
}, |
|||
"js/painel.7aa779e9.js": { |
|||
"name": "js/painel.7aa779e9.js", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/painel.7aa779e9.js", |
|||
"publicPath": "/static/sapl/frontend/js/painel.7aa779e9.js" |
|||
}, |
|||
"css/compilacao.991aa842.css": { |
|||
"name": "css/compilacao.991aa842.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/css/compilacao.991aa842.css", |
|||
"publicPath": "/static/sapl/frontend/css/compilacao.991aa842.css" |
|||
}, |
|||
"js/compilacao.1c9473f1.js": { |
|||
"name": "js/compilacao.1c9473f1.js", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/compilacao.1c9473f1.js", |
|||
"publicPath": "/static/sapl/frontend/js/compilacao.1c9473f1.js" |
|||
}, |
|||
"css/chunk-vendors.9904f9d0.css": { |
|||
"name": "css/chunk-vendors.9904f9d0.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/css/chunk-vendors.9904f9d0.css", |
|||
"publicPath": "/static/sapl/frontend/css/chunk-vendors.9904f9d0.css" |
|||
}, |
|||
"js/chunk-vendors.874df7f4.js": { |
|||
"name": "js/chunk-vendors.874df7f4.js", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/chunk-vendors.874df7f4.js", |
|||
"publicPath": "/static/sapl/frontend/js/chunk-vendors.874df7f4.js" |
|||
}, |
|||
"audio/ring.mp3": { |
|||
"name": "audio/ring.mp3", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/audio/ring.mp3", |
|||
"publicPath": "/static/sapl/frontend/audio/ring.mp3" |
|||
}, |
|||
"img/arrow.png": { |
|||
"name": "img/arrow.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/arrow.png", |
|||
"publicPath": "/static/sapl/frontend/img/arrow.png" |
|||
}, |
|||
"img/authenticated.png": { |
|||
"name": "img/authenticated.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/authenticated.png", |
|||
"publicPath": "/static/sapl/frontend/img/authenticated.png" |
|||
}, |
|||
"img/avatar.png": { |
|||
"name": "img/avatar.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/avatar.png", |
|||
"publicPath": "/static/sapl/frontend/img/avatar.png" |
|||
}, |
|||
"img/beta.png": { |
|||
"name": "img/beta.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/beta.png", |
|||
"publicPath": "/static/sapl/frontend/img/beta.png" |
|||
}, |
|||
"img/bg.png": { |
|||
"name": "img/bg.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/bg.png", |
|||
"publicPath": "/static/sapl/frontend/img/bg.png" |
|||
}, |
|||
"img/brasao_transp.gif": { |
|||
"name": "img/brasao_transp.gif", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/brasao_transp.gif", |
|||
"publicPath": "/static/sapl/frontend/img/brasao_transp.gif" |
|||
}, |
|||
"img/down_arrow_select.jpg": { |
|||
"name": "img/down_arrow_select.jpg", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/down_arrow_select.jpg", |
|||
"publicPath": "/static/sapl/frontend/img/down_arrow_select.jpg" |
|||
}, |
|||
"img/etiqueta.png": { |
|||
"name": "img/etiqueta.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/etiqueta.png", |
|||
"publicPath": "/static/sapl/frontend/img/etiqueta.png" |
|||
}, |
|||
"img/favicon.ico": { |
|||
"name": "img/favicon.ico", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/favicon.ico", |
|||
"publicPath": "/static/sapl/frontend/img/favicon.ico" |
|||
}, |
|||
"img/file.png": { |
|||
"name": "img/file.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/file.png", |
|||
"publicPath": "/static/sapl/frontend/img/file.png" |
|||
}, |
|||
"img/hand-note.png": { |
|||
"name": "img/hand-note.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/hand-note.png", |
|||
"publicPath": "/static/sapl/frontend/img/hand-note.png" |
|||
}, |
|||
"img/icon_comissoes.png": { |
|||
"name": "img/icon_comissoes.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/icon_comissoes.png", |
|||
"publicPath": "/static/sapl/frontend/img/icon_comissoes.png" |
|||
}, |
|||
"img/icon_delete_white.png": { |
|||
"name": "img/icon_delete_white.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/icon_delete_white.png", |
|||
"publicPath": "/static/sapl/frontend/img/icon_delete_white.png" |
|||
}, |
|||
"img/icon_materia_legislativa.png": { |
|||
"name": "img/icon_materia_legislativa.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/icon_materia_legislativa.png", |
|||
"publicPath": "/static/sapl/frontend/img/icon_materia_legislativa.png" |
|||
}, |
|||
"img/icon_mesa_diretora.png": { |
|||
"name": "img/icon_mesa_diretora.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/icon_mesa_diretora.png", |
|||
"publicPath": "/static/sapl/frontend/img/icon_mesa_diretora.png" |
|||
}, |
|||
"img/icon_normas_juridicas.png": { |
|||
"name": "img/icon_normas_juridicas.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/icon_normas_juridicas.png", |
|||
"publicPath": "/static/sapl/frontend/img/icon_normas_juridicas.png" |
|||
}, |
|||
"img/icon_normas_juridicas_destaque.png": { |
|||
"name": "img/icon_normas_juridicas_destaque.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/icon_normas_juridicas_destaque.png", |
|||
"publicPath": "/static/sapl/frontend/img/icon_normas_juridicas_destaque.png" |
|||
}, |
|||
"img/icon_parlamentares.png": { |
|||
"name": "img/icon_parlamentares.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/icon_parlamentares.png", |
|||
"publicPath": "/static/sapl/frontend/img/icon_parlamentares.png" |
|||
}, |
|||
"img/icon_pautas.png": { |
|||
"name": "img/icon_pautas.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/icon_pautas.png", |
|||
"publicPath": "/static/sapl/frontend/img/icon_pautas.png" |
|||
}, |
|||
"img/icon_plenarias.png": { |
|||
"name": "img/icon_plenarias.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/icon_plenarias.png", |
|||
"publicPath": "/static/sapl/frontend/img/icon_plenarias.png" |
|||
}, |
|||
"img/icon_relatorios.png": { |
|||
"name": "img/icon_relatorios.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/icon_relatorios.png", |
|||
"publicPath": "/static/sapl/frontend/img/icon_relatorios.png" |
|||
}, |
|||
"img/icon_save_white.png": { |
|||
"name": "img/icon_save_white.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/icon_save_white.png", |
|||
"publicPath": "/static/sapl/frontend/img/icon_save_white.png" |
|||
}, |
|||
"img/lexml.gif": { |
|||
"name": "img/lexml.gif", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/lexml.gif", |
|||
"publicPath": "/static/sapl/frontend/img/lexml.gif" |
|||
}, |
|||
"img/logo.png": { |
|||
"name": "img/logo.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/logo.png", |
|||
"publicPath": "/static/sapl/frontend/img/logo.png" |
|||
}, |
|||
"img/logo_cc.png": { |
|||
"name": "img/logo_cc.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/logo_cc.png", |
|||
"publicPath": "/static/sapl/frontend/img/logo_cc.png" |
|||
}, |
|||
"img/logo_interlegis.png": { |
|||
"name": "img/logo_interlegis.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/logo_interlegis.png", |
|||
"publicPath": "/static/sapl/frontend/img/logo_interlegis.png" |
|||
}, |
|||
"img/manual.png": { |
|||
"name": "img/manual.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/manual.png", |
|||
"publicPath": "/static/sapl/frontend/img/manual.png" |
|||
}, |
|||
"img/pdflogo.png": { |
|||
"name": "img/pdflogo.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/pdflogo.png", |
|||
"publicPath": "/static/sapl/frontend/img/pdflogo.png" |
|||
}, |
|||
"img/perfil.png": { |
|||
"name": "img/perfil.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/perfil.png", |
|||
"publicPath": "/static/sapl/frontend/img/perfil.png" |
|||
}, |
|||
"img/search-gray.png": { |
|||
"name": "img/search-gray.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/search-gray.png", |
|||
"publicPath": "/static/sapl/frontend/img/search-gray.png" |
|||
}, |
|||
"img/search.png": { |
|||
"name": "img/search.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/search.png", |
|||
"publicPath": "/static/sapl/frontend/img/search.png" |
|||
}, |
|||
"img/user.png": { |
|||
"name": "img/user.png", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/user.png", |
|||
"publicPath": "/static/sapl/frontend/img/user.png" |
|||
}, |
|||
"js/skins/content/dark/content.css": { |
|||
"name": "js/skins/content/dark/content.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/dark/content.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/dark/content.css" |
|||
}, |
|||
"js/skins/content/dark/content.min.css": { |
|||
"name": "js/skins/content/dark/content.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/dark/content.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/dark/content.min.css" |
|||
}, |
|||
"js/skins/content/default/content.css": { |
|||
"name": "js/skins/content/default/content.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/default/content.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/default/content.css" |
|||
}, |
|||
"js/skins/content/default/content.min.css": { |
|||
"name": "js/skins/content/default/content.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/default/content.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/default/content.min.css" |
|||
}, |
|||
"js/skins/content/document/content.css": { |
|||
"name": "js/skins/content/document/content.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/document/content.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/document/content.css" |
|||
}, |
|||
"js/skins/content/document/content.min.css": { |
|||
"name": "js/skins/content/document/content.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/document/content.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/document/content.min.css" |
|||
}, |
|||
"js/skins/content/tinymce-5/content.css": { |
|||
"name": "js/skins/content/tinymce-5/content.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/tinymce-5/content.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/tinymce-5/content.css" |
|||
}, |
|||
"js/skins/content/tinymce-5/content.min.css": { |
|||
"name": "js/skins/content/tinymce-5/content.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/tinymce-5/content.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/tinymce-5/content.min.css" |
|||
}, |
|||
"js/skins/content/tinymce-5-dark/content.css": { |
|||
"name": "js/skins/content/tinymce-5-dark/content.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.css" |
|||
}, |
|||
"js/skins/content/tinymce-5-dark/content.min.css": { |
|||
"name": "js/skins/content/tinymce-5-dark/content.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.min.css" |
|||
}, |
|||
"js/skins/content/writer/content.css": { |
|||
"name": "js/skins/content/writer/content.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/writer/content.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/writer/content.css" |
|||
}, |
|||
"js/skins/content/writer/content.min.css": { |
|||
"name": "js/skins/content/writer/content.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/writer/content.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/writer/content.min.css" |
|||
}, |
|||
"js/skins/ui/oxide/content.css": { |
|||
"name": "js/skins/ui/oxide/content.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/content.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/content.css" |
|||
}, |
|||
"js/skins/ui/oxide/content.inline.css": { |
|||
"name": "js/skins/ui/oxide/content.inline.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/content.inline.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/content.inline.css" |
|||
}, |
|||
"js/skins/ui/oxide/content.inline.min.css": { |
|||
"name": "js/skins/ui/oxide/content.inline.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/content.inline.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/content.inline.min.css" |
|||
}, |
|||
"js/skins/ui/oxide/content.min.css": { |
|||
"name": "js/skins/ui/oxide/content.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/content.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/content.min.css" |
|||
}, |
|||
"js/skins/ui/oxide/skin.css": { |
|||
"name": "js/skins/ui/oxide/skin.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/skin.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/skin.css" |
|||
}, |
|||
"js/skins/ui/oxide/skin.min.css": { |
|||
"name": "js/skins/ui/oxide/skin.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/skin.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/skin.min.css" |
|||
}, |
|||
"js/skins/ui/oxide/skin.shadowdom.css": { |
|||
"name": "js/skins/ui/oxide/skin.shadowdom.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.css" |
|||
}, |
|||
"js/skins/ui/oxide/skin.shadowdom.min.css": { |
|||
"name": "js/skins/ui/oxide/skin.shadowdom.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.min.css" |
|||
}, |
|||
"js/skins/ui/oxide-dark/content.css": { |
|||
"name": "js/skins/ui/oxide-dark/content.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/content.css" |
|||
}, |
|||
"js/skins/ui/oxide-dark/content.inline.css": { |
|||
"name": "js/skins/ui/oxide-dark/content.inline.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.css" |
|||
}, |
|||
"js/skins/ui/oxide-dark/content.inline.min.css": { |
|||
"name": "js/skins/ui/oxide-dark/content.inline.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.min.css" |
|||
}, |
|||
"js/skins/ui/oxide-dark/content.min.css": { |
|||
"name": "js/skins/ui/oxide-dark/content.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/content.min.css" |
|||
}, |
|||
"js/skins/ui/oxide-dark/skin.css": { |
|||
"name": "js/skins/ui/oxide-dark/skin.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/skin.css" |
|||
}, |
|||
"js/skins/ui/oxide-dark/skin.min.css": { |
|||
"name": "js/skins/ui/oxide-dark/skin.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/skin.min.css" |
|||
}, |
|||
"js/skins/ui/oxide-dark/skin.shadowdom.css": { |
|||
"name": "js/skins/ui/oxide-dark/skin.shadowdom.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.css" |
|||
}, |
|||
"js/skins/ui/oxide-dark/skin.shadowdom.min.css": { |
|||
"name": "js/skins/ui/oxide-dark/skin.shadowdom.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.min.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5/content.css": { |
|||
"name": "js/skins/ui/tinymce-5/content.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/content.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5/content.inline.css": { |
|||
"name": "js/skins/ui/tinymce-5/content.inline.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5/content.inline.min.css": { |
|||
"name": "js/skins/ui/tinymce-5/content.inline.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.min.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5/content.min.css": { |
|||
"name": "js/skins/ui/tinymce-5/content.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/content.min.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5/skin.css": { |
|||
"name": "js/skins/ui/tinymce-5/skin.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/skin.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5/skin.min.css": { |
|||
"name": "js/skins/ui/tinymce-5/skin.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/skin.min.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5/skin.shadowdom.css": { |
|||
"name": "js/skins/ui/tinymce-5/skin.shadowdom.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5/skin.shadowdom.min.css": { |
|||
"name": "js/skins/ui/tinymce-5/skin.shadowdom.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.min.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/content.css": { |
|||
"name": "js/skins/ui/tinymce-5-dark/content.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/content.inline.css": { |
|||
"name": "js/skins/ui/tinymce-5-dark/content.inline.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/content.inline.min.css": { |
|||
"name": "js/skins/ui/tinymce-5-dark/content.inline.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.min.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/content.min.css": { |
|||
"name": "js/skins/ui/tinymce-5-dark/content.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.min.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/skin.css": { |
|||
"name": "js/skins/ui/tinymce-5-dark/skin.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/skin.min.css": { |
|||
"name": "js/skins/ui/tinymce-5-dark/skin.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.min.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/skin.shadowdom.css": { |
|||
"name": "js/skins/ui/tinymce-5-dark/skin.shadowdom.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.css" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/skin.shadowdom.min.css": { |
|||
"name": "js/skins/ui/tinymce-5-dark/skin.shadowdom.min.css", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.min.css", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.min.css" |
|||
}, |
|||
"js/chunk-vendors.874df7f4.js.LICENSE.txt": { |
|||
"name": "js/chunk-vendors.874df7f4.js.LICENSE.txt", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/chunk-vendors.874df7f4.js.LICENSE.txt", |
|||
"publicPath": "/static/sapl/frontend/js/chunk-vendors.874df7f4.js.LICENSE.txt" |
|||
}, |
|||
"js/global.babaa14f.js.LICENSE.txt": { |
|||
"name": "js/global.babaa14f.js.LICENSE.txt", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/global.babaa14f.js.LICENSE.txt", |
|||
"publicPath": "/static/sapl/frontend/js/global.babaa14f.js.LICENSE.txt" |
|||
}, |
|||
"fonts/fa-v4compatibility.7e7e1dad.ttf.gz": { |
|||
"name": "fonts/fa-v4compatibility.7e7e1dad.ttf.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/fonts/fa-v4compatibility.7e7e1dad.ttf.gz", |
|||
"publicPath": "/static/sapl/frontend/fonts/fa-v4compatibility.7e7e1dad.ttf.gz" |
|||
}, |
|||
"js/parlamentar.25e7f0fa.js.gz": { |
|||
"name": "js/parlamentar.25e7f0fa.js.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/parlamentar.25e7f0fa.js.gz", |
|||
"publicPath": "/static/sapl/frontend/js/parlamentar.25e7f0fa.js.gz" |
|||
}, |
|||
"css/painel.e2b9504e.css.gz": { |
|||
"name": "css/painel.e2b9504e.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/css/painel.e2b9504e.css.gz", |
|||
"publicPath": "/static/sapl/frontend/css/painel.e2b9504e.css.gz" |
|||
}, |
|||
"js/painel.7aa779e9.js.gz": { |
|||
"name": "js/painel.7aa779e9.js.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/painel.7aa779e9.js.gz", |
|||
"publicPath": "/static/sapl/frontend/js/painel.7aa779e9.js.gz" |
|||
}, |
|||
"css/compilacao.991aa842.css.gz": { |
|||
"name": "css/compilacao.991aa842.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/css/compilacao.991aa842.css.gz", |
|||
"publicPath": "/static/sapl/frontend/css/compilacao.991aa842.css.gz" |
|||
}, |
|||
"js/compilacao.1c9473f1.js.gz": { |
|||
"name": "js/compilacao.1c9473f1.js.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/compilacao.1c9473f1.js.gz", |
|||
"publicPath": "/static/sapl/frontend/js/compilacao.1c9473f1.js.gz" |
|||
}, |
|||
"js/global.babaa14f.js.gz": { |
|||
"name": "js/global.babaa14f.js.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/global.babaa14f.js.gz", |
|||
"publicPath": "/static/sapl/frontend/js/global.babaa14f.js.gz" |
|||
}, |
|||
"img/down_arrow_select.jpg.gz": { |
|||
"name": "img/down_arrow_select.jpg.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/img/down_arrow_select.jpg.gz", |
|||
"publicPath": "/static/sapl/frontend/img/down_arrow_select.jpg.gz" |
|||
}, |
|||
"js/skins/content/dark/content.css.gz": { |
|||
"name": "js/skins/content/dark/content.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/dark/content.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/dark/content.css.gz" |
|||
}, |
|||
"js/skins/content/dark/content.min.css.gz": { |
|||
"name": "js/skins/content/dark/content.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/dark/content.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/dark/content.min.css.gz" |
|||
}, |
|||
"js/skins/content/default/content.css.gz": { |
|||
"name": "js/skins/content/default/content.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/default/content.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/default/content.css.gz" |
|||
}, |
|||
"js/skins/content/default/content.min.css.gz": { |
|||
"name": "js/skins/content/default/content.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/default/content.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/default/content.min.css.gz" |
|||
}, |
|||
"js/skins/content/document/content.css.gz": { |
|||
"name": "js/skins/content/document/content.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/document/content.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/document/content.css.gz" |
|||
}, |
|||
"js/skins/content/document/content.min.css.gz": { |
|||
"name": "js/skins/content/document/content.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/document/content.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/document/content.min.css.gz" |
|||
}, |
|||
"js/skins/content/tinymce-5/content.css.gz": { |
|||
"name": "js/skins/content/tinymce-5/content.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/tinymce-5/content.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/tinymce-5/content.css.gz" |
|||
}, |
|||
"js/skins/content/tinymce-5/content.min.css.gz": { |
|||
"name": "js/skins/content/tinymce-5/content.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/tinymce-5/content.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/tinymce-5/content.min.css.gz" |
|||
}, |
|||
"js/skins/content/tinymce-5-dark/content.css.gz": { |
|||
"name": "js/skins/content/tinymce-5-dark/content.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.css.gz" |
|||
}, |
|||
"js/skins/content/tinymce-5-dark/content.min.css.gz": { |
|||
"name": "js/skins/content/tinymce-5-dark/content.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/tinymce-5-dark/content.min.css.gz" |
|||
}, |
|||
"js/skins/content/writer/content.css.gz": { |
|||
"name": "js/skins/content/writer/content.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/writer/content.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/writer/content.css.gz" |
|||
}, |
|||
"js/skins/content/writer/content.min.css.gz": { |
|||
"name": "js/skins/content/writer/content.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/content/writer/content.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/content/writer/content.min.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide/content.inline.css.gz": { |
|||
"name": "js/skins/ui/oxide/content.inline.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/content.inline.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/content.inline.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide/content.inline.min.css.gz": { |
|||
"name": "js/skins/ui/oxide/content.inline.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/content.inline.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/content.inline.min.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide/content.min.css.gz": { |
|||
"name": "js/skins/ui/oxide/content.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/content.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/content.min.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide/skin.shadowdom.css.gz": { |
|||
"name": "js/skins/ui/oxide/skin.shadowdom.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide/skin.shadowdom.min.css.gz": { |
|||
"name": "js/skins/ui/oxide/skin.shadowdom.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/skin.shadowdom.min.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide-dark/content.css.gz": { |
|||
"name": "js/skins/ui/oxide-dark/content.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/content.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide-dark/content.inline.css.gz": { |
|||
"name": "js/skins/ui/oxide-dark/content.inline.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide-dark/content.inline.min.css.gz": { |
|||
"name": "js/skins/ui/oxide-dark/content.inline.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/content.inline.min.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide-dark/content.min.css.gz": { |
|||
"name": "js/skins/ui/oxide-dark/content.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/content.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/content.min.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide/skin.css.gz": { |
|||
"name": "js/skins/ui/oxide/skin.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/skin.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/skin.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide-dark/skin.css.gz": { |
|||
"name": "js/skins/ui/oxide-dark/skin.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/skin.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide-dark/skin.shadowdom.css.gz": { |
|||
"name": "js/skins/ui/oxide-dark/skin.shadowdom.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide-dark/skin.shadowdom.min.css.gz": { |
|||
"name": "js/skins/ui/oxide-dark/skin.shadowdom.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/skin.shadowdom.min.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide-dark/skin.min.css.gz": { |
|||
"name": "js/skins/ui/oxide-dark/skin.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide-dark/skin.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide-dark/skin.min.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5/content.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5/content.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/content.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5/content.inline.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5/content.inline.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5/content.inline.min.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5/content.inline.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/content.inline.min.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5/content.min.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5/content.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/content.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/content.min.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide/content.css.gz": { |
|||
"name": "js/skins/ui/oxide/content.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/content.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/content.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5/skin.shadowdom.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5/skin.shadowdom.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5/skin.shadowdom.min.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5/skin.shadowdom.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/skin.shadowdom.min.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/content.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5-dark/content.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/content.inline.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5-dark/content.inline.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/content.inline.min.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5-dark/content.inline.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.inline.min.css.gz" |
|||
}, |
|||
"js/skins/ui/oxide/skin.min.css.gz": { |
|||
"name": "js/skins/ui/oxide/skin.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/oxide/skin.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/oxide/skin.min.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/content.min.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5-dark/content.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/content.min.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5/skin.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5/skin.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/skin.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/skin.shadowdom.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5-dark/skin.shadowdom.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/skin.shadowdom.min.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5-dark/skin.shadowdom.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.shadowdom.min.css.gz" |
|||
}, |
|||
"js/chunk-vendors.874df7f4.js.LICENSE.txt.gz": { |
|||
"name": "js/chunk-vendors.874df7f4.js.LICENSE.txt.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/chunk-vendors.874df7f4.js.LICENSE.txt.gz", |
|||
"publicPath": "/static/sapl/frontend/js/chunk-vendors.874df7f4.js.LICENSE.txt.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/skin.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5-dark/skin.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5-dark/skin.min.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5-dark/skin.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5-dark/skin.min.css.gz" |
|||
}, |
|||
"fonts/fa-regular-400.3edb9004.ttf.gz": { |
|||
"name": "fonts/fa-regular-400.3edb9004.ttf.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/fonts/fa-regular-400.3edb9004.ttf.gz", |
|||
"publicPath": "/static/sapl/frontend/fonts/fa-regular-400.3edb9004.ttf.gz" |
|||
}, |
|||
"css/global.45591136.css.gz": { |
|||
"name": "css/global.45591136.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/css/global.45591136.css.gz", |
|||
"publicPath": "/static/sapl/frontend/css/global.45591136.css.gz" |
|||
}, |
|||
"js/skins/ui/tinymce-5/skin.min.css.gz": { |
|||
"name": "js/skins/ui/tinymce-5/skin.min.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/skins/ui/tinymce-5/skin.min.css.gz", |
|||
"publicPath": "/static/sapl/frontend/js/skins/ui/tinymce-5/skin.min.css.gz" |
|||
}, |
|||
"css/chunk-vendors.9904f9d0.css.gz": { |
|||
"name": "css/chunk-vendors.9904f9d0.css.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/css/chunk-vendors.9904f9d0.css.gz", |
|||
"publicPath": "/static/sapl/frontend/css/chunk-vendors.9904f9d0.css.gz" |
|||
}, |
|||
"fonts/fa-brands-400.f5defc2e.ttf.gz": { |
|||
"name": "fonts/fa-brands-400.f5defc2e.ttf.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/fonts/fa-brands-400.f5defc2e.ttf.gz", |
|||
"publicPath": "/static/sapl/frontend/fonts/fa-brands-400.f5defc2e.ttf.gz" |
|||
}, |
|||
"fonts/fa-solid-900.f418d876.ttf.gz": { |
|||
"name": "fonts/fa-solid-900.f418d876.ttf.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/fonts/fa-solid-900.f418d876.ttf.gz", |
|||
"publicPath": "/static/sapl/frontend/fonts/fa-solid-900.f418d876.ttf.gz" |
|||
}, |
|||
"js/chunk-vendors.874df7f4.js.gz": { |
|||
"name": "js/chunk-vendors.874df7f4.js.gz", |
|||
"path": "/home/leandro/desenvolvimento/envs/sapl/sapl/static/sapl/frontend/js/chunk-vendors.874df7f4.js.gz", |
|||
"publicPath": "/static/sapl/frontend/js/chunk-vendors.874df7f4.js.gz" |
|||
} |
|||
}, |
|||
"chunks": { |
|||
"global": [ |
|||
"css/chunk-vendors.9904f9d0.css", |
|||
"js/chunk-vendors.874df7f4.js", |
|||
"css/global.45591136.css", |
|||
"js/global.babaa14f.js" |
|||
], |
|||
"parlamentar": [ |
|||
"css/chunk-vendors.9904f9d0.css", |
|||
"js/chunk-vendors.874df7f4.js", |
|||
"css/parlamentar.cd5dc5a8.css", |
|||
"js/parlamentar.25e7f0fa.js" |
|||
], |
|||
"painel": [ |
|||
"css/chunk-vendors.9904f9d0.css", |
|||
"js/chunk-vendors.874df7f4.js", |
|||
"css/painel.e2b9504e.css", |
|||
"js/painel.7aa779e9.js" |
|||
], |
|||
"compilacao": [ |
|||
"css/chunk-vendors.9904f9d0.css", |
|||
"js/chunk-vendors.874df7f4.js", |
|||
"css/compilacao.991aa842.css", |
|||
"js/compilacao.1c9473f1.js" |
|||
] |
|||
}, |
|||
"publicPath": "/static/sapl/frontend/" |
|||
} |
@ -0,0 +1,307 @@ |
|||
import logging |
|||
|
|||
from django import apps |
|||
from django.conf import settings |
|||
from django.contrib.contenttypes.models import ContentType |
|||
from django.core.exceptions import ObjectDoesNotExist |
|||
from django.db.models import Q |
|||
from django.db.models.signals import post_save |
|||
from django.dispatch import receiver |
|||
from django.utils import timezone |
|||
from django.utils.decorators import classonlymethod |
|||
from django.utils.translation import ugettext_lazy as _ |
|||
from django_filters.rest_framework.backends import DjangoFilterBackend |
|||
from rest_framework import serializers as rest_serializers |
|||
from rest_framework.authtoken.models import Token |
|||
from rest_framework.decorators import action, api_view, permission_classes |
|||
from rest_framework.fields import SerializerMethodField |
|||
from rest_framework.permissions import IsAuthenticated, IsAdminUser |
|||
from rest_framework.response import Response |
|||
from rest_framework.views import APIView |
|||
from rest_framework.viewsets import ModelViewSet |
|||
|
|||
from sapl.api.core.filters import SaplFilterSetMixin |
|||
from sapl.api.permissions import SaplModelPermissions |
|||
from sapl.base.models import Metadata |
|||
|
|||
# ATENÇÃO: MUDANÇAS NO CORE DEVEM SER REALIZADAS COM |
|||
# EXTREMA CAUTELA |
|||
|
|||
|
|||
class BusinessRulesNotImplementedMixin: |
|||
|
|||
def create(self, request, *args, **kwargs): |
|||
raise Exception(_("POST Create não implementado")) |
|||
|
|||
def update(self, request, *args, **kwargs): |
|||
raise Exception(_("PUT and PATCH não implementado")) |
|||
|
|||
def delete(self, request, *args, **kwargs): |
|||
raise Exception(_("DELETE Delete não implementado")) |
|||
|
|||
|
|||
class SaplApiViewSetConstrutor(): |
|||
|
|||
class SaplApiViewSet(ModelViewSet): |
|||
filter_backends = (DjangoFilterBackend,) |
|||
|
|||
_built_sets = {} |
|||
|
|||
@classonlymethod |
|||
def get_class_for_model(cls, model): |
|||
return cls._built_sets[model._meta.app_config][model] |
|||
|
|||
@classonlymethod |
|||
def build_class(cls): |
|||
import inspect |
|||
from sapl.api.core import serializers |
|||
|
|||
# Carrega todas as classes de sapl.api.serializers que possuam |
|||
# "Serializer" como Sufixo. |
|||
serializers_classes = inspect.getmembers(serializers) |
|||
|
|||
serializers_classes = {i[0]: i[1] for i in filter( |
|||
lambda x: x[0].endswith('Serializer'), |
|||
serializers_classes |
|||
)} |
|||
|
|||
# Carrega todas as classes de sapl.api.forms que possuam |
|||
# "FilterSet" como Sufixo. |
|||
from sapl.api.core import forms |
|||
filters_classes = inspect.getmembers(forms) |
|||
filters_classes = {i[0]: i[1] for i in filter( |
|||
lambda x: x[0].endswith('FilterSet'), |
|||
filters_classes |
|||
)} |
|||
|
|||
built_sets = {} |
|||
|
|||
def build(_model): |
|||
object_name = _model._meta.object_name |
|||
|
|||
# Caso Exista, pega a classe sapl.api.serializers.{model}Serializer |
|||
# ou utiliza a base do drf para gerar uma automática para o model |
|||
serializer_name = f'{object_name}Serializer' |
|||
_serializer_class = serializers_classes.get( |
|||
serializer_name, rest_serializers.ModelSerializer) |
|||
|
|||
# Caso Exista, pega a classe sapl.api.core.forms.{model}FilterSet |
|||
# ou utiliza a base definida em |
|||
# sapl.api.core.filters.SaplFilterSetMixin |
|||
filter_name = f'{object_name}FilterSet' |
|||
_filterset_class = filters_classes.get( |
|||
filter_name, SaplFilterSetMixin) |
|||
|
|||
def create_class(): |
|||
|
|||
_meta_serializer = object if not hasattr( |
|||
_serializer_class, 'Meta') else _serializer_class.Meta |
|||
|
|||
# Define uma classe padrão para serializer caso não tenha sido |
|||
# criada a classe sapl.api.core.serializers.{model}Serializer |
|||
class SaplSerializer(_serializer_class): |
|||
__str__ = SerializerMethodField() |
|||
metadata = SerializerMethodField() |
|||
|
|||
class Meta(_meta_serializer): |
|||
if not hasattr(_meta_serializer, 'ref_name'): |
|||
ref_name = f'{object_name}Serializer' |
|||
|
|||
if not hasattr(_meta_serializer, 'model'): |
|||
model = _model |
|||
|
|||
if hasattr(_meta_serializer, 'exclude'): |
|||
exclude = _meta_serializer.exclude |
|||
else: |
|||
if not hasattr(_meta_serializer, 'fields'): |
|||
fields = '__all__' |
|||
elif _meta_serializer.fields != '__all__': |
|||
fields = list(_meta_serializer.fields) + [ |
|||
'__str__', 'metadata'] |
|||
else: |
|||
fields = _meta_serializer.fields |
|||
|
|||
def get___str__(self, obj) -> str: |
|||
return str(obj) |
|||
|
|||
def get_metadata(self, obj): |
|||
try: |
|||
metadata = Metadata.objects.get( |
|||
content_type=ContentType.objects.get_for_model( |
|||
obj._meta.model), |
|||
object_id=obj.id |
|||
).metadata |
|||
except: |
|||
metadata = {} |
|||
finally: |
|||
return metadata |
|||
|
|||
_meta_filterset = object if not hasattr( |
|||
_filterset_class, 'Meta') else _filterset_class.Meta |
|||
|
|||
# Define uma classe padrão para filtro caso não tenha sido |
|||
# criada a classe sapl.api.forms.{model}FilterSet |
|||
class SaplFilterSet(_filterset_class): |
|||
|
|||
class Meta(_meta_filterset): |
|||
if not hasattr(_meta_filterset, 'model'): |
|||
model = _model |
|||
|
|||
# Define uma classe padrão ModelViewSet de DRF |
|||
class ModelSaplViewSet(SaplApiViewSetConstrutor.SaplApiViewSet): |
|||
queryset = _model.objects.all() |
|||
|
|||
# Utiliza o filtro customizado pela classe |
|||
# sapl.api.core.forms.{model}FilterSet |
|||
# ou utiliza o trivial SaplFilterSet definido acima |
|||
filterset_class = SaplFilterSet |
|||
|
|||
# Utiliza o serializer customizado pela classe |
|||
# sapl.api.core.serializers.{model}Serializer |
|||
# ou utiliza o trivial SaplSerializer definido acima |
|||
serializer_class = SaplSerializer |
|||
|
|||
return ModelSaplViewSet |
|||
|
|||
viewset = create_class() |
|||
viewset.__name__ = '%sModelSaplViewSet' % _model.__name__ |
|||
return viewset |
|||
|
|||
apps_sapl = [apps.apps.get_app_config( |
|||
n[5:]) for n in settings.SAPL_APPS] |
|||
for app in apps_sapl: |
|||
cls._built_sets[app] = {} |
|||
for model in app.get_models(): |
|||
cls._built_sets[app][model] = build(model) |
|||
|
|||
return cls |
|||
|
|||
|
|||
""" |
|||
1. Constroi uma rest_framework.viewsets.ModelViewSet para |
|||
todos os models de todas as apps do sapl |
|||
2. Define DjangoFilterBackend como ferramenta de filtro dos campos |
|||
3. Define Serializer como a seguir: |
|||
3.1 - Define um Serializer genérico para cada módel |
|||
3.2 - Recupera Serializer customizado em sapl.api.core.serializers |
|||
3.3 - Para todo model é opcional a existência de |
|||
sapl.api.core.serializers.{model}Serializer. |
|||
Caso não seja definido um Serializer customizado, utiliza-se o trivial |
|||
4. Define um FilterSet como a seguir: |
|||
4.1 - Define um FilterSet genérico para cada módel |
|||
4.2 - Recupera FilterSet customizado em sapl.api.core.forms |
|||
4.3 - Para todo model é opcional a existência de |
|||
sapl.api.core.forms.{model}FilterSet. |
|||
Caso não seja definido um FilterSet customizado, utiliza-se o trivial |
|||
4.4 - todos os campos que aceitam lookup 'exact' |
|||
podem ser filtrados por default |
|||
|
|||
5. SaplApiViewSetConstrutor não cria padrões e/ou exige conhecimento alem dos |
|||
exigidos pela DRF. |
|||
|
|||
6. As rotas são criadas seguindo nome da app e nome do model |
|||
http://localhost:9000/api/{applabel}/{model_name}/ |
|||
e seguem as variações definidas em: |
|||
https://www.django-rest-framework.org/api-guide/routers/#defaultrouter |
|||
|
|||
7. Todas as viewsets construídas por SaplApiViewSetConstrutor e suas rotas |
|||
(paginate list, detail, edit, create, delete) |
|||
bem como testes em ambiente de desenvolvimento podem ser conferidas em: |
|||
http://localhost:9000/api/ |
|||
desde que settings.DEBUG=True |
|||
|
|||
**SaplApiViewSetConstrutor._built_sets** é um dict de dicts de models conforme: |
|||
{ |
|||
... |
|||
|
|||
'audiencia': { |
|||
'tipoaudienciapublica': TipoAudienciaPublicaViewSet, |
|||
'audienciapublica': AudienciaPublicaViewSet, |
|||
'anexoaudienciapublica': AnexoAudienciaPublicaViewSet |
|||
|
|||
... |
|||
|
|||
}, |
|||
|
|||
... |
|||
|
|||
'base': { |
|||
'casalegislativa': CasaLegislativaViewSet, |
|||
'appconfig': AppConfigViewSet, |
|||
|
|||
... |
|||
|
|||
} |
|||
|
|||
... |
|||
|
|||
} |
|||
""" |
|||
|
|||
# Toda Classe construida acima, pode ser redefinida e aplicado quaisquer |
|||
# das possibilidades para uma classe normal criada a partir de |
|||
# rest_framework.viewsets.ModelViewSet conforme exemplo para a classe autor |
|||
|
|||
# decorator que processa um endpoint detail trivial com base no model passado, |
|||
# Um endpoint detail geralmente é um conteúdo baseado numa FK com outros possíveis filtros |
|||
# e os passados pelo proprio cliente, além de o serializer e o filterset |
|||
# ser desse model passado |
|||
|
|||
|
|||
class wrapper_queryset_response_for_drf_action(object): |
|||
|
|||
def __init__(self, model): |
|||
self.model = model |
|||
|
|||
def __call__(self, cls): |
|||
|
|||
def wrapper(instance_view, *args, **kwargs): |
|||
# recupera a viewset do model anotado |
|||
iv = instance_view |
|||
viewset_from_model = SaplApiViewSetConstrutor._built_sets[ |
|||
self.model._meta.app_config][self.model] |
|||
|
|||
# apossa da instancia da viewset mae do action |
|||
# em uma viewset que processa dados do model passado no decorator |
|||
iv.queryset = viewset_from_model.queryset |
|||
iv.serializer_class = viewset_from_model.serializer_class |
|||
iv.filterset_class = viewset_from_model.filterset_class |
|||
|
|||
iv.queryset = instance_view.filter_queryset( |
|||
iv.get_queryset()) |
|||
|
|||
# chama efetivamente o metodo anotado que deve devolver um queryset |
|||
# com os filtros específicos definido pelo programador customizador |
|||
qs = cls(instance_view, *args, **kwargs) |
|||
|
|||
page = iv.paginate_queryset(qs) |
|||
data = iv.get_serializer( |
|||
page if page is not None else qs, many=True).data |
|||
|
|||
return iv.get_paginated_response( |
|||
data) if page is not None else Response(data) |
|||
|
|||
return wrapper |
|||
|
|||
|
|||
# decorator para recuperar e transformar o default |
|||
class customize(object): |
|||
|
|||
def __init__(self, model): |
|||
self.model = model |
|||
|
|||
def __call__(self, cls): |
|||
|
|||
class _SaplApiViewSet( |
|||
cls, |
|||
SaplApiViewSetConstrutor._built_sets[ |
|||
self.model._meta.app_config][self.model] |
|||
): |
|||
pass |
|||
|
|||
if hasattr(_SaplApiViewSet, 'build'): |
|||
_SaplApiViewSet = _SaplApiViewSet.build() |
|||
|
|||
SaplApiViewSetConstrutor._built_sets[ |
|||
self.model._meta.app_config][self.model] = _SaplApiViewSet |
|||
return _SaplApiViewSet |
@ -0,0 +1,116 @@ |
|||
|
|||
from collections import OrderedDict |
|||
|
|||
from django.contrib.postgres.fields.jsonb import JSONField |
|||
from django.db.models.fields.files import FileField |
|||
from django.template.defaultfilters import capfirst |
|||
import django_filters |
|||
from django_filters.constants import ALL_FIELDS |
|||
from django_filters.filters import CharFilter |
|||
from django_filters.filterset import FilterSet |
|||
from django_filters.utils import resolve_field, get_all_model_fields |
|||
|
|||
|
|||
# ATENÇÃO: MUDANÇAS NO CORE DEVEM SER REALIZADAS COM |
|||
# EXTREMA CAUTELA E CONSCIENTE DOS IMPACTOS NA API |
|||
class SaplFilterSetMixin(FilterSet): |
|||
|
|||
o = CharFilter(method='filter_o') |
|||
|
|||
class Meta: |
|||
fields = '__all__' |
|||
filter_overrides = { |
|||
FileField: { |
|||
'filter_class': django_filters.CharFilter, |
|||
'extra': lambda f: { |
|||
'lookup_expr': 'exact', |
|||
}, |
|||
}, |
|||
JSONField: { |
|||
'filter_class': django_filters.CharFilter, |
|||
'extra': lambda f: { |
|||
'lookup_expr': 'exact', |
|||
}, |
|||
}, |
|||
} |
|||
|
|||
def filter_o(self, queryset, name, value): |
|||
try: |
|||
return queryset.order_by( |
|||
*map(str.strip, value.split(','))) |
|||
except: |
|||
return queryset |
|||
|
|||
@classmethod |
|||
def get_fields(cls): |
|||
model = cls._meta.model |
|||
fields_model = get_all_model_fields(model) |
|||
fields_filter = cls._meta.fields |
|||
exclude = cls._meta.exclude |
|||
|
|||
if exclude is not None and fields_filter is None: |
|||
fields_filter = ALL_FIELDS |
|||
|
|||
fields = fields_filter if isinstance(fields_filter, dict) else {} |
|||
|
|||
for f_str in fields_model: |
|||
if f_str not in fields: |
|||
|
|||
f = model._meta.get_field(f_str) |
|||
|
|||
if f.many_to_many: |
|||
fields[f_str] = ['exact'] |
|||
continue |
|||
|
|||
fields[f_str] = ['exact'] |
|||
|
|||
def get_keys_lookups(cl, sub_f): |
|||
r = [] |
|||
for lk, lv in cl.items(): |
|||
|
|||
if lk == 'contained_by': |
|||
continue |
|||
|
|||
sflk = f'{sub_f}{"__" if sub_f else ""}{lk}' |
|||
r.append(sflk) |
|||
|
|||
if hasattr(lv, 'class_lookups'): |
|||
r += get_keys_lookups(lv.class_lookups, sflk) |
|||
|
|||
if hasattr(lv, 'output_field') and hasattr(lv, 'output_field.class_lookups'): |
|||
r.append(f'{sflk}{"__" if sflk else ""}range') |
|||
|
|||
r += get_keys_lookups(lv.output_field.class_lookups, sflk) |
|||
|
|||
return r |
|||
|
|||
fields[f_str] = list( |
|||
set(fields[f_str] + get_keys_lookups(f.class_lookups, ''))) |
|||
|
|||
# Remove excluded fields |
|||
exclude = exclude or [] |
|||
|
|||
fields = [(f, lookups) |
|||
for f, lookups in fields.items() if f not in exclude] |
|||
|
|||
return OrderedDict(fields) |
|||
|
|||
@classmethod |
|||
def filter_for_field(cls, f, name, lookup_expr='exact'): |
|||
# Redefine método estático para ignorar filtro para |
|||
# fields que não possuam lookup_expr informado |
|||
|
|||
f, lookup_type = resolve_field(f, lookup_expr) |
|||
|
|||
default = { |
|||
'field_name': name, |
|||
'label': capfirst(f.verbose_name), |
|||
'lookup_expr': lookup_expr |
|||
} |
|||
|
|||
filter_class, params = cls.filter_for_lookup( |
|||
f, lookup_type) |
|||
default.update(params) |
|||
if filter_class is not None: |
|||
return filter_class(**default) |
|||
return None |
@ -0,0 +1,25 @@ |
|||
|
|||
from sapl.api.core.filters import SaplFilterSetMixin |
|||
from sapl.sessao.models import SessaoPlenaria |
|||
|
|||
# ATENÇÃO: MUDANÇAS NO CORE DEVEM SER REALIZADAS COM |
|||
# EXTREMA CAUTELA E CONSCIENTE DOS IMPACTOS NA API |
|||
|
|||
# FILTER SET dentro do core devem ser criados se o intuíto é um filter-set |
|||
# para o list da api. |
|||
# filter_set para actions, devem ser criados fora do core. |
|||
|
|||
# A CLASSE SessaoPlenariaFilterSet não é necessária |
|||
# o construtor da api construiría uma igual |
|||
# mas está aqui para demonstrar que caso queira customizar um filter_set |
|||
# que a api consiga recuperá-lo, para os endpoints básicos |
|||
# deve seguir os critérios de nomenclatura e herança |
|||
|
|||
# class [Model]FilterSet(SaplFilterSetMixin): |
|||
# class Meta(SaplFilterSetMixin.Meta): |
|||
|
|||
|
|||
class SessaoPlenariaFilterSet(SaplFilterSetMixin): |
|||
|
|||
class Meta(SaplFilterSetMixin.Meta): |
|||
model = SessaoPlenaria |
@ -0,0 +1,5 @@ |
|||
from drf_spectacular.openapi import AutoSchema |
|||
|
|||
|
|||
class Schema(AutoSchema): |
|||
pass |
@ -0,0 +1,50 @@ |
|||
import logging |
|||
|
|||
from django.conf import settings |
|||
from rest_framework import serializers |
|||
from rest_framework.relations import StringRelatedField |
|||
|
|||
from sapl.base.models import CasaLegislativa |
|||
|
|||
|
|||
class IntRelatedField(StringRelatedField): |
|||
|
|||
def to_representation(self, value): |
|||
return int(value) |
|||
|
|||
|
|||
class ChoiceSerializer(serializers.Serializer): |
|||
value = serializers.SerializerMethodField() |
|||
text = serializers.SerializerMethodField() |
|||
|
|||
def get_text(self, obj): |
|||
return obj[1] |
|||
|
|||
def get_value(self, obj): |
|||
return obj[0] |
|||
|
|||
|
|||
class ModelChoiceSerializer(ChoiceSerializer): |
|||
|
|||
def get_text(self, obj): |
|||
return str(obj) |
|||
|
|||
def get_value(self, obj): |
|||
return obj.id |
|||
|
|||
|
|||
class ModelChoiceObjectRelatedField(serializers.RelatedField): |
|||
|
|||
def to_representation(self, value): |
|||
return ModelChoiceSerializer(value).data |
|||
|
|||
|
|||
class CasaLegislativaSerializer(serializers.ModelSerializer): |
|||
version = serializers.SerializerMethodField() |
|||
|
|||
def get_version(self, obj): |
|||
return settings.SAPL_VERSION |
|||
|
|||
class Meta: |
|||
model = CasaLegislativa |
|||
fields = '__all__' |
@ -1,65 +0,0 @@ |
|||
from django.db.models.fields.files import FileField |
|||
from django.template.defaultfilters import capfirst |
|||
import django_filters |
|||
from django_filters.filters import CharFilter, NumberFilter |
|||
from django_filters.rest_framework.filterset import FilterSet |
|||
from django_filters.utils import resolve_field |
|||
from sapl.sessao.models import SessaoPlenaria |
|||
|
|||
|
|||
class SaplFilterSetMixin(FilterSet): |
|||
|
|||
o = CharFilter(method='filter_o') |
|||
|
|||
class Meta: |
|||
fields = '__all__' |
|||
filter_overrides = { |
|||
FileField: { |
|||
'filter_class': django_filters.CharFilter, |
|||
'extra': lambda f: { |
|||
'lookup_expr': 'exact', |
|||
}, |
|||
}, |
|||
} |
|||
|
|||
def filter_o(self, queryset, name, value): |
|||
try: |
|||
return queryset.order_by( |
|||
*map(str.strip, value.split(','))) |
|||
except: |
|||
return queryset |
|||
|
|||
@classmethod |
|||
def filter_for_field(cls, f, name, lookup_expr='exact'): |
|||
# Redefine método estático para ignorar filtro para |
|||
# fields que não possuam lookup_expr informado |
|||
f, lookup_type = resolve_field(f, lookup_expr) |
|||
|
|||
default = { |
|||
'field_name': name, |
|||
'label': capfirst(f.verbose_name), |
|||
'lookup_expr': lookup_expr |
|||
} |
|||
|
|||
filter_class, params = cls.filter_for_lookup( |
|||
f, lookup_type) |
|||
default.update(params) |
|||
if filter_class is not None: |
|||
return filter_class(**default) |
|||
return None |
|||
|
|||
|
|||
class SessaoPlenariaFilterSet(SaplFilterSetMixin): |
|||
year = NumberFilter(method='filter_year') |
|||
month = NumberFilter(method='filter_month') |
|||
|
|||
class Meta(SaplFilterSetMixin.Meta): |
|||
model = SessaoPlenaria |
|||
|
|||
def filter_year(self, queryset, name, value): |
|||
qs = queryset.filter(data_inicio__year=value) |
|||
return qs |
|||
|
|||
def filter_month(self, queryset, name, value): |
|||
qs = queryset.filter(data_inicio__month=value) |
|||
return qs |
@ -0,0 +1,413 @@ |
|||
import logging |
|||
|
|||
from django.contrib.contenttypes.models import ContentType |
|||
from django.core.exceptions import ObjectDoesNotExist |
|||
from django.db.models import Q |
|||
from django.utils.decorators import classonlymethod |
|||
from django.utils.translation import ugettext_lazy as _ |
|||
from rest_framework.decorators import action |
|||
from rest_framework.response import Response |
|||
|
|||
from sapl.api.core import customize, SaplApiViewSetConstrutor, \ |
|||
wrapper_queryset_response_for_drf_action, \ |
|||
BusinessRulesNotImplementedMixin |
|||
from sapl.api.core.serializers import ChoiceSerializer |
|||
from sapl.api.permissions import SaplModelPermissions |
|||
from sapl.api.serializers import ParlamentarSerializerVerbose, \ |
|||
ParlamentarSerializerPublic |
|||
from sapl.base.models import Autor, AppConfig, DOC_ADM_OSTENSIVO |
|||
from sapl.materia.models import Proposicao, TipoMateriaLegislativa, \ |
|||
MateriaLegislativa, Tramitacao |
|||
from sapl.norma.models import NormaJuridica |
|||
from sapl.parlamentares.models import Mandato, Legislatura |
|||
from sapl.parlamentares.models import Parlamentar |
|||
from sapl.protocoloadm.models import DocumentoAdministrativo, \ |
|||
DocumentoAcessorioAdministrativo, TramitacaoAdministrativo, Anexado |
|||
from sapl.sessao.models import SessaoPlenaria, ExpedienteSessao |
|||
from sapl.utils import models_with_gr_for_model, choice_anos_com_sessaoplenaria |
|||
|
|||
SaplApiViewSetConstrutor = SaplApiViewSetConstrutor.build_class() |
|||
|
|||
|
|||
@customize(Autor) |
|||
class _AutorViewSet: |
|||
# Customização para AutorViewSet com implementação de actions específicas |
|||
""" |
|||
Nesta customização do que foi criado em |
|||
SaplApiViewSetConstrutor além do ofertado por |
|||
rest_framework.viewsets.ModelViewSet, dentre outras customizações |
|||
possíveis, foi adicionado as rotas referentes aos relacionamentos genéricos |
|||
|
|||
* padrão de ModelViewSet |
|||
/api/base/autor/ POST - create |
|||
/api/base/autor/ GET - list |
|||
/api/base/autor/{pk}/ GET - detail |
|||
/api/base/autor/{pk}/ PUT - update |
|||
/api/base/autor/{pk}/ PATCH - partial_update |
|||
/api/base/autor/{pk}/ DELETE - destroy |
|||
|
|||
* rotas desta classe local criadas pelo método build: |
|||
/api/base/autor/parlamentar |
|||
devolve apenas autores que são parlamentares |
|||
/api/base/autor/comissao |
|||
devolve apenas autores que são comissões |
|||
/api/base/autor/bloco |
|||
devolve apenas autores que são blocos parlamentares |
|||
/api/base/autor/bancada |
|||
devolve apenas autores que são bancadas parlamentares |
|||
/api/base/autor/frente |
|||
devolve apenas autores que são Frene parlamentares |
|||
/api/base/autor/orgao |
|||
devolve apenas autores que são Órgãos |
|||
""" |
|||
|
|||
def list_for_content_type(self, content_type): |
|||
qs = self.get_queryset() |
|||
qs = qs.filter(content_type=content_type) |
|||
|
|||
page = self.paginate_queryset(qs) |
|||
if page is not None: |
|||
serializer = self.serializer_class(page, many=True) |
|||
return self.get_paginated_response(serializer.data) |
|||
|
|||
serializer = self.get_serializer(page, many=True) |
|||
return Response(serializer.data) |
|||
|
|||
@classonlymethod |
|||
def build(cls): |
|||
|
|||
models_with_gr_for_autor = models_with_gr_for_model(Autor) |
|||
|
|||
for _model in models_with_gr_for_autor: |
|||
|
|||
@action(detail=False, name=_model._meta.model_name) |
|||
def actionclass(self, request, *args, **kwargs): |
|||
model = getattr(self, self.action)._AutorViewSet__model |
|||
|
|||
content_type = ContentType.objects.get_for_model(model) |
|||
return self.list_for_content_type(content_type) |
|||
|
|||
func = actionclass |
|||
func.mapping['get'] = func.kwargs['name'] |
|||
func.url_name = func.kwargs['name'] |
|||
func.url_path = func.kwargs['name'] |
|||
func.__name__ = func.kwargs['name'] |
|||
func.__model = _model |
|||
|
|||
setattr(cls, _model._meta.model_name, func) |
|||
return cls |
|||
|
|||
|
|||
@customize(Parlamentar) |
|||
class _ParlamentarViewSet: |
|||
|
|||
class ParlamentarPermission(SaplModelPermissions): |
|||
|
|||
def has_permission(self, request, view): |
|||
if request.method == 'GET': |
|||
return True |
|||
else: |
|||
perm = super().has_permission(request, view) |
|||
return perm |
|||
|
|||
permission_classes = (ParlamentarPermission,) |
|||
|
|||
def get_serializer(self, *args, **kwargs): |
|||
if not self.request.user.has_perm('parlamentares.add_parlamentar'): |
|||
self.serializer_class = ParlamentarSerializerPublic |
|||
return super().get_serializer(*args, **kwargs) |
|||
|
|||
@action(detail=True) |
|||
def proposicoes(self, request, *args, **kwargs): |
|||
""" |
|||
Lista de proposições públicas de parlamentar específico |
|||
|
|||
:param int id: - Identificador do parlamentar que se quer recuperar as proposições |
|||
:return: uma lista de proposições |
|||
""" |
|||
# /api/parlamentares/parlamentar/{id}/proposicoes/ |
|||
# recupera proposições enviadas e incorporadas do parlamentar |
|||
# deve coincidir com |
|||
# /parlamentar/{pk}/proposicao |
|||
|
|||
return self.get_proposicoes(**kwargs) |
|||
|
|||
@wrapper_queryset_response_for_drf_action(model=Proposicao) |
|||
def get_proposicoes(self, **kwargs): |
|||
|
|||
return self.get_queryset().filter( |
|||
data_envio__isnull=False, |
|||
data_recebimento__isnull=False, |
|||
cancelado=False, |
|||
autor__object_id=kwargs['pk'], |
|||
autor__content_type=ContentType.objects.get_for_model(Parlamentar) |
|||
) |
|||
|
|||
@action(detail=False, methods=['GET']) |
|||
def search_parlamentares(self, request, *args, **kwargs): |
|||
nome = request.query_params.get('nome_parlamentar', '') |
|||
parlamentares = Parlamentar.objects.filter( |
|||
nome_parlamentar__icontains=nome) |
|||
serializer_class = ParlamentarSerializerVerbose( |
|||
parlamentares, many=True, context={'request': request}) |
|||
return Response(serializer_class.data) |
|||
|
|||
|
|||
@customize(Legislatura) |
|||
class _LegislaturaViewSet: |
|||
|
|||
@action(detail=True) |
|||
def parlamentares(self, request, *args, **kwargs): |
|||
|
|||
def get_serializer_context(): |
|||
return { |
|||
'request': self.request, 'legislatura': kwargs['pk'] |
|||
} |
|||
|
|||
def get_serializer_class(): |
|||
return ParlamentarSerializerVerbose |
|||
|
|||
self.get_serializer_context = get_serializer_context |
|||
self.get_serializer_class = get_serializer_class |
|||
|
|||
return self.get_parlamentares() |
|||
|
|||
@wrapper_queryset_response_for_drf_action(model=Parlamentar) |
|||
def get_parlamentares(self): |
|||
|
|||
try: |
|||
legislatura = Legislatura.objects.get(pk=self.kwargs['pk']) |
|||
except ObjectDoesNotExist: |
|||
return Response("") |
|||
|
|||
filter_params = { |
|||
'legislatura': legislatura, |
|||
'data_inicio_mandato__gte': legislatura.data_inicio, |
|||
'data_fim_mandato__lte': legislatura.data_fim, |
|||
} |
|||
|
|||
mandatos = Mandato.objects.filter( |
|||
**filter_params).order_by('-data_inicio_mandato') |
|||
|
|||
parlamentares = self.get_queryset().filter( |
|||
mandato__in=mandatos).distinct() |
|||
|
|||
return parlamentares |
|||
|
|||
|
|||
@customize(Proposicao) |
|||
class _ProposicaoViewSet: |
|||
""" |
|||
list: |
|||
Retorna lista de Proposições |
|||
|
|||
* Permissões: |
|||
|
|||
* Usuário Dono: |
|||
* Pode listar todas suas Proposições |
|||
|
|||
* Usuário Conectado ou Anônimo: |
|||
* Pode listar todas as Proposições incorporadas |
|||
|
|||
retrieve: |
|||
Retorna uma proposição passada pelo 'id' |
|||
|
|||
* Permissões: |
|||
|
|||
* Usuário Dono: |
|||
* Pode recuperar qualquer de suas Proposições |
|||
|
|||
* Usuário Conectado ou Anônimo: |
|||
* Pode recuperar qualquer das proposições incorporadas |
|||
|
|||
""" |
|||
|
|||
class ProposicaoPermission(SaplModelPermissions): |
|||
|
|||
def has_permission(self, request, view): |
|||
if request.method == 'GET': |
|||
return True |
|||
# se a solicitação é list ou detail, libera o teste de permissão |
|||
# e deixa o get_queryset filtrar de acordo com a regra de |
|||
# visibilidade das proposições, ou seja: |
|||
# 1. proposição incorporada é proposição pública |
|||
# 2. não incorporada só o autor pode ver |
|||
else: |
|||
perm = super().has_permission(request, view) |
|||
return perm |
|||
# não é list ou detail, então passa pelas regras de permissão e, |
|||
# depois disso ainda passa pelo filtro de get_queryset |
|||
|
|||
permission_classes = (ProposicaoPermission,) |
|||
|
|||
def get_queryset(self): |
|||
qs = super().get_queryset() |
|||
|
|||
q = Q(data_recebimento__isnull=False, object_id__isnull=False) |
|||
if not self.request.user.is_anonymous: |
|||
|
|||
autor_do_usuario_logado = self.request.user.autor_set.first() |
|||
|
|||
# se usuário logado é operador de algum autor |
|||
if autor_do_usuario_logado: |
|||
q = Q(autor=autor_do_usuario_logado) |
|||
|
|||
# se é operador de protocolo, ve qualquer coisa enviada |
|||
if self.request.user.has_perm('protocoloadm.list_protocolo'): |
|||
q = Q(data_envio__isnull=False) | Q( |
|||
data_devolucao__isnull=False) |
|||
|
|||
qs = qs.filter(q) |
|||
return qs |
|||
|
|||
|
|||
@customize(MateriaLegislativa) |
|||
class _MateriaLegislativaViewSet: |
|||
|
|||
class Meta: |
|||
ordering = ['-ano', 'tipo', 'numero'] |
|||
|
|||
@action(detail=True, methods=['GET']) |
|||
def ultima_tramitacao(self, request, *args, **kwargs): |
|||
|
|||
materia = self.get_object() |
|||
if not materia.tramitacao_set.exists(): |
|||
return Response({}) |
|||
|
|||
ultima_tramitacao = materia.tramitacao_set.order_by( |
|||
'-data_tramitacao', '-id').first() |
|||
|
|||
serializer_class = SaplApiViewSetConstrutor.get_class_for_model( |
|||
Tramitacao).serializer_class(ultima_tramitacao) |
|||
|
|||
return Response(serializer_class.data) |
|||
|
|||
@action(detail=True, methods=['GET']) |
|||
def anexadas(self, request, *args, **kwargs): |
|||
self.queryset = self.get_object().anexadas.all() |
|||
return self.list(request, *args, **kwargs) |
|||
|
|||
|
|||
@customize(TipoMateriaLegislativa) |
|||
class _TipoMateriaLegislativaViewSet: |
|||
|
|||
@action(detail=True, methods=['POST']) |
|||
def change_position(self, request, *args, **kwargs): |
|||
result = { |
|||
'status': 200, |
|||
'message': 'OK' |
|||
} |
|||
d = request.data |
|||
if 'pos_ini' in d and 'pos_fim' in d: |
|||
if d['pos_ini'] != d['pos_fim']: |
|||
pk = kwargs['pk'] |
|||
TipoMateriaLegislativa.objects.reposicione(pk, d['pos_fim']) |
|||
|
|||
return Response(result) |
|||
|
|||
|
|||
@customize(DocumentoAdministrativo) |
|||
class _DocumentoAdministrativoViewSet: |
|||
|
|||
class DocumentoAdministrativoPermission(SaplModelPermissions): |
|||
|
|||
def has_permission(self, request, view): |
|||
if request.method == 'GET': |
|||
comportamento = AppConfig.attr('documentos_administrativos') |
|||
if comportamento == DOC_ADM_OSTENSIVO: |
|||
return True |
|||
""" |
|||
Diante da lógica implementada na manutenção de documentos |
|||
administrativos: |
|||
- Se o comportamento é doc adm ostensivo, deve passar pelo |
|||
teste de permissões sem avaliá-las |
|||
- se o comportamento é doc adm restritivo, deve passar pelo |
|||
teste de permissões avaliando-as |
|||
""" |
|||
return super().has_permission(request, view) |
|||
|
|||
permission_classes = (DocumentoAdministrativoPermission,) |
|||
|
|||
def get_queryset(self): |
|||
""" |
|||
mesmo tendo passado pelo teste de permissões, deve ser filtrado, |
|||
pelo campo restrito. Sendo este igual a True, disponibilizar apenas |
|||
a um usuário conectado. Apenas isso, sem critérios outros de permissão, |
|||
conforme implementado em DocumentoAdministrativoCrud |
|||
""" |
|||
qs = super().get_queryset() |
|||
|
|||
if self.request.user.is_anonymous: |
|||
qs = qs.exclude(restrito=True) |
|||
return qs |
|||
|
|||
|
|||
@customize(DocumentoAcessorioAdministrativo) |
|||
class _DocumentoAcessorioAdministrativoViewSet: |
|||
|
|||
permission_classes = ( |
|||
_DocumentoAdministrativoViewSet.DocumentoAdministrativoPermission,) |
|||
|
|||
def get_queryset(self): |
|||
qs = super().get_queryset() |
|||
|
|||
if self.request.user.is_anonymous: |
|||
qs = qs.exclude(documento__restrito=True) |
|||
return qs |
|||
|
|||
|
|||
@customize(TramitacaoAdministrativo) |
|||
class _TramitacaoAdministrativoViewSet(BusinessRulesNotImplementedMixin): |
|||
# TODO: Implementar regras de manutenção das tramitações de docs adms |
|||
|
|||
permission_classes = ( |
|||
_DocumentoAdministrativoViewSet.DocumentoAdministrativoPermission,) |
|||
|
|||
def get_queryset(self): |
|||
qs = super().get_queryset() |
|||
|
|||
if self.request.user.is_anonymous: |
|||
qs = qs.exclude(documento__restrito=True) |
|||
return qs |
|||
|
|||
|
|||
@customize(Anexado) |
|||
class _AnexadoViewSet(BusinessRulesNotImplementedMixin): |
|||
|
|||
permission_classes = ( |
|||
_DocumentoAdministrativoViewSet.DocumentoAdministrativoPermission,) |
|||
|
|||
def get_queryset(self): |
|||
qs = super().get_queryset() |
|||
|
|||
if self.request.user.is_anonymous: |
|||
qs = qs.exclude(documento__restrito=True) |
|||
return qs |
|||
|
|||
|
|||
@customize(SessaoPlenaria) |
|||
class _SessaoPlenariaViewSet: |
|||
|
|||
@action(detail=False) |
|||
def years(self, request, *args, **kwargs): |
|||
years = choice_anos_com_sessaoplenaria() |
|||
|
|||
serializer = ChoiceSerializer(years, many=True) |
|||
return Response(serializer.data) |
|||
|
|||
@action(detail=True) |
|||
def expedientes(self, request, *args, **kwargs): |
|||
return self.get_expedientes() |
|||
|
|||
@wrapper_queryset_response_for_drf_action(model=ExpedienteSessao) |
|||
def get_expedientes(self): |
|||
return self.get_queryset().filter(sessao_plenaria_id=self.kwargs['pk']) |
|||
|
|||
|
|||
@customize(NormaJuridica) |
|||
class _NormaJuridicaViewset: |
|||
|
|||
@action(detail=False, methods=['GET']) |
|||
def destaques(self, request, *args, **kwargs): |
|||
self.queryset = self.get_queryset().filter(norma_de_destaque=True) |
|||
return self.list(request, *args, **kwargs) |
@ -0,0 +1,19 @@ |
|||
# Generated by Django 2.2.28 on 2022-06-27 11:56 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('base', '0047_auto_20210315_1522'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='appconfig', |
|||
name='tramitacao_origem_fixa', |
|||
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, |
|||
verbose_name='Fixar Origem das tramitações como sendo a tramitação de destino da última tramitação?'), |
|||
), |
|||
] |
@ -0,0 +1,18 @@ |
|||
# Generated by Django 2.2.20 on 2022-07-28 23:29 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('base', '0048_appconfig_tramitacao_origem_fixa'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='appconfig', |
|||
name='tramitacao_origem_fixa', |
|||
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, help_text='Ao utilizar a opção NÂO, você compreende que os controles de origem e destino das tramitações são anulados, podendo seu operador registrar quaisquer origem e destino para as tramitações. Se você colocar Não, fizer tramitações aleatórias e voltar para SIM, o destino da tramitação mais recente será utilizado para a origem de uma nova inserção!', verbose_name='Fixar origem de novas tramitações como sendo a tramitação de destino da última tramitação?'), |
|||
), |
|||
] |
@ -0,0 +1,31 @@ |
|||
# Generated by Django 2.2.20 on 2022-07-29 01:02 |
|||
|
|||
import django.contrib.postgres.fields.jsonb |
|||
import django.core.serializers.json |
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('contenttypes', '0002_remove_content_type_name'), |
|||
('base', '0049_auto_20220728_2029'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.CreateModel( |
|||
name='Metadata', |
|||
fields=[ |
|||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|||
('object_id', models.PositiveIntegerField(blank=True, default=None, null=True)), |
|||
('metadata', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=None, encoder=django.core.serializers.json.DjangoJSONEncoder, null=True, verbose_name='Metadados')), |
|||
('content_type', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='contenttypes.ContentType')), |
|||
], |
|||
options={ |
|||
'verbose_name': 'Metadado', |
|||
'verbose_name_plural': 'Metadados', |
|||
'unique_together': {('content_type', 'object_id')}, |
|||
}, |
|||
), |
|||
] |
@ -0,0 +1,23 @@ |
|||
# Generated by Django 2.2.28 on 2022-08-15 00:38 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('base', '0050_metadata'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='appconfig', |
|||
name='identificacao_de_documentos', |
|||
field=models.CharField(default='{sigla} Nº {numero}/{ano}{-}{complemento} - {nome}', help_text='\n Como mostrar a identificação dos documentos administrativos?\n Você pode usar um conjunto de combinações que pretender.\n Ao fazer sua edição, será mostrado logo abaixo o último documento cadastrado, como exemplo de resultado de sua edição.\n Em caso de erro, nenhum documento será mostrado e aparecerá apenas o formato padrão mínimo, que é este: "{sigla} Nº {numero}/{ano}{-}{complemento} - {nome}".\n Muito importante, use as chaves "{}", sem elas, você estará inserindo um texto qualquer e não o valor de um campo.\n Você pode combinar as seguintes campos: {sigla} {nome} {numero} {ano} {complemento} {assunto}\n Ainda pode ser usado {/}, {-}, {.} se você quiser que uma barra, traço, ou ponto\n seja adicionado apenas se o próximo campo que será usado tenha algum conteúdo\n (não use dois destes destes condicionais em sequência, somente o último será considerado).\n ', max_length=254, verbose_name='Formato da identificação dos documentos'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='appconfig', |
|||
name='protocolo_manual', |
|||
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Permitir informe manual de data e hora de protocolo?'), |
|||
), |
|||
] |
@ -0,0 +1,23 @@ |
|||
# Generated by Django 2.2.28 on 2022-08-08 01:57 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('comissoes', '0027_auto_20210209_1047'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='participacao', |
|||
name='motivo_desligamento', |
|||
field=models.TextField(blank=True, verbose_name='Motivo Desligamento'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='participacao', |
|||
name='observacao', |
|||
field=models.TextField(blank=True, verbose_name='Observação'), |
|||
), |
|||
] |
@ -0,0 +1,44 @@ |
|||
# Generated by Django 2.2.24 on 2022-06-30 17:20 |
|||
|
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('compilacao', '0018_auto_20210227_2152'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='dispositivo', |
|||
name='dispositivo_atualizador', |
|||
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dispositivos_alterados_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Atualizador'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='dispositivo', |
|||
name='dispositivo_pai', |
|||
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dispositivos_filhos_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Pai'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='dispositivo', |
|||
name='dispositivo_raiz', |
|||
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='nodes', to='compilacao.Dispositivo', verbose_name='Dispositivo Raiz'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='dispositivo', |
|||
name='publicacao', |
|||
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='compilacao.Publicacao', verbose_name='Publicação'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='dispositivo', |
|||
name='ta_publicado', |
|||
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dispositivos_alterados_pelo_ta_set', to='compilacao.TextoArticulado', verbose_name='Texto Articulado Publicado'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='publicacao', |
|||
name='ta', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='compilacao.TextoArticulado', verbose_name='Texto Articulado'), |
|||
), |
|||
] |
@ -0,0 +1,18 @@ |
|||
# Generated by Django 2.2.24 on 2021-11-12 14:06 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('materia', '0079_auto_20210311_1711'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='documentoacessorio', |
|||
name='indexacao', |
|||
field=models.TextField(blank=True, verbose_name='Indexação'), |
|||
), |
|||
] |
@ -0,0 +1,33 @@ |
|||
# Generated by Django 2.2.24 on 2022-03-21 12:34 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('materia', '0080_auto_20211112_1106'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='materialegislativa', |
|||
name='ano', |
|||
field=models.PositiveSmallIntegerField(choices=[(2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='materialegislativa', |
|||
name='ano_origem_externa', |
|||
field=models.PositiveSmallIntegerField(blank=True, choices=[(2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], null=True, verbose_name='Ano'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='numeracao', |
|||
name='ano_materia', |
|||
field=models.PositiveSmallIntegerField(choices=[(2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='proposicao', |
|||
name='ano', |
|||
field=models.PositiveSmallIntegerField(blank=True, choices=[(2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], default=None, null=True, verbose_name='Ano'), |
|||
), |
|||
] |