Browse Source

Merge branch '3.1.x' into tipo_votacao_multiplas_materias

pull/3781/head
cristian-longhi 1 month ago
committed by GitHub
parent
commit
9dcb30c891
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 7
      .dockerignore
  2. 10
      docker/docker-compose.yaml
  3. 5
      docker/startup_scripts/start.sh
  4. 3
      sapl/materia/views.py
  5. 2
      sapl/norma/views.py
  6. 5
      sapl/sessao/views.py
  7. 4
      scripts/gunicorn_start.sh

7
.dockerignore

@ -12,3 +12,10 @@ bower
.travis.yml .travis.yml
.env .env
.idea .idea
.DS_Store
.coveragerc
*.swp
.coveragerc
.drone.yml
.github
release.sh

10
docker/docker-compose.yaml

@ -33,11 +33,11 @@ services:
networks: networks:
- sapl-net - sapl-net
sapl: sapl:
image: interlegis/sapl:3.1.164-RC3 # image: interlegis/sapl:3.1.164-RC3
# build: build:
# context: ../ context: ../
# dockerfile: ./docker/Dockerfile dockerfile: ./docker/Dockerfile
# container_name: sapl container_name: sapl
labels: labels:
NAME: "sapl" NAME: "sapl"
restart: always restart: always

5
docker/startup_scripts/start.sh

@ -4,19 +4,16 @@ IFS=$'\n\t'
APP_DIR="/var/interlegis/sapl" APP_DIR="/var/interlegis/sapl"
DATA_DIR="/var/interlegis/sapl/data" DATA_DIR="/var/interlegis/sapl/data"
MEDIA_DIR="/var/interlegis/sapl/media"
RUN_DIR="/var/interlegis/sapl/run" RUN_DIR="/var/interlegis/sapl/run"
ENV_FILE="$APP_DIR/.env" ENV_FILE="$APP_DIR/.env"
SECRET_FILE="$DATA_DIR/secret.key" SECRET_FILE="$DATA_DIR/secret.key"
chown -R root:nginx "$RUN_DIR" || true chown -R root:nginx "$RUN_DIR" || true
chown -R root:nginx "$MEDIA_DIR" || true
chmod -R g+rwX "$RUN_DIR" || true chmod -R g+rwX "$RUN_DIR" || true
chmod -R g+rwX "$MEDIA_DIR" || true
# setgid bit on our writable trees (not data/) # setgid bit on our writable trees (not data/)
find "$RUN_DIR" "$MEDIA_DIR" -type d -exec chmod g+s {} + 2>/dev/null || true find "$RUN_DIR" -type d -exec chmod g+s {} + 2>/dev/null || true
log() { printf '[%s] %s\n' "$(date -Is)" "$*"; } log() { printf '[%s] %s\n' "$(date -Is)" "$*"; }
err() { printf '[%s] ERROR: %s\n' "$(date -Is)" "$*" >&2; } err() { printf '[%s] ERROR: %s\n' "$(date -Is)" "$*" >&2; }

3
sapl/materia/views.py

@ -1461,6 +1461,7 @@ class TramitacaoCrud(MasterDetailCrud):
return initial return initial
@method_decorator(ratelimit(key='ip', rate='10/m', block=True), name='dispatch')
class ListView(MasterDetailCrud.ListView): class ListView(MasterDetailCrud.ListView):
def get_queryset(self): def get_queryset(self):
@ -1533,6 +1534,7 @@ class TramitacaoCrud(MasterDetailCrud):
return HttpResponseRedirect(url) return HttpResponseRedirect(url)
@method_decorator(ratelimit(key='ip', rate='10/m', block=True), name='dispatch')
class DetailView(MasterDetailCrud.DetailView): class DetailView(MasterDetailCrud.DetailView):
template_name = "materia/tramitacao_detail.html" template_name = "materia/tramitacao_detail.html"
@ -2044,6 +2046,7 @@ class AcompanhamentoExcluirView(TemplateView):
return HttpResponseRedirect(self.get_success_url()) return HttpResponseRedirect(self.get_success_url())
@method_decorator(ratelimit(key='ip', rate='10/m', block=True), name='dispatch')
class MateriaLegislativaPesquisaView(MultiFormatOutputMixin, FilterView): class MateriaLegislativaPesquisaView(MultiFormatOutputMixin, FilterView):
model = MateriaLegislativa model = MateriaLegislativa
filterset_class = MateriaLegislativaFilterSet filterset_class = MateriaLegislativaFilterSet

2
sapl/norma/views.py

@ -150,6 +150,7 @@ class NormaRelacionadaCrud(MasterDetailCrud):
layout_key = 'NormaRelacionadaDetail' layout_key = 'NormaRelacionadaDetail'
@method_decorator(ratelimit(key='ip', rate='10/m', block=True), name='dispatch')
class NormaPesquisaView(MultiFormatOutputMixin, FilterView): class NormaPesquisaView(MultiFormatOutputMixin, FilterView):
model = NormaJuridica model = NormaJuridica
filterset_class = NormaFilterSet filterset_class = NormaFilterSet
@ -235,6 +236,7 @@ class AnexoNormaJuridicaCrud(MasterDetailCrud):
initial['ano'] = self.object.ano initial['ano'] = self.object.ano
return initial return initial
@method_decorator(ratelimit(key='ip', rate='10/m', block=True), name='dispatch')
class DetailView(MasterDetailCrud.DetailView): class DetailView(MasterDetailCrud.DetailView):
form_class = AnexoNormaJuridicaForm form_class = AnexoNormaJuridicaForm
layout_key = 'AnexoNormaJuridica' layout_key = 'AnexoNormaJuridica'

5
sapl/sessao/views.py

@ -28,6 +28,9 @@ from django.views.generic.edit import FormMixin
from django_filters.views import FilterView from django_filters.views import FilterView
import pytz import pytz
from ratelimit.decorators import ratelimit
from django.utils.decorators import method_decorator
from sapl.base.models import AppConfig as AppsAppConfig from sapl.base.models import AppConfig as AppsAppConfig
from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux, from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux,
MasterDetailCrud, MasterDetailCrud,
@ -3794,6 +3797,7 @@ class SessaoListView(ListView):
return context return context
@method_decorator(ratelimit(key='ip', rate='10/m', block=True), name='dispatch')
class PautaSessaoView(TemplateView): class PautaSessaoView(TemplateView):
model = SessaoPlenaria model = SessaoPlenaria
template_name = "sessao/pauta_inexistente.html" template_name = "sessao/pauta_inexistente.html"
@ -3809,6 +3813,7 @@ class PautaSessaoView(TemplateView):
reverse('sapl.sessao:pauta_sessao_detail', kwargs={'pk': sessao.pk})) reverse('sapl.sessao:pauta_sessao_detail', kwargs={'pk': sessao.pk}))
@method_decorator(ratelimit(key='ip', rate='10/m', block=True), name='dispatch')
class PautaSessaoDetailView(PautaMultiFormatOutputMixin, DetailView): class PautaSessaoDetailView(PautaMultiFormatOutputMixin, DetailView):
template_name = "sessao/pauta_sessao_detail.html" template_name = "sessao/pauta_sessao_detail.html"
model = SessaoPlenaria model = SessaoPlenaria

4
scripts/gunicorn_start.sh

@ -15,8 +15,8 @@ then
fi fi
NAME="SAPL" # Name of the application (*) NAME="SAPL" # Name of the application (*)
DJANGODIR=$SAPL_DIR/ # Django project directory (*) DJANGODIR="$SAPL_DIR/" # Django project directory (*)
SOCKFILE=$SAPL_DIR/run/gunicorn.sock # we will communicate using this unix socket (*) SOCKFILE="$SAPL_DIR/run/gunicorn.sock" # we will communicate using this unix socket (*)
USER=`whoami` # the user to run as (*) USER=`whoami` # the user to run as (*)
GROUP=`whoami` # the group to run as (*) GROUP=`whoami` # the group to run as (*)
NUM_WORKERS=3 # how many worker processes should Gunicorn spawn (*) NUM_WORKERS=3 # how many worker processes should Gunicorn spawn (*)

Loading…
Cancel
Save