From 93bd167c0f6164572228275837f5229f40da3f09 Mon Sep 17 00:00:00 2001 From: Edward Oliveira Date: Tue, 26 Aug 2025 21:26:50 -0300 Subject: [PATCH] Bump to 3.2 --- drfautoapi/drfautoapi.py | 4 +- requirements/requirements.txt | 65 +++++---- sapl/api/__init__.py | 1 - sapl/api/apps.py | 2 +- sapl/api/forms.py | 2 +- sapl/api/urls.py | 18 +-- sapl/audiencia/__init__.py | 1 - sapl/audiencia/apps.py | 2 +- sapl/audiencia/forms.py | 2 +- sapl/audiencia/models.py | 2 +- sapl/audiencia/tests/test_audiencia.py | 2 +- sapl/audiencia/urls.py | 4 +- sapl/base/__init__.py | 1 - sapl/base/admin.py | 2 +- sapl/base/apps.py | 2 +- sapl/base/email_utils.py | 2 +- sapl/base/forms.py | 2 +- sapl/base/models.py | 4 +- sapl/base/receivers.py | 2 +- sapl/base/templatetags/menus.py | 2 +- sapl/base/tests/test_form.py | 2 +- sapl/base/tests/test_view_base.py | 2 +- sapl/base/tests/teststub_urls.py | 4 +- sapl/base/urls.py | 76 +++++----- sapl/base/views.py | 6 +- sapl/comissoes/__init__.py | 1 - sapl/comissoes/apps.py | 2 +- sapl/comissoes/forms.py | 2 +- sapl/comissoes/models.py | 2 +- sapl/comissoes/tests/test_comissoes.py | 2 +- sapl/comissoes/urls.py | 18 +-- sapl/comissoes/views.py | 2 +- sapl/compilacao/__init__.py | 1 - sapl/compilacao/apps.py | 2 +- sapl/compilacao/forms.py | 2 +- sapl/compilacao/models.py | 6 +- .../templatetags/compilacao_filters.py | 2 +- .../tests/test_tipo_texto_articulado_form.py | 2 +- sapl/compilacao/urls.py | 78 +++++----- sapl/compilacao/views.py | 10 +- sapl/context_processors.py | 2 +- sapl/crispy_layout_mixin.py | 6 +- sapl/crud/base.py | 12 +- sapl/crud/tests/stub_app/models.py | 4 +- sapl/crud/tests/stub_app/urls.py | 4 +- sapl/crud/urls.py | 4 +- sapl/decorators.py | 2 +- sapl/lexml/__init__.py | 1 - sapl/lexml/apps.py | 2 +- sapl/lexml/forms.py | 2 +- sapl/lexml/models.py | 2 +- sapl/lexml/urls.py | 10 +- sapl/materia/__init__.py | 1 - sapl/materia/apps.py | 2 +- sapl/materia/forms.py | 2 +- sapl/materia/models.py | 2 +- sapl/materia/tests/test_materia_form.py | 2 +- sapl/materia/urls.py | 102 ++++++------- sapl/materia/views.py | 8 +- sapl/norma/__init__.py | 1 - sapl/norma/apps.py | 2 +- sapl/norma/forms.py | 2 +- sapl/norma/models.py | 2 +- sapl/norma/tests/test_norma.py | 2 +- sapl/norma/urls.py | 20 +-- sapl/norma/views.py | 6 +- sapl/painel/__init__.py | 1 - sapl/painel/apps.py | 2 +- sapl/painel/models.py | 2 +- sapl/painel/urls.py | 20 +-- sapl/painel/views.py | 2 +- sapl/parlamentares/__init__.py | 1 - sapl/parlamentares/apps.py | 2 +- sapl/parlamentares/forms.py | 2 +- sapl/parlamentares/models.py | 2 +- .../parlamentares/tests/test_parlamentares.py | 2 +- sapl/parlamentares/urls.py | 70 ++++----- sapl/parlamentares/views.py | 2 +- sapl/protocoloadm/__init__.py | 1 - sapl/protocoloadm/apps.py | 2 +- sapl/protocoloadm/forms.py | 2 +- sapl/protocoloadm/models.py | 2 +- sapl/protocoloadm/tests/test_protocoloadm.py | 10 +- sapl/protocoloadm/urls.py | 54 +++---- sapl/protocoloadm/views.py | 6 +- sapl/redireciona_urls/apps.py | 2 +- sapl/redireciona_urls/exceptions.py | 2 +- sapl/redireciona_urls/urls.py | 44 +++--- sapl/relatorios/__init__.py | 1 - sapl/relatorios/apps.py | 2 +- sapl/relatorios/forms.py | 2 +- sapl/relatorios/urls.py | 60 ++++---- sapl/relatorios/views.py | 2 +- sapl/rules/__init__.py | 3 +- sapl/rules/apps.py | 2 +- sapl/rules/tests/test_rules.py | 4 +- sapl/sessao/__init__.py | 1 - sapl/sessao/apps.py | 2 +- sapl/sessao/forms.py | 2 +- sapl/sessao/models.py | 2 +- sapl/sessao/tests/test_sessao.py | 2 +- sapl/sessao/tests/test_sessao_view.py | 2 +- sapl/sessao/urls.py | 134 +++++++++--------- sapl/sessao/views.py | 8 +- sapl/settings.py | 25 +--- sapl/templates/base.html | 2 +- sapl/templates/base/auditlog_filter.html | 2 +- .../materia/statustramitacao_filter.html | 2 +- sapl/templates/norma/assuntonorma_filter.html | 2 +- .../parlamentares/coligacao_filter.html | 2 +- .../parlamentares/parlamentar_filter.html | 2 +- .../parlamentares/partido_filter.html | 2 +- .../relatorios/RelatorioAtas_filter.html | 2 +- .../relatorio_doc_administrativos.html | 2 +- sapl/templates/sessao/painel.html | 2 +- sapl/templates/sessao/pauta_sessao_list.html | 2 +- sapl/templates/widgets/image_thumbnail.html | 2 +- sapl/test_urls.py | 2 +- sapl/urls.py | 42 +++--- sapl/utils.py | 7 +- 120 files changed, 542 insertions(+), 569 deletions(-) diff --git a/drfautoapi/drfautoapi.py b/drfautoapi/drfautoapi.py index e0fd0c348..b146daa83 100644 --- a/drfautoapi/drfautoapi.py +++ b/drfautoapi/drfautoapi.py @@ -7,12 +7,12 @@ import re from django.apps.config import AppConfig from django.apps.registry import apps from django.conf import settings -from django.contrib.postgres.fields.jsonb import JSONField +from django.db.models import JSONField from django.db.models.base import ModelBase from django.db.models.fields import TextField, CharField from django.db.models.fields.files import FileField from django.template.defaultfilters import capfirst -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import django_filters from django_filters.constants import ALL_FIELDS, EMPTY_VALUES from django_filters.filters import CharFilter diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 56c2459b4..3c8492dca 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -1,43 +1,56 @@ -django==2.2.28 -django-haystack==3.1.1 -django-filter==2.4.0 +# Core +Django==3.2.25 +gunicorn==23.0.0 + +# Search / indexing +django-haystack==3.2.1 +pysolr==3.6.0 + +# DRF & filtering djangorestframework==3.12.4 -django-braces==1.14.0 -django-crispy-forms==1.7.2 -django-contrib-postgres==0.0.1 -django-extra-views==0.12.0 -django-model-utils==3.1.2 -django-extensions==2.1.4 -django-image-cropping==1.2 +django-filter==2.4.0 +drf-spectacular==0.18.2 + +# DB & config +dj-database-url==0.5.0 +psycopg2-binary==2.9.9 +python-decouple==3.1 + +# Django utilities +django-crispy-forms==1.14.0 +django-braces==1.15.0 +django-extra-views==0.14.0 +django-model-utils==4.3.1 +django-extensions==3.2.3 django-waffle==3.0.0 django-webpack-loader==1.6.0 -drf-spectacular==0.18.2 django-ratelimit==3.0.1 +whitenoise==5.1.0 +django-prometheus==2.2.0 + +# Images / files / PDFs easy-thumbnails==2.8.5 -python-decouple==3.1 -dj-database-url==0.5.0 -psycopg2-binary==2.9.9 -pyyaml==6.0.1 -pytz==2019.3 -python-magic==0.4.15 -unipath==1.1 +django-image-cropping==1.7 Pillow==10.3.0 rlPyCairo==0.3.0 reportlab==4.2.0 WeasyPrint==66 trml2pdf==0.6 -gunicorn==23.0.0 -more-itertools==8.2.0 -pysolr==3.6.0 PyPDF4==1.27.0 -#pyoai==2.5.1 -git+https://github.com/infrae/pyoai@5ff2f15e869869e70d8139e4c37b7832854d7049 +python-magic==0.4.15 + +# Other libs +pyyaml==6.0.1 +pytz==2024.1 Unidecode==1.1.1 -whitenoise==5.1.0 +unipath==1.1 kazoo==2.8.0 -django-prometheus==2.2.0 - asn1crypto==1.5.1 XlsxWriter==3.2.0 +more-itertools==8.2.0 + +# OAI (fork/commit you already use) +git+https://github.com/infrae/pyoai@5ff2f15e869869e70d8139e4c37b7832854d7049 +# Project-specific forks git+https://github.com/interlegis/django-admin-bootstrapped diff --git a/sapl/api/__init__.py b/sapl/api/__init__.py index 9580155c5..e69de29bb 100644 --- a/sapl/api/__init__.py +++ b/sapl/api/__init__.py @@ -1 +0,0 @@ -default_app_config = 'sapl.api.apps.AppConfig' diff --git a/sapl/api/apps.py b/sapl/api/apps.py index f8adf670b..eb66f400b 100644 --- a/sapl/api/apps.py +++ b/sapl/api/apps.py @@ -1,5 +1,5 @@ from django import apps -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/api/forms.py b/sapl/api/forms.py index 79238f873..995d9d962 100644 --- a/sapl/api/forms.py +++ b/sapl/api/forms.py @@ -2,7 +2,7 @@ import logging from django.db.models import Q from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django_filters.filters import CharFilter, DateFilter, ModelChoiceFilter from django_filters.filterset import FilterSet from rest_framework import serializers diff --git a/sapl/api/urls.py b/sapl/api/urls.py index a51ea2a80..5c84121e3 100644 --- a/sapl/api/urls.py +++ b/sapl/api/urls.py @@ -1,5 +1,5 @@ -from django.conf.urls import include, url +from django.urls import include, path, re_path from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView, \ SpectacularRedocView from rest_framework.authtoken.views import obtain_auth_token @@ -25,20 +25,20 @@ router.register(r'sessao-plenaria', SessaoPlenariaViewSet, urlpatterns_router = router.urls urlpatterns_api_doc = [ - url('^schema/swagger-ui/', + re_path('^schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='sapl.api:schema_api'), name='swagger_ui_schema_api'), - url('^schema/redoc/', + re_path('^schema/redoc/', SpectacularRedocView.as_view(url_name='sapl.api:schema_api'), name='redoc_schema_api'), - url('^schema/', SpectacularAPIView.as_view(), name='schema_api'), + re_path('^schema/', SpectacularAPIView.as_view(), name='schema_api'), ] urlpatterns = [ - url(r'^api/', include(urlpatterns_api_doc)), - url(r'^api/', include(urlpatterns_router)), + path('api/', include(urlpatterns_api_doc)), + path('api/', include(urlpatterns_router)), - url(r'^api/version', AppVersionView.as_view()), - url(r'^api/auth/token$', obtain_auth_token), - url(r'^api/recriar-token/(?P\d*)$', recria_token, name="recria_token"), + re_path(r'^api/version', AppVersionView.as_view()), + path('api/auth/token', obtain_auth_token), + re_path(r'^api/recriar-token/(?P\d*)$', recria_token, name="recria_token"), ] diff --git a/sapl/audiencia/__init__.py b/sapl/audiencia/__init__.py index e70131873..e69de29bb 100644 --- a/sapl/audiencia/__init__.py +++ b/sapl/audiencia/__init__.py @@ -1 +0,0 @@ -default_app_config = 'sapl.audiencia.apps.AppConfig' \ No newline at end of file diff --git a/sapl/audiencia/apps.py b/sapl/audiencia/apps.py index e9b3c890f..148d4ac5b 100644 --- a/sapl/audiencia/apps.py +++ b/sapl/audiencia/apps.py @@ -1,5 +1,5 @@ from django import apps -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/audiencia/forms.py b/sapl/audiencia/forms.py index 211db9855..9629ccf40 100755 --- a/sapl/audiencia/forms.py +++ b/sapl/audiencia/forms.py @@ -5,7 +5,7 @@ from datetime import datetime from django import forms from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.db import transaction -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from crispy_forms.layout import Button, Column, Fieldset, HTML, Layout diff --git a/sapl/audiencia/models.py b/sapl/audiencia/models.py index e5d011762..1b265140c 100755 --- a/sapl/audiencia/models.py +++ b/sapl/audiencia/models.py @@ -1,6 +1,6 @@ from django.db import models from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from model_utils import Choices from sapl.materia.models import MateriaLegislativa from sapl.parlamentares.models import (CargoMesa, Parlamentar) diff --git a/sapl/audiencia/tests/test_audiencia.py b/sapl/audiencia/tests/test_audiencia.py index 930d1288b..62aae2b0b 100644 --- a/sapl/audiencia/tests/test_audiencia.py +++ b/sapl/audiencia/tests/test_audiencia.py @@ -1,7 +1,7 @@ import pytest import datetime from model_bakery import baker -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from sapl.audiencia import forms from sapl.audiencia.models import AnexoAudienciaPublica diff --git a/sapl/audiencia/urls.py b/sapl/audiencia/urls.py index b268fd56f..94064b9e9 100755 --- a/sapl/audiencia/urls.py +++ b/sapl/audiencia/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, url +from django.urls import include, path from sapl.audiencia.views import (index, AudienciaCrud, AnexoAudienciaPublicaCrud) from .apps import AppConfig @@ -6,5 +6,5 @@ from .apps import AppConfig app_name = AppConfig.name urlpatterns = [ - url(r'^audiencia/', include(AudienciaCrud.get_urls() + AnexoAudienciaPublicaCrud.get_urls())), + path('audiencia/', include(AudienciaCrud.get_urls() + AnexoAudienciaPublicaCrud.get_urls())), ] \ No newline at end of file diff --git a/sapl/base/__init__.py b/sapl/base/__init__.py index 1c70462e6..e69de29bb 100644 --- a/sapl/base/__init__.py +++ b/sapl/base/__init__.py @@ -1 +0,0 @@ -default_app_config = 'sapl.base.apps.AppConfig' diff --git a/sapl/base/admin.py b/sapl/base/admin.py index c7df7ca63..9289254b3 100644 --- a/sapl/base/admin.py +++ b/sapl/base/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin from django.shortcuts import redirect -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from sapl.base.models import AuditLog from sapl.utils import register_all_models_in_admin diff --git a/sapl/base/apps.py b/sapl/base/apps.py index 403d74bd1..b362fbda3 100644 --- a/sapl/base/apps.py +++ b/sapl/base/apps.py @@ -1,6 +1,6 @@ import django -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(django.apps.AppConfig): diff --git a/sapl/base/email_utils.py b/sapl/base/email_utils.py index 2781e9876..86a251079 100644 --- a/sapl/base/email_utils.py +++ b/sapl/base/email_utils.py @@ -11,7 +11,7 @@ from sapl.materia.models import AcompanhamentoMateria from sapl.protocoloadm.models import AcompanhamentoDocumento from sapl.settings import EMAIL_SEND_USER from sapl.utils import mail_service_configured -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ def load_email_templates(templates, context={}): diff --git a/sapl/base/forms.py b/sapl/base/forms.py index 3ebc11689..aeaa2f1c0 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -16,7 +16,7 @@ from django.db.models import Q from django.forms import Form, ModelForm from django.utils import timezone from django.utils.safestring import mark_safe -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import django_filters from haystack.forms import ModelSearchForm diff --git a/sapl/base/models.py b/sapl/base/models.py index 692c55138..c0f56cf23 100644 --- a/sapl/base/models.py +++ b/sapl/base/models.py @@ -1,13 +1,13 @@ from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType -from django.contrib.postgres.fields.jsonb import JSONField +from django.db.models import JSONField from django.core.cache import cache from django.core.serializers.json import DjangoJSONEncoder from django.db import models from django.db.models.deletion import CASCADE from django.db.models.signals import post_migrate from django.db.utils import DEFAULT_DB_ALIAS -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from sapl.utils import (LISTA_DE_UFS, YES_NO_CHOICES, get_settings_auth_user_model, models_with_gr_for_model) diff --git a/sapl/base/receivers.py b/sapl/base/receivers.py index f0e5365c6..281f4e818 100644 --- a/sapl/base/receivers.py +++ b/sapl/base/receivers.py @@ -14,7 +14,7 @@ from django.db.models.signals import post_delete, post_save, \ from django.db.utils import DEFAULT_DB_ALIAS from django.dispatch import receiver from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from sapl.base.email_utils import do_envia_email_tramitacao from sapl.base.models import AuditLog, TipoAutor, Autor, Metadata diff --git a/sapl/base/templatetags/menus.py b/sapl/base/templatetags/menus.py index 65ecdcfec..93158bf05 100644 --- a/sapl/base/templatetags/menus.py +++ b/sapl/base/templatetags/menus.py @@ -2,7 +2,7 @@ import logging from django import template from django.urls import reverse -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import yaml diff --git a/sapl/base/tests/test_form.py b/sapl/base/tests/test_form.py index 35f1c82bf..d6a8c4b25 100644 --- a/sapl/base/tests/test_form.py +++ b/sapl/base/tests/test_form.py @@ -1,5 +1,5 @@ import pytest -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from sapl.base.forms import CasaLegislativaForm diff --git a/sapl/base/tests/test_view_base.py b/sapl/base/tests/test_view_base.py index 3a38d379c..507fb7ba8 100644 --- a/sapl/base/tests/test_view_base.py +++ b/sapl/base/tests/test_view_base.py @@ -2,7 +2,7 @@ import pytest from model_bakery import baker import datetime from django.urls import reverse -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from model_bakery import baker from sapl.base.models import Autor, TipoAutor diff --git a/sapl/base/tests/teststub_urls.py b/sapl/base/tests/teststub_urls.py index 8b66d6586..8bf2ae2bd 100644 --- a/sapl/base/tests/teststub_urls.py +++ b/sapl/base/tests/teststub_urls.py @@ -1,9 +1,9 @@ -from django.conf.urls import url +from django.urls import path from django.views.generic.base import TemplateView from sapl.urls import urlpatterns as original_patterns -ptrn = [url(r'^zzzz$', +ptrn = [path('zzzz', TemplateView.as_view( template_name='index.html'), name='zzzz')] urlpatterns = original_patterns + ptrn diff --git a/sapl/base/urls.py b/sapl/base/urls.py index 6733a25ec..36cef7210 100644 --- a/sapl/base/urls.py +++ b/sapl/base/urls.py @@ -1,6 +1,6 @@ import os -from django.conf.urls import include, url +from django.urls import include, path, re_path from django.contrib.auth import views from django.contrib.auth.decorators import permission_required from django.views.generic.base import RedirectView, TemplateView @@ -23,114 +23,114 @@ from .views import (LoginSapl, AlterarSenha, AppConfigCrud, CasaLegislativaCrud, app_name = AppConfig.name admin_user = [ - url(r'^sistema/usuario/', include(UserCrud.get_urls())), + path('sistema/usuario/', include(UserCrud.get_urls())), ] alterar_senha = [ - url(r'^sistema/alterar-senha/$', + path('sistema/alterar-senha/', AlterarSenha.as_view(), name='alterar_senha'), ] recuperar_senha = [ - url(r'^recuperar-senha/email/$', RecuperarSenhaEmailView.as_view(), + path('recuperar-senha/email/', RecuperarSenhaEmailView.as_view(), name='recuperar_senha_email'), - url(r'^recuperar-senha/finalizado/$', + path('recuperar-senha/finalizado/', RecuperarSenhaFinalizadoView.as_view(), name='recuperar_senha_finalizado'), - url(r'^recuperar-senha/(?P[0-9A-Za-z_\-]+)/(?P.+)/$', RecuperarSenhaConfirmaView.as_view(), + re_path(r'^recuperar-senha/(?P[0-9A-Za-z_\-]+)/(?P.+)/$', RecuperarSenhaConfirmaView.as_view(), name='recuperar_senha_confirma'), - url(r'^recuperar-senha/completo/$', + path('recuperar-senha/completo/', RecuperarSenhaCompletoView.as_view(), name='recuperar_senha_completo'), ] urlpatterns = [ - url(r'^$', IndexView.as_view(template_name='index.html'), name='sapl_index'), + path('', IndexView.as_view(template_name='index.html'), name='sapl_index'), - url(r'^sistema/autor/tipo/', include(TipoAutorCrud.get_urls())), - url(r'^sistema/autor/', include(AutorCrud.get_urls())), + path('sistema/autor/tipo/', include(TipoAutorCrud.get_urls())), + path('sistema/autor/', include(AutorCrud.get_urls())), - url(r'^sistema/ajuda/(?P\w+)$', + re_path(r'^sistema/ajuda/(?P\w+)$', HelpTopicView.as_view(), name='help_topic'), - url(r'^sistema/ajuda/$', TemplateView.as_view(template_name='ajuda.html'), + path('sistema/ajuda/', TemplateView.as_view(template_name='ajuda.html'), name='help'), - url(r'^sistema/casa-legislativa/', include(CasaLegislativaCrud.get_urls()), + path('sistema/casa-legislativa/', include(CasaLegislativaCrud.get_urls()), name="casa_legislativa"), - url(r'^sistema/app-config/', include(AppConfigCrud.get_urls())), + path('sistema/app-config/', include(AppConfigCrud.get_urls())), - url(r'^email/validate/(?P[0-9A-Za-z_\-]+)/' + re_path(r'^email/validate/(?P[0-9A-Za-z_\-]+)/' '(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})$', ConfirmarEmailView.as_view(), name='confirmar_email'), - url(r'^sistema/inconsistencias/$', + path('sistema/inconsistencias/', ListarInconsistenciasView.as_view(), name='lista_inconsistencias'), - url(r'^sistema/inconsistencias/protocolos_duplicados$', + path('sistema/inconsistencias/protocolos_duplicados', ListarProtocolosDuplicadosView.as_view(), name='lista_protocolos_duplicados'), - url(r'^sistema/inconsistencias/protocolos_com_materias$', + path('sistema/inconsistencias/protocolos_com_materias', ListarProtocolosComMateriasView.as_view(), name='lista_protocolos_com_materias'), - url(r'^sistema/inconsistencias/materias_protocolo_inexistente$', + path('sistema/inconsistencias/materias_protocolo_inexistente', ListarMatProtocoloInexistenteView.as_view(), name='lista_materias_protocolo_inexistente'), - url(r'^sistema/inconsistencias/filiacoes_sem_data_filiacao$', + path('sistema/inconsistencias/filiacoes_sem_data_filiacao', ListarFiliacoesSemDataFiliacaoView.as_view(), name='lista_filiacoes_sem_data_filiacao'), - url(r'^sistema/inconsistencias/mandato_sem_data_inicio', + re_path(r'^sistema/inconsistencias/mandato_sem_data_inicio', ListarMandatoSemDataInicioView.as_view(), name='lista_mandato_sem_data_inicio'), - url(r'^sistema/inconsistencias/parlamentares_duplicados$', + path('sistema/inconsistencias/parlamentares_duplicados', ListarParlamentaresDuplicadosView.as_view(), name='lista_parlamentares_duplicados'), - url(r'^sistema/inconsistencias/parlamentares_mandatos_intersecao$', + path('sistema/inconsistencias/parlamentares_mandatos_intersecao', ListarParlMandatosIntersecaoView.as_view(), name='lista_parlamentares_mandatos_intersecao'), - url(r'^sistema/inconsistencias/parlamentares_filiacoes_intersecao$', + path('sistema/inconsistencias/parlamentares_filiacoes_intersecao', ListarParlFiliacoesIntersecaoView.as_view(), name='lista_parlamentares_filiacoes_intersecao'), - url(r'^sistema/inconsistencias/autores_duplicados$', + path('sistema/inconsistencias/autores_duplicados', ListarAutoresDuplicadosView.as_view(), name='lista_autores_duplicados'), - url(r'^sistema/inconsistencias/bancada_comissao_autor_externo$', + path('sistema/inconsistencias/bancada_comissao_autor_externo', ListarBancadaComissaoAutorExternoView.as_view(), name='lista_bancada_comissao_autor_externo'), - url(r'^sistema/inconsistencias/legislatura_infindavel$', + path('sistema/inconsistencias/legislatura_infindavel', ListarLegislaturaInfindavelView.as_view(), name='lista_legislatura_infindavel'), - url(r'sistema/inconsistencias/anexadas_ciclicas$', + path('sistema/inconsistencias/anexadas_ciclicas', ListarAnexadasCiclicasView.as_view(), name='lista_anexadas_ciclicas'), - url(r'sistema/inconsistencias/anexados_ciclicos$', + path('sistema/inconsistencias/anexados_ciclicos', ListarAnexadosCiclicosView.as_view(), name='lista_anexados_ciclicos'), - url(r'^sistema/pesquisa-textual', + re_path(r'^sistema/pesquisa-textual', pesquisa_textual, name='pesquisa_textual'), - url(r'^sistema/estatisticas', get_estatistica), + re_path(r'^sistema/estatisticas', get_estatistica), # todos os sublinks de sistema devem vir acima deste - url(r'^sistema/$', permission_required('base.view_tabelas_auxiliares') + path('sistema/', permission_required('base.view_tabelas_auxiliares') (TemplateView.as_view(template_name='sistema.html')), name='sistema'), - url(r'^login/$', LoginSapl.as_view(), name='login'), - url(r'^logout/$', views.LogoutView.as_view(), + path('login/', LoginSapl.as_view(), name='login'), + path('logout/', views.LogoutView.as_view(), {'next_page': LOGOUT_REDIRECT_URL}, name='logout'), - url(r'^sistema/search/', SaplSearchView(), name='haystack_search'), + re_path(r'^sistema/search/', SaplSearchView(), name='haystack_search'), - url(r'^sistema/auditlog/$', PesquisarAuditLogView.as_view(), name='pesquisar_auditlog'), + path('sistema/auditlog/', PesquisarAuditLogView.as_view(), name='pesquisar_auditlog'), # Folhas XSLT e extras referenciadas por documentos migrados do sapl 2.5 - url(r'^(sapl/)?XSLT/HTML/(?P.*)$', RedirectView.as_view( + re_path(r'^(sapl/)?XSLT/HTML/(?P.*)$', RedirectView.as_view( url=os.path.join(MEDIA_URL, 'sapl/public/XSLT/HTML/%(path)s'), permanent=False)), # url do logotipo usada em documentos migrados do sapl 2.5 - url(r'^(sapl/)?sapl_documentos/props_sapl/logo_casa', + re_path(r'^(sapl/)?sapl_documentos/props_sapl/logo_casa', LogotipoView.as_view(), name='logotipo'), diff --git a/sapl/base/views.py b/sapl/base/views.py index ce3a0a717..32b25deb7 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -24,7 +24,7 @@ from django.utils import timezone from django.utils.decorators import method_decorator from django.utils.encoding import force_bytes from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.views.generic import (FormView, ListView) from django.views.generic.base import RedirectView, TemplateView from django_filters.views import FilterView @@ -118,7 +118,7 @@ class RecuperarSenhaEmailView(PasswordResetView): if not google_recaptcha_configured(): self.logger.warning(_('Google Recaptcha não configurado!')) messages.error(request, _('Google Recaptcha não configurado!')) - return redirect(request.META.get('HTTP_REFERER', '/')) + return redirect(request.headers.get('referer', '/')) return PasswordResetView.get(self, request, *args, **kwargs) @@ -127,7 +127,7 @@ class RecuperarSenhaEmailView(PasswordResetView): if not google_recaptcha_configured(): self.logger.warning(_('Google Recaptcha não configurado!')) messages.error(request, _('Google Recaptcha não configurado!')) - return redirect(request.META.get('HTTP_REFERER', '/')) + return redirect(request.headers.get('referer', '/')) return PasswordResetView.post(self, request, *args, **kwargs) diff --git a/sapl/comissoes/__init__.py b/sapl/comissoes/__init__.py index c5e8153a3..e69de29bb 100644 --- a/sapl/comissoes/__init__.py +++ b/sapl/comissoes/__init__.py @@ -1 +0,0 @@ -default_app_config = 'sapl.comissoes.apps.AppConfig' diff --git a/sapl/comissoes/apps.py b/sapl/comissoes/apps.py index 18cb03041..49a63c70c 100644 --- a/sapl/comissoes/apps.py +++ b/sapl/comissoes/apps.py @@ -1,5 +1,5 @@ from django import apps -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py index 76f511ed2..7fd2cfa1c 100644 --- a/sapl/comissoes/forms.py +++ b/sapl/comissoes/forms.py @@ -9,7 +9,7 @@ from django.core.exceptions import ValidationError from django.db import transaction from django.db.models import Q from django.forms import ModelForm -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.utils import timezone from sapl.base.models import Autor, TipoAutor diff --git a/sapl/comissoes/models.py b/sapl/comissoes/models.py index 2d9a323d3..0245a2d8a 100644 --- a/sapl/comissoes/models.py +++ b/sapl/comissoes/models.py @@ -1,5 +1,5 @@ from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from model_utils import Choices from sapl.base.models import Autor diff --git a/sapl/comissoes/tests/test_comissoes.py b/sapl/comissoes/tests/test_comissoes.py index 72b839a66..9a3c30dd8 100644 --- a/sapl/comissoes/tests/test_comissoes.py +++ b/sapl/comissoes/tests/test_comissoes.py @@ -1,6 +1,6 @@ import pytest from django.urls import reverse -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from model_bakery import baker from sapl.comissoes.models import Comissao, Composicao, Periodo diff --git a/sapl/comissoes/urls.py b/sapl/comissoes/urls.py index 932feaf22..2bb6bce65 100644 --- a/sapl/comissoes/urls.py +++ b/sapl/comissoes/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, url +from django.urls import include, path, re_path from sapl.comissoes.views import (AdicionaPautaView, CargoComissaoCrud, ComissaoCrud, ComposicaoCrud, DocumentoAcessorioCrud, MateriasTramitacaoListView, ParticipacaoCrud, @@ -10,21 +10,21 @@ from .apps import AppConfig app_name = AppConfig.name urlpatterns = [ - url(r'^comissao/', include(ComissaoCrud.get_urls() + + path('comissao/', include(ComissaoCrud.get_urls() + ComposicaoCrud.get_urls() + ReuniaoCrud.get_urls() + ParticipacaoCrud.get_urls() + DocumentoAcessorioCrud.get_urls())), - url(r'^comissao/(?P\d+)/materias-em-tramitacao$', + path('comissao//materias-em-tramitacao', MateriasTramitacaoListView.as_view(), name='materias_em_tramitacao'), - url(r'^comissao/(?P\d+)/pauta/add', AdicionaPautaView.as_view(), name='pauta_add'), - url(r'^comissao/(?P\d+)/pauta/remove', RemovePautaView.as_view(), name='pauta_remove'), + re_path(r'^comissao/(?P\d+)/pauta/add', AdicionaPautaView.as_view(), name='pauta_add'), + re_path(r'^comissao/(?P\d+)/pauta/remove', RemovePautaView.as_view(), name='pauta_remove'), - url(r'^sistema/comissao/cargo/', include(CargoComissaoCrud.get_urls())), - url(r'^sistema/comissao/periodo-composicao/', + path('sistema/comissao/cargo/', include(CargoComissaoCrud.get_urls())), + path('sistema/comissao/periodo-composicao/', include(PeriodoComposicaoCrud.get_urls())), - url(r'^sistema/comissao/tipo/', include(TipoComissaoCrud.get_urls())), - url(r'^sistema/comissao/recupera-participacoes', get_participacoes_comissao), + path('sistema/comissao/tipo/', include(TipoComissaoCrud.get_urls())), + re_path(r'^sistema/comissao/recupera-participacoes', get_participacoes_comissao), ] diff --git a/sapl/comissoes/views.py b/sapl/comissoes/views.py index 5d3e450c2..a53c1c21b 100644 --- a/sapl/comissoes/views.py +++ b/sapl/comissoes/views.py @@ -10,7 +10,7 @@ from django.views.generic import CreateView, DeleteView, FormView, ListView from django.views.generic.base import RedirectView from django.views.generic.detail import DetailView from django.views.generic.edit import FormMixin, UpdateView -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django_filters.views import FilterView diff --git a/sapl/compilacao/__init__.py b/sapl/compilacao/__init__.py index f061ea50a..e69de29bb 100644 --- a/sapl/compilacao/__init__.py +++ b/sapl/compilacao/__init__.py @@ -1 +0,0 @@ -default_app_config = 'sapl.compilacao.apps.AppConfig' diff --git a/sapl/compilacao/apps.py b/sapl/compilacao/apps.py index 0e8105a64..f786fb36b 100644 --- a/sapl/compilacao/apps.py +++ b/sapl/compilacao/apps.py @@ -3,7 +3,7 @@ from django import apps from django.conf import settings from django.db import connection, models from django.db.utils import DEFAULT_DB_ALIAS, IntegrityError -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/compilacao/forms.py b/sapl/compilacao/forms.py index c4154ec00..390107fb5 100644 --- a/sapl/compilacao/forms.py +++ b/sapl/compilacao/forms.py @@ -12,7 +12,7 @@ from django.forms import widgets from django.forms.forms import Form from django.forms.models import ModelForm from django.template import defaultfilters -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from image_cropping.widgets import CropWidget, ImageCropWidget from model_utils.choices import Choices diff --git a/sapl/compilacao/models.py b/sapl/compilacao/models.py index e8a32615e..42e06cbb1 100644 --- a/sapl/compilacao/models.py +++ b/sapl/compilacao/models.py @@ -9,8 +9,8 @@ from django.http.response import Http404 from django.template import defaultfilters from django.utils import timezone from django.utils.decorators import classonlymethod -from django.utils.encoding import force_text -from django.utils.translation import ugettext_lazy as _ +from django.utils.encoding import force_str +from django.utils.translation import gettext_lazy as _ from image_cropping.fields import ImageCropField, ImageRatioField from sapl.compilacao.utils import (get_integrations_view_names, int_to_letter, @@ -952,7 +952,7 @@ def imagem_upload_path(instance, filename): class Dispositivo(BaseModel, TimestampedMixin): - TEXTO_PADRAO_DISPOSITIVO_REVOGADO = force_text(_('(Revogado)')) + TEXTO_PADRAO_DISPOSITIVO_REVOGADO = force_str(_('(Revogado)')) INTERVALO_ORDEM = 1000 ordem = models.PositiveIntegerField( diff --git a/sapl/compilacao/templatetags/compilacao_filters.py b/sapl/compilacao/templatetags/compilacao_filters.py index cc21b8eb7..0e8d896ae 100644 --- a/sapl/compilacao/templatetags/compilacao_filters.py +++ b/sapl/compilacao/templatetags/compilacao_filters.py @@ -3,7 +3,7 @@ from django import template from django.core.signing import Signer from django.db.models import Q from django.utils.safestring import mark_safe -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from sapl.compilacao.models import Dispositivo diff --git a/sapl/compilacao/tests/test_tipo_texto_articulado_form.py b/sapl/compilacao/tests/test_tipo_texto_articulado_form.py index 1377966ff..8c58f6cfd 100644 --- a/sapl/compilacao/tests/test_tipo_texto_articulado_form.py +++ b/sapl/compilacao/tests/test_tipo_texto_articulado_form.py @@ -1,5 +1,5 @@ import pytest -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from model_bakery import baker from sapl.compilacao import forms diff --git a/sapl/compilacao/urls.py b/sapl/compilacao/urls.py index 2b9438ca0..10947b756 100644 --- a/sapl/compilacao/urls.py +++ b/sapl/compilacao/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, url +from django.urls import include, path, re_path from sapl.compilacao import views from sapl.compilacao.views import (TipoDispositivoCrud, TipoNotaCrud, @@ -11,92 +11,86 @@ from .apps import AppConfig app_name = AppConfig.name urlpatterns_compilacao = [ - url(r'^$', views.TaListView.as_view(), name='ta_list'), - url(r'^create$', views.TaCreateView.as_view(), name='ta_create'), - url(r'^(?P[0-9]+)$', views.TaDetailView.as_view(), name='ta_detail'), - url(r'^(?P[0-9]+)/edit$', + path('', views.TaListView.as_view(), name='ta_list'), + path('create', views.TaCreateView.as_view(), name='ta_create'), + path('', views.TaDetailView.as_view(), name='ta_detail'), + path('/edit', views.TaUpdateView.as_view(), name='ta_edit'), - url(r'^(?P[0-9]+)/delete$', + path('/delete', views.TaDeleteView.as_view(), name='ta_delete'), - url(r'^(?P[0-9]+)/text$', + path('/text', views.TextView.as_view(), name='ta_text'), - url(r'^(?P[0-9]+)/text/vigencia/(?P.*:[A-Za-z0-9_-]+)/$', + re_path(r'^(?P[0-9]+)/text/vigencia/(?P.*:[A-Za-z0-9_-]+)/$', views.TextView.as_view(), name='ta_vigencia'), - url(r'^(?P[0-9]+)/text/edit', + re_path(r'^(?P[0-9]+)/text/edit', views.TextEditView.as_view(), name='ta_text_edit'), - url(r'^(?P[0-9]+)/text/notifications', + re_path(r'^(?P[0-9]+)/text/notifications', views.TextNotificacoesView.as_view(), name='ta_text_notificacoes'), - url(r'^(?P[0-9]+)/text/(?P[0-9]+)/$', + path('/text//', views.DispositivoView.as_view(), name='dispositivo'), - url(r'^(?P[0-9]+)/text/(?P[0-9]+)/refresh', + re_path(r'^(?P[0-9]+)/text/(?P[0-9]+)/refresh', views.DispositivoDinamicEditView.as_view(), name='dispositivo_refresh'), - url(r'^(?P[0-9]+)/text/(?P[0-9]+)/edit$', + path('/text//edit', views.DispositivoEdicaoBasicaView.as_view(), name='dispositivo_edit'), - url(r'^(?P[0-9]+)/text/(?P[0-9]+)/edit/vigencia', + re_path(r'^(?P[0-9]+)/text/(?P[0-9]+)/edit/vigencia', views.DispositivoEdicaoVigenciaView.as_view(), name='dispositivo_edit_vigencia'), - url(r'^(?P[0-9]+)/text/(?P[0-9]+)/edit/alteracao', + re_path(r'^(?P[0-9]+)/text/(?P[0-9]+)/edit/alteracao', views.DispositivoEdicaoAlteracaoView.as_view(), name='dispositivo_edit_alteracao'), - url(r'^(?P[0-9]+)/text/(?P[0-9]+)/edit/definidor_vigencia', + re_path(r'^(?P[0-9]+)/text/(?P[0-9]+)/edit/definidor_vigencia', views.DispositivoDefinidorVigenciaView.as_view(), name='dispositivo_edit_definidor_vigencia'), - url(r'^(?P[0-9]+)/text/' - '(?P[0-9]+)/nota/create$', + path('/text//nota/create', views.NotasCreateView.as_view(), name='nota_create'), - url(r'^(?P[0-9]+)/text/' - '(?P[0-9]+)/nota/(?P[0-9]+)/edit$', + path('/text//nota//edit', views.NotasEditView.as_view(), name='nota_edit'), - url(r'^(?P[0-9]+)/text/' - '(?P[0-9]+)/nota/(?P[0-9]+)/delete$', + path('/text//nota//delete', views.NotasDeleteView.as_view(), name='nota_delete'), - url(r'^(?P[0-9]+)/text/' - '(?P[0-9]+)/vide/create$', + path('/text//vide/create', views.VideCreateView.as_view(), name='vide_create'), - url(r'^(?P[0-9]+)/text/' - '(?P[0-9]+)/vide/(?P[0-9]+)/edit$', + path('/text//vide//edit', views.VideEditView.as_view(), name='vide_edit'), - url(r'^(?P[0-9]+)/text/' - '(?P[0-9]+)/vide/(?P[0-9]+)/delete$', + path('/text//vide//delete', views.VideDeleteView.as_view(), name='vide_delete'), - url(r'^search_fragment_form$', + path('search_fragment_form', views.DispositivoSearchFragmentFormView.as_view(), name='dispositivo_fragment_form'), - url(r'^search_form$', + path('search_form', views.DispositivoSearchModalView.as_view(), name='dispositivo_search_form'), - url(r'^(?P[0-9]+)/publicacao$', + path('/publicacao', views.PublicacaoListView.as_view(), name='ta_pub_list'), - url(r'^(?P[0-9]+)/publicacao/create$', + path('/publicacao/create', views.PublicacaoCreateView.as_view(), name='ta_pub_create'), - url(r'^(?P[0-9]+)/publicacao/(?P[0-9]+)$', + path('/publicacao/', views.PublicacaoDetailView.as_view(), name='ta_pub_detail'), - url(r'^(?P[0-9]+)/publicacao/(?P[0-9]+)/edit$', + path('/publicacao//edit', views.PublicacaoUpdateView.as_view(), name='ta_pub_edit'), - url(r'^(?P[0-9]+)/publicacao/(?P[0-9]+)/delete$', + path('/publicacao//delete', views.PublicacaoDeleteView.as_view(), name='ta_pub_delete'), @@ -104,19 +98,19 @@ urlpatterns_compilacao = [ ] urlpatterns = [ - url(r'^ta/', include(urlpatterns_compilacao)), + path('ta/', include(urlpatterns_compilacao)), - url(r'^sistema/ta/config/tipo-nota/', + path('sistema/ta/config/tipo-nota/', include(TipoNotaCrud.get_urls())), - url(r'^sistema/ta/config/tipo-vide/', + path('sistema/ta/config/tipo-vide/', include(TipoVideCrud.get_urls())), - url(r'^sistema/ta/config/tipo-publicacao/', + path('sistema/ta/config/tipo-publicacao/', include(TipoPublicacaoCrud.get_urls())), - url(r'^sistema/ta/config/veiculo-publicacao/', + path('sistema/ta/config/veiculo-publicacao/', include(VeiculoPublicacaoCrud.get_urls())), - url(r'^sistema/ta/config/tipo/', + path('sistema/ta/config/tipo/', include(TipoTextoArticuladoCrud.get_urls())), - url(r'^sistema/ta/config/tipodispositivo/', + path('sistema/ta/config/tipodispositivo/', include(TipoDispositivoCrud.get_urls())), diff --git a/sapl/compilacao/views.py b/sapl/compilacao/views.py index 9afbe3201..68650bfe9 100644 --- a/sapl/compilacao/views.py +++ b/sapl/compilacao/views.py @@ -21,8 +21,8 @@ from django.http.response import (HttpResponse, HttpResponseRedirect, from django.shortcuts import get_object_or_404, redirect from django.urls import reverse, reverse_lazy from django.utils.dateparse import parse_date -from django.utils.encoding import force_text -from django.utils.translation import ugettext_lazy as _ +from django.utils.encoding import force_str +from django.utils.translation import gettext_lazy as _ from django.views.generic.base import TemplateView from django.views.generic.detail import DetailView from django.views.generic.edit import (CreateView, DeleteView, FormView, @@ -1975,18 +1975,18 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): result = [ { - 'tipo_insert': force_text("{} {}".format(_('Inserir Após'), base.tipo_dispositivo.nome)), + 'tipo_insert': force_str("{} {}".format(_('Inserir Após'), base.tipo_dispositivo.nome)), 'icone': '↷ ', 'action': 'json_add_next', 'itens': []}, { - 'tipo_insert': force_text("{} {}".format(_('Inserir em'), base.tipo_dispositivo.nome)), + 'tipo_insert': force_str("{} {}".format(_('Inserir em'), base.tipo_dispositivo.nome)), 'icone': '⇲ ', 'action': 'json_add_in', 'itens': [] }, { - 'tipo_insert': force_text(_('Inserir Antes')), + 'tipo_insert': force_str(_('Inserir Antes')), 'icone': '↶ ', 'action': 'json_add_prior', 'itens': [] diff --git a/sapl/context_processors.py b/sapl/context_processors.py index bded6d7e7..352326a6b 100644 --- a/sapl/context_processors.py +++ b/sapl/context_processors.py @@ -1,6 +1,6 @@ import logging -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from sapl.utils import google_recaptcha_configured as \ google_recaptcha_configured_utils, sapn_is_enabled, cached_call, get_base_url diff --git a/sapl/crispy_layout_mixin.py b/sapl/crispy_layout_mixin.py index 57bc0d538..d608b7777 100644 --- a/sapl/crispy_layout_mixin.py +++ b/sapl/crispy_layout_mixin.py @@ -7,8 +7,8 @@ from django import template from django.contrib.contenttypes.models import ContentType from django.urls import reverse, reverse_lazy from django.utils import formats -from django.utils.encoding import force_text -from django.utils.translation import ugettext as _ +from django.utils.encoding import force_str +from django.utils.translation import gettext as _ import yaml @@ -40,7 +40,7 @@ def form_actions(more=[Div(css_class='clearfix')], label=_('Salvar'), name='salvar', css_class='float-right', disabled=True): - if disabled and force_text(label) != 'Pesquisar': + if disabled and force_str(label) != 'Pesquisar': doubleclick = 'this.form.submit();this.disabled=true;' else: doubleclick = 'return true;' diff --git a/sapl/crud/base.py b/sapl/crud/base.py index ceaef7580..5816c2ec7 100644 --- a/sapl/crud/base.py +++ b/sapl/crud/base.py @@ -5,7 +5,7 @@ from crispy_forms.bootstrap import FieldWithButtons, StrictButton from crispy_forms.layout import Field, Layout from django import forms from django.conf import settings -from django.conf.urls import url +from django.urls import re_path from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin from django.core.exceptions import ObjectDoesNotExist @@ -15,8 +15,8 @@ from django.http.response import Http404 from django.shortcuts import redirect from django.urls import reverse from django.utils.decorators import classonlymethod -from django.utils.encoding import force_text -from django.utils.translation import ugettext_lazy as _ +from django.utils.encoding import force_str +from django.utils.translation import gettext_lazy as _ from django.views.generic import (CreateView, DeleteView, DetailView, ListView, UpdateView) from django.views.generic.base import ContextMixin @@ -433,9 +433,9 @@ class CrudListView(PermissionRequiredContainerCrudMixin, ListView): hook = 'hook_header_{}'.format(''.join(fn)) if hasattr(self, hook): header = getattr(self, hook)() - s.append(force_text(header)) + s.append(force_str(header)) else: - s.append(force_text(f.verbose_name)) + s.append(force_str(f.verbose_name)) else: hook = 'hook_header_{}'.format(''.join(fn)) if hasattr(self, hook): @@ -1029,7 +1029,7 @@ class Crud: if crud[0]: cruds.append(crud) - return [url(regex, view.as_view(), name=view.url_name(suffix)) + return [re_path(regex, view.as_view(), name=view.url_name(suffix)) for regex, view, suffix in cruds] @classonlymethod diff --git a/sapl/crud/tests/stub_app/models.py b/sapl/crud/tests/stub_app/models.py index 1aab8779c..8608077e6 100644 --- a/sapl/crud/tests/stub_app/models.py +++ b/sapl/crud/tests/stub_app/models.py @@ -10,7 +10,7 @@ class Continent(models.Model): class Country(models.Model): name = models.CharField(max_length=50) - continent = models.ForeignKey(Continent) + continent = models.ForeignKey(Continent, on_delete=models.CASCADE) is_cold = models.BooleanField(choices=[(True, 'Yes'), (False, 'No')]) population = models.PositiveIntegerField(blank=True, null=True) description = models.TextField(blank=True) @@ -25,4 +25,4 @@ class Country(models.Model): class City(models.Model): name = models.CharField(max_length=50) - country = models.ForeignKey(Country) + country = models.ForeignKey(Country, on_delete=models.CASCADE) diff --git a/sapl/crud/tests/stub_app/urls.py b/sapl/crud/tests/stub_app/urls.py index 99818018d..27d15adfe 100644 --- a/sapl/crud/tests/stub_app/urls.py +++ b/sapl/crud/tests/stub_app/urls.py @@ -1,8 +1,8 @@ -from django.conf.urls import include, url +from django.urls import include, path from .views import CityCrud, CountryCrud urlpatterns = [ - url(r'^country/', include( + path('country/', include( CountryCrud.get_urls() + CityCrud.get_urls(), 'stub_app')), ] diff --git a/sapl/crud/urls.py b/sapl/crud/urls.py index 8b7da50fe..2154488b6 100644 --- a/sapl/crud/urls.py +++ b/sapl/crud/urls.py @@ -1,5 +1,5 @@ -from django.conf.urls import include, url +from django.urls import include, path urlpatterns = [ - url(r'', include('stub_app.urls')), + path('', include('stub_app.urls')), ] diff --git a/sapl/decorators.py b/sapl/decorators.py index a377c954b..7f7ca14e6 100644 --- a/sapl/decorators.py +++ b/sapl/decorators.py @@ -1,7 +1,7 @@ from functools import wraps from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ def vigencia_atual(decorated_method): diff --git a/sapl/lexml/__init__.py b/sapl/lexml/__init__.py index 64c7375e9..e69de29bb 100644 --- a/sapl/lexml/__init__.py +++ b/sapl/lexml/__init__.py @@ -1 +0,0 @@ -default_app_config = 'sapl.lexml.apps.AppConfig' diff --git a/sapl/lexml/apps.py b/sapl/lexml/apps.py index 3a8bb3c72..25982c489 100644 --- a/sapl/lexml/apps.py +++ b/sapl/lexml/apps.py @@ -1,5 +1,5 @@ from django import apps -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/lexml/forms.py b/sapl/lexml/forms.py index 8fd59b6ac..fcec0d1ee 100644 --- a/sapl/lexml/forms.py +++ b/sapl/lexml/forms.py @@ -1,7 +1,7 @@ from django.core.exceptions import ValidationError from django.forms import ModelForm from sapl.settings import PROJECT_DIR -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from io import StringIO from lxml import etree diff --git a/sapl/lexml/models.py b/sapl/lexml/models.py index e892877fe..1abc67b3a 100644 --- a/sapl/lexml/models.py +++ b/sapl/lexml/models.py @@ -1,5 +1,5 @@ from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class LexmlProvedor(models.Model): # LexmlRegistroProvedor diff --git a/sapl/lexml/urls.py b/sapl/lexml/urls.py index 980ade7c4..f5954ad85 100644 --- a/sapl/lexml/urls.py +++ b/sapl/lexml/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, url +from django.urls import include, path, re_path from sapl.lexml.views import LexmlProvedorCrud, LexmlPublicadorCrud, lexml_request, request_search @@ -7,11 +7,11 @@ from .apps import AppConfig app_name = AppConfig.name urlpatterns = [ - url(r'^sistema/lexml/provedor/', + path('sistema/lexml/provedor/', include(LexmlProvedorCrud.get_urls())), - url(r'^sistema/lexml/publicador/', + path('sistema/lexml/publicador/', include(LexmlPublicadorCrud.get_urls())), - url(r'^sistema/lexml/request_search/(?P[\w\-]+)/', request_search, name='lexml_search'), - url(r'^sistema/lexml/oai', lexml_request, name='lexml_endpoint'), + re_path(r'^sistema/lexml/request_search/(?P[\w\-]+)/', request_search, name='lexml_search'), + re_path(r'^sistema/lexml/oai', lexml_request, name='lexml_endpoint'), ] diff --git a/sapl/materia/__init__.py b/sapl/materia/__init__.py index be6e7166d..e69de29bb 100644 --- a/sapl/materia/__init__.py +++ b/sapl/materia/__init__.py @@ -1 +0,0 @@ -default_app_config = 'sapl.materia.apps.AppConfig' diff --git a/sapl/materia/apps.py b/sapl/materia/apps.py index 3ac053d1b..a8ee2425d 100644 --- a/sapl/materia/apps.py +++ b/sapl/materia/apps.py @@ -1,5 +1,5 @@ from django import apps -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index c685109ae..0ad391a71 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -15,7 +15,7 @@ from django.forms.models import ModelMultipleChoiceField from django.forms.widgets import CheckboxSelectMultiple, HiddenInput, Select from django.urls import reverse from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import django_filters from sapl.base.models import AppConfig as BaseAppConfig, Autor, TipoAutor diff --git a/sapl/materia/models.py b/sapl/materia/models.py index da2e0ac91..db7be1bc0 100644 --- a/sapl/materia/models.py +++ b/sapl/materia/models.py @@ -7,7 +7,7 @@ from django.db import models from django.db.models.functions import Concat from django.template import defaultfilters from django.utils import formats, timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from model_utils import Choices from sapl.base.models import SEQUENCIA_NUMERACAO_PROTOCOLO, Autor diff --git a/sapl/materia/tests/test_materia_form.py b/sapl/materia/tests/test_materia_form.py index 435d9dde6..9501dac83 100644 --- a/sapl/materia/tests/test_materia_form.py +++ b/sapl/materia/tests/test_materia_form.py @@ -1,5 +1,5 @@ import pytest -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from model_bakery import baker from sapl.comissoes.models import Comissao, TipoComissao diff --git a/sapl/materia/urls.py b/sapl/materia/urls.py index 80d909e79..1df7af967 100644 --- a/sapl/materia/urls.py +++ b/sapl/materia/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, url +from django.urls import include, path, re_path from sapl.materia.views import (AcompanhamentoConfirmarView, AcompanhamentoExcluirView, @@ -42,28 +42,28 @@ from .apps import AppConfig app_name = AppConfig.name urlpatterns_impressos = [ - url(r'^materia/impressos/$', + path('materia/impressos/', ImpressosView.as_view(), name='impressos'), - url(r'^materia/impressos/etiqueta-pesquisa/$', + path('materia/impressos/etiqueta-pesquisa/', EtiquetaPesquisaView.as_view(), name='impressos_etiqueta'), - url(r'^materia/impressos/ficha-pesquisa/$', + path('materia/impressos/ficha-pesquisa/', FichaPesquisaView.as_view(), name='impressos_ficha_pesquisa'), - url(r'^materia/impressos/ficha-seleciona/$', + path('materia/impressos/ficha-seleciona/', FichaSelecionaView.as_view(), name='impressos_ficha_seleciona'), - url(r'^materia/impressos/norma-pesquisa/$', + path('materia/impressos/norma-pesquisa/', NormaPesquisaSimplesView.as_view(), name='impressos_norma_pesquisa'), - url(r'^materia/impressos/materia-pesquisa/$', + path('materia/impressos/materia-pesquisa/', MateriaPesquisaSimplesView.as_view(), name='impressos_materia_pesquisa'), - url(r'^materia/impressos/ficha-pesquisa-adm/$', + path('materia/impressos/ficha-pesquisa-adm/', FichaPesquisaAdmView.as_view(), name='impressos_ficha_pesquisa_adm'), - url(r'^materia/impressos/ficha-seleciona-adm/$', + path('materia/impressos/ficha-seleciona-adm/', FichaSelecionaAdmView.as_view(), name='impressos_ficha_seleciona_adm'), ] @@ -72,11 +72,11 @@ urlpatterns_materia = [ # Esta customização substitui a url do crud desque que ela permaneça antes # da inclusão das urls de DespachoInicialCrud - url(r'^materia/(?P\d+)/despachoinicial/create', + re_path(r'^materia/(?P\d+)/despachoinicial/create', DespachoInicialMultiCreateView.as_view(), name='despacho-inicial-multi'), - url(r'^materia/', include(MateriaLegislativaCrud.get_urls() + + path('materia/', include(MateriaLegislativaCrud.get_urls() + AnexadaCrud.get_urls() + AutoriaCrud.get_urls() + DespachoInicialCrud.get_urls() + @@ -87,107 +87,107 @@ urlpatterns_materia = [ RelatoriaCrud.get_urls() + DocumentoAcessorioCrud.get_urls())), - url(r'^materia/(?P[0-9]+)/create_simplificado$', + path('materia//create_simplificado', CriarProtocoloMateriaView.as_view(), name='materia_create_simplificado'), - url(r'^materia/recuperar-materia', + re_path(r'^materia/recuperar-materia', recuperar_materia, name='recuperar_materia'), - url(r'^materia/(?P[0-9]+)/ta$', + path('materia//ta', MateriaTaView.as_view(), name='materia_ta'), - url(r'^materia/pesquisar-materia$', + path('materia/pesquisar-materia', MateriaLegislativaPesquisaView.as_view(), name='pesquisar_materia'), - url(r'^materia/(?P\d+)/acompanhar-materia/$', + path('materia//acompanhar-materia/', AcompanhamentoMateriaView.as_view(), name='acompanhar_materia'), - url(r'^materia/(?P\d+)/acompanhar-confirmar$', + path('materia//acompanhar-confirmar', AcompanhamentoConfirmarView.as_view(), name='acompanhar_confirmar'), - url(r'^materia/(?P\d+)/acompanhar-excluir$', + path('materia//acompanhar-excluir', AcompanhamentoExcluirView.as_view(), name='acompanhar_excluir'), - url(r'^materia/(?P\d+)/autoria/multicreate', + re_path(r'^materia/(?P\d+)/autoria/multicreate', AutoriaMultiCreateView.as_view(), name='autoria_multicreate'), - url(r'^materia/acessorio-em-lote', DocumentoAcessorioEmLoteView.as_view(), + re_path(r'^materia/acessorio-em-lote', DocumentoAcessorioEmLoteView.as_view(), name='acessorio_em_lote'), - url(r'^materia/(?P\d+)/anexada-em-lote', MateriaAnexadaEmLoteView.as_view(), + re_path(r'^materia/(?P\d+)/anexada-em-lote', MateriaAnexadaEmLoteView.as_view(), name='anexada_em_lote'), - url(r'^materia/primeira-tramitacao-em-lote', + re_path(r'^materia/primeira-tramitacao-em-lote', PrimeiraTramitacaoEmLoteView.as_view(), name='primeira_tramitacao_em_lote'), - url(r'^materia/tramitacao-em-lote', TramitacaoEmLoteView.as_view(), + re_path(r'^materia/tramitacao-em-lote', TramitacaoEmLoteView.as_view(), name='tramitacao_em_lote'), - url(r'^materia/excluir-tramitacao-em-lote', ExcluirTramitacaoEmLoteView.as_view(), + re_path(r'^materia/excluir-tramitacao-em-lote', ExcluirTramitacaoEmLoteView.as_view(), name='excluir_tramitacao_em_lote'), - url(r'^materia/docacessorio/zip/(?P\d+)$', get_zip_docacessorios, + path('materia/docacessorio/zip/', get_zip_docacessorios, name='compress_docacessorios'), - url(r'^materia/docacessorio/pdf/(?P\d+)$', get_pdf_docacessorios, + path('materia/docacessorio/pdf/', get_pdf_docacessorios, name='merge_docacessorios') ] urlpatterns_proposicao = [ - url(r'^proposicao/', include(ProposicaoCrud.get_urls())), - url(r'^proposicao/recibo/(?P\d+)', ReciboProposicaoView.as_view(), + path('proposicao/', include(ProposicaoCrud.get_urls())), + re_path(r'^proposicao/recibo/(?P\d+)', ReciboProposicaoView.as_view(), name='recibo-proposicao'), - url(r'^proposicao/receber/', ReceberProposicao.as_view(), + re_path(r'^proposicao/receber/', ReceberProposicao.as_view(), name='receber-proposicao'), - url(r'^proposicao/pendente/', ProposicaoPendente.as_view(), + re_path(r'^proposicao/pendente/', ProposicaoPendente.as_view(), name='proposicao-pendente'), - url(r'^proposicao/recebida/', ProposicaoRecebida.as_view(), + re_path(r'^proposicao/recebida/', ProposicaoRecebida.as_view(), name='proposicao-recebida'), - url(r'^proposicao/devolvida/', ProposicaoDevolvida.as_view(), + re_path(r'^proposicao/devolvida/', ProposicaoDevolvida.as_view(), name='proposicao-devolvida'), - url(r'^proposicao/confirmar/P(?P[0-9A-Fa-f]+)/' - r'(?P\d+)', ConfirmarProposicao.as_view(), + re_path(r'^proposicao/confirmar/P(?P[0-9A-Fa-f]+)/' + '(?P\d+)', ConfirmarProposicao.as_view(), name='proposicao-confirmar'), - url(r'^sistema/proposicao/tipo/', + path('sistema/proposicao/tipo/', include(TipoProposicaoCrud.get_urls())), - url(r'^proposicao/(?P[0-9]+)/ta$', + path('proposicao//ta', ProposicaoTaView.as_view(), name='proposicao_ta'), - url(r'^proposicao/texto/(?P\d+)$', proposicao_texto, + path('proposicao/texto/', proposicao_texto, name='proposicao_texto'), - url(r'^proposicao/(?P\d+)/retornar', RetornarProposicao.as_view(), + re_path(r'^proposicao/(?P\d+)/retornar', RetornarProposicao.as_view(), name='retornar-proposicao'), - url(r'^proposicao/historico', HistoricoProposicaoView.as_view(), + re_path(r'^proposicao/historico', HistoricoProposicaoView.as_view(), name='historico-proposicao'), ] urlpatterns_sistema = [ - url(r'^sistema/assunto-materia/', + path('sistema/assunto-materia/', include(AssuntoMateriaCrud.get_urls())), - url(r'^sistema/proposicao/tipo/', + path('sistema/proposicao/tipo/', include(TipoProposicaoCrud.get_urls())), - url(r'^sistema/materia/tipo/', include(TipoMateriaCrud.get_urls())), - url(r'^sistema/materia/regime-tramitacao/', + path('sistema/materia/tipo/', include(TipoMateriaCrud.get_urls())), + path('sistema/materia/regime-tramitacao/', include(RegimeTramitacaoCrud.get_urls())), - url(r'^sistema/materia/tipo-documento/', + path('sistema/materia/tipo-documento/', include(TipoDocumentoCrud.get_urls())), - url(r'^sistema/materia/tipo-fim-relatoria/', + path('sistema/materia/tipo-fim-relatoria/', include(TipoFimRelatoriaCrud.get_urls())), - url(r'^sistema/materia/unidade-tramitacao/', + path('sistema/materia/unidade-tramitacao/', include(UnidadeTramitacaoCrud.get_urls())), - url(r'^sistema/materia/origem/', include(OrigemCrud.get_urls())), + path('sistema/materia/origem/', include(OrigemCrud.get_urls())), - url(r'^sistema/materia/status-tramitacao/', include( + path('sistema/materia/status-tramitacao/', include( StatusTramitacaoCrud.get_urls() )), - url( + re_path( r'^sistema/materia/pesquisar-status-tramitacao/', PesquisarStatusTramitacaoView.as_view(), name="pesquisar_statustramitacao" ), - url(r'^sistema/materia/orgao/', include(OrgaoCrud.get_urls())), - url(r'^sistema/materia/config-etiqueta-materia-legislativas/',configEtiquetaMateriaLegislativaCrud, name="configEtiquetaMateriaLegislativaCrud"), + path('sistema/materia/orgao/', include(OrgaoCrud.get_urls())), + re_path(r'^sistema/materia/config-etiqueta-materia-legislativas/',configEtiquetaMateriaLegislativaCrud, name="configEtiquetaMateriaLegislativaCrud"), ] urlpatterns = urlpatterns_impressos + urlpatterns_materia + \ diff --git a/sapl/materia/views.py b/sapl/materia/views.py index a4f557d79..d51f477c4 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -24,8 +24,8 @@ from django.shortcuts import render from django.template import loader from django.urls import reverse from django.utils import formats, timezone -from django.utils.encoding import force_text -from django.utils.translation import ugettext_lazy as _ +from django.utils.encoding import force_str +from django.utils.translation import gettext_lazy as _ from django.views.generic import CreateView, ListView, TemplateView, UpdateView from django.views.generic.base import RedirectView from django.views.generic.edit import FormView @@ -2173,7 +2173,7 @@ class AcompanhamentoMateriaView(CreateView): if not google_recaptcha_configured(): self.logger.warning(_('Google Recaptcha não configurado!')) messages.error(request, _('Google Recaptcha não configurado!')) - return redirect(request.META.get('HTTP_REFERER', '/')) + return redirect(request.headers.get('referer', '/')) pk = self.kwargs['pk'] materia = MateriaLegislativa.objects.get(id=pk) @@ -2193,7 +2193,7 @@ class AcompanhamentoMateriaView(CreateView): if not google_recaptcha_configured(): self.logger.warning(_('Google Recaptcha não configurado!')) messages.error(request, _('Google Recaptcha não configurado!')) - return redirect(request.META.get('HTTP_REFERER', '/')) + return redirect(request.headers.get('referer', '/')) form = AcompanhamentoMateriaForm(request.POST) pk = self.kwargs['pk'] diff --git a/sapl/norma/__init__.py b/sapl/norma/__init__.py index 497a3720d..e69de29bb 100644 --- a/sapl/norma/__init__.py +++ b/sapl/norma/__init__.py @@ -1 +0,0 @@ -default_app_config = 'sapl.norma.apps.AppConfig' diff --git a/sapl/norma/apps.py b/sapl/norma/apps.py index effd4f271..593a172fa 100644 --- a/sapl/norma/apps.py +++ b/sapl/norma/apps.py @@ -1,5 +1,5 @@ from django import apps -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/norma/forms.py b/sapl/norma/forms.py index 3116f96c1..c958beb58 100644 --- a/sapl/norma/forms.py +++ b/sapl/norma/forms.py @@ -8,7 +8,7 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.db.models import Q, F, Func, Value from django.forms import ModelChoiceField, ModelForm, widgets from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import django_filters from sapl.base.models import TipoAutor diff --git a/sapl/norma/models.py b/sapl/norma/models.py index 668f93347..6b63b94fc 100644 --- a/sapl/norma/models.py +++ b/sapl/norma/models.py @@ -2,7 +2,7 @@ from django.contrib.contenttypes.fields import GenericRelation from django.db import models from django.template import defaultfilters from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from model_utils import Choices from sapl.base.models import Autor diff --git a/sapl/norma/tests/test_norma.py b/sapl/norma/tests/test_norma.py index 52f810b91..2b8cdfa3c 100644 --- a/sapl/norma/tests/test_norma.py +++ b/sapl/norma/tests/test_norma.py @@ -1,5 +1,5 @@ from django.urls import reverse -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from model_bakery import baker import pytest diff --git a/sapl/norma/urls.py b/sapl/norma/urls.py index 951479ea4..1d59016da 100644 --- a/sapl/norma/urls.py +++ b/sapl/norma/urls.py @@ -1,5 +1,5 @@ from django.conf import settings -from django.conf.urls import include, url +from django.urls import include, path, re_path from sapl.norma.views import (AnexoNormaJuridicaCrud, AssuntoNormaCrud, NormaCrud, NormaPesquisaView, @@ -16,28 +16,28 @@ app_name = AppConfig.name urlpatterns = [ - url(r'^norma/', include(NormaCrud.get_urls() + + path('norma/', include(NormaCrud.get_urls() + NormaRelacionadaCrud.get_urls() + AnexoNormaJuridicaCrud.get_urls() + AutoriaNormaCrud.get_urls())), # Integração com Compilação - url(r'^norma/(?P[0-9]+)/ta$', NormaTaView.as_view(), name='norma_ta'), - url(r'^sistema/norma/tipo/', include(TipoNormaCrud.get_urls())), + path('norma//ta', NormaTaView.as_view(), name='norma_ta'), + path('sistema/norma/tipo/', include(TipoNormaCrud.get_urls())), - url(r'^sistema/norma/assunto/', include(AssuntoNormaCrud.get_urls())), - url( + path('sistema/norma/assunto/', include(AssuntoNormaCrud.get_urls())), + re_path( r'^sistema/norma/pesquisar-assunto-norma/', PesquisarAssuntoNormaView.as_view(), name="pesquisar_assuntonorma" ), - url(r'^sistema/norma/vinculo/', include( + path('sistema/norma/vinculo/', include( TipoVinculoNormaJuridicaCrud.get_urls())), - url(r'^norma/pesquisar$', + path('norma/pesquisar', NormaPesquisaView.as_view(), name='norma_pesquisa'), - url(r'^norma/recuperar-norma$', recuperar_norma, name="recuperar_norma"), - url(r'^norma/recuperar-numero-norma$', recuperar_numero_norma, + path('norma/recuperar-norma', recuperar_norma, name="recuperar_norma"), + path('norma/recuperar-numero-norma', recuperar_numero_norma, name="recuperar_numero_norma"), ] diff --git a/sapl/norma/views.py b/sapl/norma/views.py index e0e8e923c..b84a324e1 100644 --- a/sapl/norma/views.py +++ b/sapl/norma/views.py @@ -12,8 +12,8 @@ from django.template import loader from django.urls import reverse from django.urls.base import reverse_lazy from django.utils import timezone -from django.utils.encoding import force_text -from django.utils.translation import ugettext_lazy as _ +from django.utils.encoding import force_str +from django.utils.translation import gettext_lazy as _ from django.views.generic import TemplateView, UpdateView from django.views.generic.edit import FormView from django_filters.views import FilterView @@ -353,7 +353,7 @@ class NormaCrud(Crud): return HttpResponseRedirect(url) def hook_header_epigrafe(self, *args, **kwargs): - return force_text(_('Epigrafe')) + return force_str(_('Epigrafe')) def hook_epigrafe(self, obj, ss, url): diff --git a/sapl/painel/__init__.py b/sapl/painel/__init__.py index 4a9413e0f..e69de29bb 100644 --- a/sapl/painel/__init__.py +++ b/sapl/painel/__init__.py @@ -1 +0,0 @@ -default_app_config = 'sapl.painel.apps.AppConfig' diff --git a/sapl/painel/apps.py b/sapl/painel/apps.py index 7cd1002ec..e44c55f55 100644 --- a/sapl/painel/apps.py +++ b/sapl/painel/apps.py @@ -1,5 +1,5 @@ from django import apps -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/painel/models.py b/sapl/painel/models.py index 8a178e6c2..fb3de6a2b 100644 --- a/sapl/painel/models.py +++ b/sapl/painel/models.py @@ -1,5 +1,5 @@ from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class Painel(models.Model): diff --git a/sapl/painel/urls.py b/sapl/painel/urls.py index 0795d0a35..37a706489 100644 --- a/sapl/painel/urls.py +++ b/sapl/painel/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import path from .apps import AppConfig from .views import (cronometro_painel, get_dados_painel, painel_mensagem_view, @@ -8,20 +8,20 @@ from .views import (cronometro_painel, get_dados_painel, painel_mensagem_view, app_name = AppConfig.name urlpatterns = [ - url(r'^painel-principal/(?P\d+)$', painel_view, + path('painel-principal/', painel_view, name="painel_principal"), - url(r'^painel/(?P\d+)/dados$', get_dados_painel, name='dados_painel'), - url(r'^painel/mensagem$', painel_mensagem_view, name="painel_mensagem"), - url(r'^painel/parlamentar$', painel_parlamentar_view, + path('painel//dados', get_dados_painel, name='dados_painel'), + path('painel/mensagem', painel_mensagem_view, name="painel_mensagem"), + path('painel/parlamentar', painel_parlamentar_view, name='painel_parlamentar'), - url(r'^painel/switch-painel$', switch_painel, + path('painel/switch-painel', switch_painel, name="switch_painel"), - url(r'^painel/votacao$', painel_votacao_view, name='painel_votacao'), - url(r'^painel/verifica-painel$', verifica_painel, + path('painel/votacao', painel_votacao_view, name='painel_votacao'), + path('painel/verifica-painel', verifica_painel, name="verifica_painel"), - url(r'^painel/cronometro$', cronometro_painel, name='cronometro_painel'), + path('painel/cronometro', cronometro_painel, name='cronometro_painel'), # url(r'^painel/cronometro$', include(CronometroPainelCrud.get_urls())), - url(r'^voto-individual/$', votante_view, + path('voto-individual/', votante_view, name='voto_individual'), ] diff --git a/sapl/painel/views.py b/sapl/painel/views.py index a4c9e2da3..2345175a5 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -11,7 +11,7 @@ from django.http import HttpResponse, JsonResponse from django.http.response import Http404, HttpResponseRedirect from django.shortcuts import render from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from sapl.base.models import AppConfig as ConfiguracoesAplicacao from sapl.base.models import CasaLegislativa diff --git a/sapl/parlamentares/__init__.py b/sapl/parlamentares/__init__.py index f459a5e37..e69de29bb 100644 --- a/sapl/parlamentares/__init__.py +++ b/sapl/parlamentares/__init__.py @@ -1 +0,0 @@ -default_app_config = 'sapl.parlamentares.apps.AppConfig' diff --git a/sapl/parlamentares/apps.py b/sapl/parlamentares/apps.py index 41f6d0b38..bb357afce 100644 --- a/sapl/parlamentares/apps.py +++ b/sapl/parlamentares/apps.py @@ -1,5 +1,5 @@ from django import apps -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index 89ab424f5..0aa0479b3 100755 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -11,7 +11,7 @@ from django.db import transaction from django.db.models import Q from django.forms import ModelForm from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import django_filters from image_cropping.widgets import CropWidget, ImageCropWidget diff --git a/sapl/parlamentares/models.py b/sapl/parlamentares/models.py index 42b314ac2..f8c6a065a 100644 --- a/sapl/parlamentares/models.py +++ b/sapl/parlamentares/models.py @@ -1,7 +1,7 @@ from django.db import models from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from image_cropping.fields import ImageCropField, ImageRatioField from model_utils import Choices from prompt_toolkit.key_binding.bindings.named_commands import self_insert diff --git a/sapl/parlamentares/tests/test_parlamentares.py b/sapl/parlamentares/tests/test_parlamentares.py index 4e69cd375..8e4a8acdd 100644 --- a/sapl/parlamentares/tests/test_parlamentares.py +++ b/sapl/parlamentares/tests/test_parlamentares.py @@ -1,6 +1,6 @@ import pytest from django.urls import reverse -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from model_bakery import baker from sapl.parlamentares.forms import FrenteForm, LegislaturaForm, MandatoForm diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index d67a1f6b1..c7484e405 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, url +from django.urls import include, path, re_path from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, coligacao_legislatura, @@ -30,7 +30,7 @@ from .apps import AppConfig app_name = AppConfig.name urlpatterns = [ - url(r'^parlamentar/', include( + path('parlamentar/', include( ParlamentarCrud.get_urls() + DependenteCrud.get_urls() + FiliacaoCrud.get_urls() + MandatoCrud.get_urls() + ParticipacaoParlamentarCrud.get_urls() + @@ -41,85 +41,85 @@ urlpatterns = [ )), - url(r'^parlamentar/pesquisar-parlamentar/', + re_path(r'^parlamentar/pesquisar-parlamentar/', PesquisarParlamentarView.as_view(), name='pesquisar_parlamentar'), - url(r'^parlamentar/(?P\d+)/materias$', + path('parlamentar//materias', ParlamentarMateriasView.as_view(), name='parlamentar_materias'), - url(r'^parlamentar/(?P\d+)/normas$', + path('parlamentar//normas', ParlamentarNormasView.as_view(), name='parlamentar_normas'), - url(r'^parlamentar/(?P\d+)/frentes/$', + path('parlamentar//frentes/', get_parlamentar_frentes, name='parlamentar_frentes'), - url(r'^parlamentar/vincular-parlamentar/$', + path('parlamentar/vincular-parlamentar/', VincularParlamentarView.as_view(), name='vincular_parlamentar'), - url(r'^parlamentar/coligacao-legislatura/', + re_path(r'^parlamentar/coligacao-legislatura/', coligacao_legislatura, name="coligacao_legislatura"), - url(r'^sistema/coligacao/', include(ColigacaoCrud.get_urls() + + path('sistema/coligacao/', include(ColigacaoCrud.get_urls() + ComposicaoColigacaoCrud.get_urls())), - url(r'^sistema/pesquisar-coligacao/', + re_path(r'^sistema/pesquisar-coligacao/', PesquisarColigacaoView.as_view(), name='pesquisar_coligacao'), - url(r'^sistema/coligacao/', include(ColigacaoCrud.get_urls() + + path('sistema/coligacao/', include(ColigacaoCrud.get_urls() + ComposicaoColigacaoCrud.get_urls())), - url(r'^sistema/bloco/', include(BlocoCrud.get_urls())), - url(r'^sistema/bloco-cargo/', include(BlocoCargoCrud.get_urls())), - url(r'^sistema/bloco-membros/', include(BlocoMembroCrud.get_urls())), + path('sistema/bloco/', include(BlocoCrud.get_urls())), + path('sistema/bloco-cargo/', include(BlocoCargoCrud.get_urls())), + path('sistema/bloco-membros/', include(BlocoMembroCrud.get_urls())), - url(r'^sistema/frente/', include(FrenteCrud.get_urls())), - url(r'^sistema/frente-cargo/', include(FrenteCargoCrud.get_urls())), - url(r'^sistema/frente-parlamentares/', + path('sistema/frente/', include(FrenteCrud.get_urls())), + path('sistema/frente-cargo/', include(FrenteCargoCrud.get_urls())), + path('sistema/frente-parlamentares/', include(FrenteParlamentarCrud.get_urls())), - url(r'^sistema/frente/atualiza-lista-parlamentares', + re_path(r'^sistema/frente/atualiza-lista-parlamentares', frente_atualiza_lista_parlamentares, name='atualiza_lista_parlamentares'), - url(r'^sistema/frente/parlamentares-frente-selected', + re_path(r'^sistema/frente/parlamentares-frente-selected', parlamentares_frente_selected, name='parlamentares_frente_selected'), - url(r'^sistema/parlamentar/legislatura/', + path('sistema/parlamentar/legislatura/', include(LegislaturaCrud.get_urls())), - url(r'^sistema/parlamentar/tipo-dependente/', + path('sistema/parlamentar/tipo-dependente/', include(TipoDependenteCrud.get_urls())), - url(r'^sistema/parlamentar/nivel-instrucao/', + path('sistema/parlamentar/nivel-instrucao/', include(NivelInstrucaoCrud.get_urls())), - url(r'^sistema/parlamentar/tipo-afastamento/', + path('sistema/parlamentar/tipo-afastamento/', include(TipoAfastamentoCrud.get_urls())), - url(r'^sistema/parlamentar/tipo-militar/', + path('sistema/parlamentar/tipo-militar/', include(TipoMilitarCrud.get_urls())), - url(r'^sistema/parlamentar/partido/', include(PartidoCrud.get_urls())), - url(r'^sistema/parlamentar/pesquisar-partido/', + path('sistema/parlamentar/partido/', include(PartidoCrud.get_urls())), + re_path(r'^sistema/parlamentar/pesquisar-partido/', PesquisarPartidoView.as_view(), name='pesquisar_partido'), - url(r'^sistema/parlamentar/partido/(?P\d+)/filiados$', + path('sistema/parlamentar/partido//filiados', parlamentares_filiados, name='parlamentares_filiados'), - url(r'^sistema/mesa-diretora/sessao-legislativa/', + path('sistema/mesa-diretora/sessao-legislativa/', include(SessaoLegislativaCrud.get_urls())), - url(r'^sistema/mesa-diretora/cargo-mesa/', + path('sistema/mesa-diretora/cargo-mesa/', include(CargoMesaCrud.get_urls())), - url(r'^mesa-diretora/$', + path('mesa-diretora/', MesaDiretoraView.as_view(), name='mesa_diretora'), - url(r'^mesa-diretora/altera-field-mesa/$', + path('mesa-diretora/altera-field-mesa/', altera_field_mesa, name='altera_field_mesa'), - url(r'^mesa-diretora/altera-field-mesa-public-view/$', + path('mesa-diretora/altera-field-mesa-public-view/', altera_field_mesa_public_view, name='altera_field_mesa_public_view'), - url(r'^mesa-diretora/insere-parlamentar-composicao/$', + path('mesa-diretora/insere-parlamentar-composicao/', insere_parlamentar_composicao, name='insere_parlamentar_composicao'), - url(r'^mesa-diretora/remove-parlamentar-composicao/$', + path('mesa-diretora/remove-parlamentar-composicao/', remove_parlamentar_composicao, name='remove_parlamentar_composicao'), - url(r'^parlamentar/get-sessoes-legislatura/$', + path('parlamentar/get-sessoes-legislatura/', get_sessoes_legislatura, name='get_sessoes_legislatura'), ] diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index b48dc6c23..4c135f328 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -16,7 +16,7 @@ from django.templatetags.static import static from django.urls import reverse, reverse_lazy from django.utils import timezone from django.utils.datastructures import MultiValueDictKeyError -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.views.decorators.clickjacking import xframe_options_exempt from django.views.generic import FormView from django.views.generic.edit import UpdateView diff --git a/sapl/protocoloadm/__init__.py b/sapl/protocoloadm/__init__.py index 181f6ddc5..e69de29bb 100644 --- a/sapl/protocoloadm/__init__.py +++ b/sapl/protocoloadm/__init__.py @@ -1 +0,0 @@ -default_app_config = 'sapl.protocoloadm.apps.AppConfig' diff --git a/sapl/protocoloadm/apps.py b/sapl/protocoloadm/apps.py index 8697e58d9..306ce5f9b 100644 --- a/sapl/protocoloadm/apps.py +++ b/sapl/protocoloadm/apps.py @@ -1,5 +1,5 @@ from django import apps -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 58cd07568..e61064caf 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -11,7 +11,7 @@ from django.db import transaction from django.db.models import Max from django.forms import ModelForm from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import django_filters from sapl.base.models import Autor, TipoAutor, AppConfig diff --git a/sapl/protocoloadm/models.py b/sapl/protocoloadm/models.py index 3cdf32735..e947a7d2f 100644 --- a/sapl/protocoloadm/models.py +++ b/sapl/protocoloadm/models.py @@ -3,7 +3,7 @@ import re from django.db import models from django.utils import timezone from django.utils.functional import cached_property -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from model_utils import Choices from sapl.base.models import Autor, AppConfig as SaplAppConfig diff --git a/sapl/protocoloadm/tests/test_protocoloadm.py b/sapl/protocoloadm/tests/test_protocoloadm.py index fe38765c3..e6db7dd8b 100644 --- a/sapl/protocoloadm/tests/test_protocoloadm.py +++ b/sapl/protocoloadm/tests/test_protocoloadm.py @@ -2,8 +2,8 @@ from datetime import date, timedelta from django.urls import reverse from django.utils import timezone -from django.utils.encoding import force_text -from django.utils.translation import ugettext_lazy as _ +from django.utils.encoding import force_str +from django.utils.translation import gettext_lazy as _ from model_bakery import baker from urllib.parse import urlencode import pytest @@ -168,7 +168,7 @@ def test_create_tramitacao(admin_client): 'data_tramitacao': date(2016, 8, 21)}, follow=True) - msg = force_text(_('A origem da nova tramitação deve ser igual ao ' + msg = force_str(_('A origem da nova tramitação deve ser igual ao ' 'destino da última adicionada!')) # Verifica se a origem da nova tramitacao é igual ao destino da última @@ -209,7 +209,7 @@ def test_create_tramitacao(admin_client): days=1)}, follow=True) - msg = force_text(_('A data de tramitação deve ser ' + + msg = force_str(_('A data de tramitação deve ser ' + 'menor ou igual a data de hoje!')) # Verifica se a data da tramitação é menor do que a data de hoje @@ -230,7 +230,7 @@ def test_create_tramitacao(admin_client): 'data_encaminhamento': date(2016, 8, 20)}, follow=True) - msg = force_text(_('A data de encaminhamento deve ser ' + + msg = force_str(_('A data de encaminhamento deve ser ' + 'maior que a data de tramitação!')) # Verifica se a data da encaminhamento é menor do que a data de tramitacao diff --git a/sapl/protocoloadm/urls.py b/sapl/protocoloadm/urls.py index 05c787897..458c7d321 100644 --- a/sapl/protocoloadm/urls.py +++ b/sapl/protocoloadm/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, url +from django.urls import include, path, re_path from sapl.protocoloadm.views import (AcompanhamentoDocumentoView, AcompanhamentoConfirmarView, @@ -35,24 +35,24 @@ from .apps import AppConfig app_name = AppConfig.name urlpatterns_documento_administrativo = [ - url(r'^docadm/', + path('docadm/', include(DocumentoAdministrativoCrud.get_urls() + AnexadoCrud.get_urls() + TramitacaoAdmCrud.get_urls() + DocumentoAcessorioAdministrativoCrud.get_urls() + VinculoDocAdminMateriaCrud.get_urls())), - url(r'^docadm/pesq-doc-adm', + re_path(r'^docadm/pesq-doc-adm', PesquisarDocumentoAdministrativoView.as_view(), name='pesq_doc_adm'), - url(r'^docadm/texto_integral/(?P\d+)$', doc_texto_integral, + path('docadm/texto_integral/', doc_texto_integral, name='doc_texto_integral'), - url(r'^docadm/(?P\d+)/anexado_em_lote', DocumentoAnexadoEmLoteView.as_view(), + re_path(r'^docadm/(?P\d+)/anexado_em_lote', DocumentoAnexadoEmLoteView.as_view(), name='anexado_em_lote'), - url(r'^docadm/(?P\d+)/vinculo-em-lote', VinculoDocAdminMateriaEmLoteView.as_view(), + re_path(r'^docadm/(?P\d+)/vinculo-em-lote', VinculoDocAdminMateriaEmLoteView.as_view(), name='vinculodocadminmateria_em_lote'), - url(r'^docadm/documentoacessorioadministrativo/pdf/(?P\d+)$', get_pdf_docacessorios, + path('docadm/documentoacessorioadministrativo/pdf/', get_pdf_docacessorios, name='merge_docacessorios') ] @@ -65,67 +65,67 @@ urlpatterns_protocolo = [ # url(r'^protocoloadm/protocolo-list$', # ProtocoloListView.as_view(), name='protocolo_list'), - url(r'^protocoloadm/$', + path('protocoloadm/', ProtocoloPesquisaView.as_view(), name='protocolo'), - url(r'^protocoloadm/protocolar-doc', + re_path(r'^protocoloadm/protocolar-doc', ProtocoloDocumentoView.as_view(), name='protocolar_doc'), - url(r'^protocoloadm/(?P\d+)/protocolo-mostrar$', + path('protocoloadm//protocolo-mostrar', ProtocoloMostrarView.as_view(), name='protocolo_mostrar'), - url(r'^docadm/(?P\d+)/acompanhar-documento/$', + path('docadm//acompanhar-documento/', AcompanhamentoDocumentoView.as_view(), name='acompanhar_documento'), - url(r'^docadm/(?P\d+)/acompanhar-confirmar$', + path('docadm//acompanhar-confirmar', AcompanhamentoConfirmarView.as_view(), name='acompanhar_confirmar'), - url(r'^docadm/(?P\d+)/acompanhar-excluir$', + path('docadm//acompanhar-excluir', AcompanhamentoExcluirView.as_view(), name='acompanhar_excluir'), - url(r'^protocoloadm/(?P\d+)/continuar$', + path('protocoloadm//continuar', ProtocoloMateriaTemplateView.as_view(), name='materia_continuar'), - url(r'^protocoloadm/anular-protocolo', + re_path(r'^protocoloadm/anular-protocolo', AnularProtocoloAdmView.as_view(), name='anular_protocolo'), - url(r'^protocoloadm/desvincular-documento', + re_path(r'^protocoloadm/desvincular-documento', DesvincularDocumentoView.as_view(), name='desvincular_documento'), - url(r'^protocoloadm/desvincular-materia', + re_path(r'^protocoloadm/desvincular-materia', DesvincularMateriaView.as_view(), name='desvincular_materia'), - url(r'^protocoloadm/protocolar-mat', + re_path(r'^protocoloadm/protocolar-mat', ProtocoloMateriaView.as_view(), name='protocolar_mat'), - url(r'^protocoloadm/(?P\d+)/comprovante$', + path('protocoloadm//comprovante', ComprovanteProtocoloView.as_view(), name='comprovante_protocolo'), - url(r'^protocoloadm/(?P\d+)/criar-documento$', + path('protocoloadm//criar-documento', CriarDocumentoProtocolo.as_view(), name='criar_documento'), - url(r'^protocoloadm/atualizar_numero_documento$', + path('protocoloadm/atualizar_numero_documento', atualizar_numero_documento, name='atualizar_numero_documento'), - url(r'^protocoloadm/recuperar-materia', + re_path(r'^protocoloadm/recuperar-materia', recuperar_materia_protocolo, name='recuperar_materia_protocolo'), - url(r'^protocoloadm/primeira-tramitacao-em-lote', + re_path(r'^protocoloadm/primeira-tramitacao-em-lote', PrimeiraTramitacaoEmLoteAdmView.as_view(), name='primeira_tramitacao_em_lote_docadm'), - url(r'^protocoloadm/tramitacao-em-lote', TramitacaoEmLoteAdmView.as_view(), + re_path(r'^protocoloadm/tramitacao-em-lote', TramitacaoEmLoteAdmView.as_view(), name='tramitacao_em_lote_docadm'), - url(r'^protocoloadm/apaga_protocolos', apaga_protocolos_view, + re_path(r'^protocoloadm/apaga_protocolos', apaga_protocolos_view, name='apaga_protocolos_view'), ] urlpatterns_sistema = [ - url(r'^sistema/tipo-documento-adm/', + path('sistema/tipo-documento-adm/', include(TipoDocumentoAdministrativoCrud.get_urls())), - url(r'^sistema/status-tramitacao-adm/', + path('sistema/status-tramitacao-adm/', include(StatusTramitacaoAdministrativoCrud.get_urls())), ] diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index d2fbcb08e..86884eb4d 100755 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -24,7 +24,7 @@ from django.shortcuts import redirect, get_object_or_404 from django.shortcuts import render from django.urls import reverse from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.views.generic import ListView, CreateView, UpdateView from django.views.generic.base import RedirectView, TemplateView from django.views.generic.edit import FormView @@ -275,7 +275,7 @@ class AcompanhamentoDocumentoView(CreateView): if not google_recaptcha_configured(): self.logger.warning(_('Google Recaptcha não configurado!')) messages.error(request, _('Google Recaptcha não configurado!')) - return redirect(request.META.get('HTTP_REFERER', '/')) + return redirect(request.headers.get('referer', '/')) pk = self.kwargs['pk'] documento = DocumentoAdministrativo.objects.get(id=pk) @@ -294,7 +294,7 @@ class AcompanhamentoDocumentoView(CreateView): if not google_recaptcha_configured(): self.logger.warning(_('Google Recaptcha não configurado!')) messages.error(request, _('Google Recaptcha não configurado!')) - return redirect(request.META.get('HTTP_REFERER', '/')) + return redirect(request.headers.get('referer', '/')) form = AcompanhamentoDocumentoForm(request.POST) pk = self.kwargs['pk'] diff --git a/sapl/redireciona_urls/apps.py b/sapl/redireciona_urls/apps.py index 8ee8742bc..ae4ea82e7 100644 --- a/sapl/redireciona_urls/apps.py +++ b/sapl/redireciona_urls/apps.py @@ -1,5 +1,5 @@ from django import apps -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/redireciona_urls/exceptions.py b/sapl/redireciona_urls/exceptions.py index e1a994bcb..0686d7953 100644 --- a/sapl/redireciona_urls/exceptions.py +++ b/sapl/redireciona_urls/exceptions.py @@ -1,4 +1,4 @@ -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ class UnknownUrlNameError(Exception): diff --git a/sapl/redireciona_urls/urls.py b/sapl/redireciona_urls/urls.py index f8a9aa685..bf8d8e564 100644 --- a/sapl/redireciona_urls/urls.py +++ b/sapl/redireciona_urls/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import path, re_path from .apps import AppConfig from .views import (RedirecionaAtasList, RedirecionaComissao, @@ -19,67 +19,67 @@ from .views import (RedirecionaAtasList, RedirecionaComissao, app_name = AppConfig.name urlpatterns = [ - url(r'^default_index_html$', + path('default_index_html', RedirecionaSAPLIndex.as_view(), name='redireciona_sapl_index'), - url(r'^consultas/parlamentar/parlamentar_', + re_path(r'^consultas/parlamentar/parlamentar_', RedirecionaParlamentar.as_view(), name='redireciona_parlamentar'), - url(r'^consultas/comissao/comissao_', + re_path(r'^consultas/comissao/comissao_', RedirecionaComissao.as_view(), name='redireciona_comissao'), - url(r'^consultas/comissao/composicao/composicao_index_html', + re_path(r'^consultas/comissao/composicao/composicao_index_html', RedirecionaComposicaoComissao.as_view(), name='redireciona_composicaio_comissao'), - url(r'^consultas/pauta_sessao/pauta_sessao_', + re_path(r'^consultas/pauta_sessao/pauta_sessao_', RedirecionaPautaSessao.as_view(), name='redireciona_pauta_sessao_'), - url(r'^consultas/mesa_diretora/mesa_diretora_index_html', + re_path(r'^consultas/mesa_diretora/mesa_diretora_index_html', RedirecionaMesaDiretoraView.as_view(), name='redireciona_mesa_diretora'), - url(r'^consultas/mesa_diretora/parlamentar/parlamentar_', + re_path(r'^consultas/mesa_diretora/parlamentar/parlamentar_', RedirecionaParlamentar.as_view(), name='redireciona_mesa_diretora_parlamentar'), - url(r'^consultas/sessao_plenaria/', + re_path(r'^consultas/sessao_plenaria/', RedirecionaSessaoPlenaria.as_view(), name='redireciona_sessao_plenaria_'), - url(r'^generico/norma_juridica_pesquisar_', + re_path(r'^generico/norma_juridica_pesquisar_', RedirecionaNormasJuridicasList.as_view(), name='redireciona_norma_juridica_pesquisa'), - url(r'^consultas/norma_juridica/norma_juridica_mostrar_proc', + re_path(r'^consultas/norma_juridica/norma_juridica_mostrar_proc', RedirecionaNormasJuridicasDetail.as_view(), name='redireciona_norma_juridica_detail'), - url(r'^sapl_documentos/norma_juridica/(?P[0-9]+)_texto_integral', + re_path(r'^sapl_documentos/norma_juridica/(?P[0-9]+)_texto_integral', RedirecionaNormasJuridicasTextoIntegral.as_view(), name='redireciona_norma_juridica_texto_integral'), - url(r'^relatorios_administrativos/relatorios_administrativos_index_html$', + path('relatorios_administrativos/relatorios_administrativos_index_html', RedirecionaRelatoriosList.as_view(), name='redireciona_relatorios_list'), - url(r'tramitacaoMaterias/tramitacaoMaterias', + re_path(r'tramitacaoMaterias/tramitacaoMaterias', RedirecionaRelatoriosMateriasEmTramitacaoList.as_view(), name='redireciona_relatorio_materia_por_tramitacao'), - url(r'tramitacaoMaterias/materia_mostrar_proc$', + path('tramitacaoMaterias/materia_mostrar_proc', RedirecionaMateriaLegislativaDetail.as_view(), name='redireciona_materialegislativa_detail_tramitacao'), - url(r'consultas/materia/materia_mostrar_proc$', + path('consultas/materia/materia_mostrar_proc', RedirecionaMateriaLegislativaDetail.as_view(), name='redireciona_materialegislativa_detail'), - url(r'^generico/materia_pesquisar_', + re_path(r'^generico/materia_pesquisar_', RedirecionaMateriaLegislativaList.as_view(), name='redireciona_materialegislativa_list'), - url(r'historicoTramitacoes/historicoTramitacoes', + re_path(r'historicoTramitacoes/historicoTramitacoes', RedirecionaHistoricoTramitacoesList.as_view(), name='redireciona_historico_tramitacoes'), - url(r'atasSessao', + re_path(r'atasSessao', RedirecionaAtasList.as_view(), name='redireciona_atas_list'), - url(r'presencaSessao', + re_path(r'presencaSessao', RedirecionaPresencaParlamentares.as_view(), name='redireciona_presencaparlamentar_list'), - url(r'resumoPropositurasAutor', + re_path(r'resumoPropositurasAutor', RedirecionaMateriasPorAutor.as_view(), name='redireciona_materias_por_autor_list'), - url(r'propositurasAnoAutorTipo', + re_path(r'propositurasAnoAutorTipo', RedirecionaMateriasPorAnoAutorTipo.as_view(), name='redireciona_materia_por_ano_autor_tipo_list'), ] \ No newline at end of file diff --git a/sapl/relatorios/__init__.py b/sapl/relatorios/__init__.py index 6f40d706f..e69de29bb 100644 --- a/sapl/relatorios/__init__.py +++ b/sapl/relatorios/__init__.py @@ -1 +0,0 @@ -default_app_config = 'relatorios.apps.AppConfig' diff --git a/sapl/relatorios/apps.py b/sapl/relatorios/apps.py index 9e560eb1c..5a4fe84be 100644 --- a/sapl/relatorios/apps.py +++ b/sapl/relatorios/apps.py @@ -1,5 +1,5 @@ from django import apps -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/relatorios/forms.py b/sapl/relatorios/forms.py index 59eb2d741..9dbadf928 100644 --- a/sapl/relatorios/forms.py +++ b/sapl/relatorios/forms.py @@ -3,7 +3,7 @@ from crispy_forms.bootstrap import (FormActions) from crispy_forms.layout import (HTML, Button, Fieldset, Layout, Submit) from django import forms -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from sapl.audiencia.models import AudienciaPublica from sapl.base.models import Autor diff --git a/sapl/relatorios/urls.py b/sapl/relatorios/urls.py index b27bfc55a..f6287de8c 100644 --- a/sapl/relatorios/urls.py +++ b/sapl/relatorios/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import path from .apps import AppConfig from .views import (relatorio_capa_processo, @@ -17,84 +17,84 @@ from ..base.views import EstatisticasAcessoNormas app_name = AppConfig.name urlpatterns = [ - url(r'^relatorios/materia$', relatorio_materia, name='relatorio_materia'), - url(r'^relatorios/capa-processo$', + path('relatorios/materia', relatorio_materia, name='relatorio_materia'), + path('relatorios/capa-processo', relatorio_capa_processo, name='relatorio_capa_processo'), - url(r'^relatorios/ordem-dia$', relatorio_ordem_dia, + path('relatorios/ordem-dia', relatorio_ordem_dia, name='relatorio_ordem_dia'), - url(r'^relatorios/relatorio-documento-administrativo$', + path('relatorios/relatorio-documento-administrativo', relatorio_documento_administrativo, name='relatorio_documento_administrativo'), - url(r'^relatorios/espelho$', relatorio_espelho, + path('relatorios/espelho', relatorio_espelho, name='relatorio_espelho'), # Url utilizada no arquivo: templates/sessao/pauta_sessao_list.html - url(r'^relatorios/(?P\d+)/sessao-plenaria$', + path('relatorios//sessao-plenaria', relatorio_sessao_plenaria, name='relatorio_sessao_plenaria'), - url(r'^relatorios/protocolo$', + path('relatorios/protocolo', relatorio_protocolo, name='relatorio_protocolo'), - url(r'^relatorios/(?P\d+)/(?P\d+)/etiqueta-protocolo$', + path('relatorios///etiqueta-protocolo', relatorio_etiqueta_protocolo, name='relatorio_etiqueta_protocolo'), # # Url utilizada no arquivo: templates/sessao/pauta_sessao_filter.html # url(r'^relatorios/pauta-sessao/(?P\d+)/$', # relatorio_pauta_sessao, name='relatorio_pauta_sessao'), - url(r'^relatorios/(?P\d+)/resumo_ata$', + path('relatorios//resumo_ata', resumo_ata_pdf, name='resumo_ata_pdf'), - url(r'^relatorios/(?P\d+)/sessao-plenaria-pdf$', + path('relatorios//sessao-plenaria-pdf', relatorio_sessao_plenaria_pdf, name='relatorio_sessao_plenaria_pdf'), - url(r'^relatorios/(?P\d+)/etiqueta-materia-legislativa$', + path('relatorios//etiqueta-materia-legislativa', etiqueta_materia_legislativa, name='etiqueta_materia_legislativa'), - url(r'^relatorios/(?P\d+)/materia-tramitacao$', + path('relatorios//materia-tramitacao', relatorio_materia_tramitacao, name='relatorio_materia_tramitacao'), # TODO mover estas telas para a app 'relatorios' - url(r'^sistema/relatorios/$', + path('sistema/relatorios/', RelatoriosListView.as_view(), name='relatorios_list'), - url(r'^sistema/relatorios/materia-por-autor$', + path('sistema/relatorios/materia-por-autor', RelatorioMateriasPorAutorView.as_view(), name='materia_por_autor'), - url(r'^sistema/relatorios/relatorio-por-mes$', + path('sistema/relatorios/relatorio-por-mes', RelatorioNormasPublicadasMesView.as_view(), name='normas_por_mes'), - url(r'^sistema/relatorios/relatorio-por-vigencia$', + path('sistema/relatorios/relatorio-por-vigencia', RelatorioNormasVigenciaView.as_view(), name='normas_por_vigencia'), - url(r'^sistema/relatorios/estatisticas-acesso$', + path('sistema/relatorios/estatisticas-acesso', EstatisticasAcessoNormas.as_view(), name='estatisticas_acesso'), - url(r'^sistema/relatorios/materia-por-ano-autor-tipo$', + path('sistema/relatorios/materia-por-ano-autor-tipo', RelatorioMateriasPorAnoAutorTipoView.as_view(), name='materia_por_ano_autor_tipo'), - url(r'^sistema/relatorios/materia-por-tramitacao$', + path('sistema/relatorios/materia-por-tramitacao', RelatorioMateriasTramitacaoView.as_view(), name='materia_por_tramitacao'), - url(r'^sistema/relatorios/materia-por-assunto$', + path('sistema/relatorios/materia-por-assunto', RelatorioMateriaAnoAssuntoView.as_view(), name='materia_por_ano_assunto'), - url(r'^sistema/relatorios/historico-tramitacoes$', + path('sistema/relatorios/historico-tramitacoes', RelatorioHistoricoTramitacaoView.as_view(), name='historico_tramitacoes'), - url(r'^sistema/relatorios/data-fim-prazo-tramitacoes$', + path('sistema/relatorios/data-fim-prazo-tramitacoes', RelatorioDataFimPrazoTramitacaoView.as_view(), name='data_fim_prazo_tramitacoes'), - url(r'^sistema/relatorios/presenca$', + path('sistema/relatorios/presenca', RelatorioPresencaSessaoView.as_view(), name='presenca_sessao'), - url(r'^sistema/relatorios/atas$', + path('sistema/relatorios/atas', RelatorioAtasView.as_view(), name='atas'), - url(r'^sistema/relatorios/reuniao$', + path('sistema/relatorios/reuniao', RelatorioReuniaoView.as_view(), name='reuniao'), - url(r'^sistema/relatorios/audiencia$', + path('sistema/relatorios/audiencia', RelatorioAudienciaView.as_view(), name='audiencia'), - url(r'^sistema/relatorios/historico-tramitacoesadm$', + path('sistema/relatorios/historico-tramitacoesadm', RelatorioHistoricoTramitacaoAdmView.as_view(), name='historico_tramitacoes_adm'), - url(r'^sistema/relatorios/documentos_acessorios$', + path('sistema/relatorios/documentos_acessorios', RelatorioDocumentosAcessoriosView.as_view(), name='relatorio_documentos_acessorios'), - url(r'^sistema/relatorios/normas-por-autor$', + path('sistema/relatorios/normas-por-autor', RelatorioNormasPorAutorView.as_view(), name='normas_por_autor'), ] \ No newline at end of file diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index ad7e794c6..5fe054557 100755 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -10,7 +10,7 @@ from django.db.models import Count, Q, F from django.http import Http404, HttpResponse from django.template.loader import render_to_string from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.views.generic import TemplateView, ListView from django_filters.views import FilterView from weasyprint import HTML, CSS diff --git a/sapl/rules/__init__.py b/sapl/rules/__init__.py index 7984f6ef5..d8206040b 100644 --- a/sapl/rules/__init__.py +++ b/sapl/rules/__init__.py @@ -1,6 +1,5 @@ -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ -default_app_config = 'sapl.rules.apps.AppConfig' """ Todas as permissões do django framework seguem o padrão diff --git a/sapl/rules/apps.py b/sapl/rules/apps.py index cdaa71516..2c1b5e067 100644 --- a/sapl/rules/apps.py +++ b/sapl/rules/apps.py @@ -8,7 +8,7 @@ from django.contrib.auth.management import _get_all_permissions from django.core import exceptions from django.db import models, router from django.db.utils import DEFAULT_DB_ALIAS -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from sapl.rules import (SAPL_GROUP_ADMINISTRATIVO, SAPL_GROUP_COMISSOES, SAPL_GROUP_GERAL, SAPL_GROUP_MATERIA, SAPL_GROUP_NORMA, diff --git a/sapl/rules/tests/test_rules.py b/sapl/rules/tests/test_rules.py index 75baaacc9..24d1bd413 100644 --- a/sapl/rules/tests/test_rules.py +++ b/sapl/rules/tests/test_rules.py @@ -2,8 +2,8 @@ from django.apps import apps from django.conf import settings from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType -from django.utils import six -from django.utils.translation import ugettext_lazy as _ +import six +from django.utils.translation import gettext_lazy as _ import pytest from sapl.base.models import CasaLegislativa diff --git a/sapl/sessao/__init__.py b/sapl/sessao/__init__.py index c8f1364d5..e69de29bb 100644 --- a/sapl/sessao/__init__.py +++ b/sapl/sessao/__init__.py @@ -1 +0,0 @@ -default_app_config = 'sapl.sessao.apps.AppConfig' diff --git a/sapl/sessao/apps.py b/sapl/sessao/apps.py index 281847b56..7d5b2243b 100644 --- a/sapl/sessao/apps.py +++ b/sapl/sessao/apps.py @@ -1,5 +1,5 @@ from django import apps -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AppConfig(apps.AppConfig): diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py index 73ac911f0..2cbad7c0a 100644 --- a/sapl/sessao/forms.py +++ b/sapl/sessao/forms.py @@ -10,7 +10,7 @@ from django.db import transaction from django.db.models import Q from django.forms import ModelForm from django.forms.widgets import CheckboxSelectMultiple -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import django_filters from sapl.base.models import Autor, TipoAutor diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py index 55fe581a1..83c3c23f7 100644 --- a/sapl/sessao/models.py +++ b/sapl/sessao/models.py @@ -4,7 +4,7 @@ from django.core.exceptions import ValidationError from django.db import models from django.db.models import Q, F from django.utils import timezone, formats -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from model_utils import Choices from sapl.base.models import Autor diff --git a/sapl/sessao/tests/test_sessao.py b/sapl/sessao/tests/test_sessao.py index 0f42465e5..dee33f3cc 100644 --- a/sapl/sessao/tests/test_sessao.py +++ b/sapl/sessao/tests/test_sessao.py @@ -1,7 +1,7 @@ import pytest from datetime import datetime from django.core.exceptions import ValidationError -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from model_bakery import baker from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa diff --git a/sapl/sessao/tests/test_sessao_view.py b/sapl/sessao/tests/test_sessao_view.py index 00284465b..05a4ba8e0 100644 --- a/sapl/sessao/tests/test_sessao_view.py +++ b/sapl/sessao/tests/test_sessao_view.py @@ -1,6 +1,6 @@ import pytest from django.urls import reverse -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from model_bakery import baker from sapl.parlamentares.models import Legislatura, SessaoLegislativa diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index 05e19a844..286d01394 100644 --- a/sapl/sessao/urls.py +++ b/sapl/sessao/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, url +from django.urls import include, path, re_path from sapl.sessao.views import (AdicionarVariasMateriasExpediente, AdicionarVariasMateriasOrdemDia, BancadaCrud, @@ -48,7 +48,7 @@ app_name = AppConfig.name urlpatterns = [ - url(r'^sessao/', include(SessaoCrud.get_urls() + OradorCrud.get_urls() + + path('sessao/', include(SessaoCrud.get_urls() + OradorCrud.get_urls() + OradorExpedienteCrud.get_urls() + ExpedienteMateriaCrud.get_urls() + JustificativaAusenciaCrud.get_urls() + @@ -59,172 +59,172 @@ urlpatterns = [ )), - url(r'^sessao/(?P\d+)/correspondencia-em-lote', CorrespondenciaEmLoteView.as_view(), + re_path(r'^sessao/(?P\d+)/correspondencia-em-lote', CorrespondenciaEmLoteView.as_view(), name='correspondencia_em_lote'), - url(r'^sessao/(?P\d+)/mesa$', MesaView.as_view(), name='mesa'), + path('sessao//mesa', MesaView.as_view(), name='mesa'), - url(r'^sessao/mesa/atualizar-mesa/$', + path('sessao/mesa/atualizar-mesa/', atualizar_mesa, name='atualizar_mesa'), - url(r'^sessao/mesa/insere-parlamentar/composicao/$', + path('sessao/mesa/insere-parlamentar/composicao/', insere_parlamentar_composicao, name='insere_parlamentar_composicao'), - url(r'^sessao/mesa/remove-parlamentar-composicao/$', + path('sessao/mesa/remove-parlamentar-composicao/', remove_parlamentar_composicao, name='remove_parlamentar_composicao'), - url(r'^sessao/recuperar-documento/', recuperar_documento), - url(r'^sessao/recuperar-materia/', recuperar_materia), - url(r'^sessao/recuperar-tramitacao/', recuperar_tramitacao), - url(r'^sessao/recuperar-numero-sessao/', + re_path(r'^sessao/recuperar-documento/', recuperar_documento), + re_path(r'^sessao/recuperar-materia/', recuperar_materia), + re_path(r'^sessao/recuperar-tramitacao/', recuperar_tramitacao), + re_path(r'^sessao/recuperar-numero-sessao/', recuperar_numero_sessao_view, name='recuperar_numero_sessao_view' ), - url(r'^sessao/recuperar-nome-tipo-sessao/', + re_path(r'^sessao/recuperar-nome-tipo-sessao/', recuperar_nome_tipo_sessao, name='recuperar_nome_tipo_sessao'), - url(r'^sessao/sessao-legislativa-legislatura-ajax/', + re_path(r'^sessao/sessao-legislativa-legislatura-ajax/', sessao_legislativa_legislatura_ajax, name='sessao_legislativa_legislatura_ajax_view'), - url(r'^sessao/filtra-materias-copia-sessao-ajax/', + re_path(r'^sessao/filtra-materias-copia-sessao-ajax/', filtra_materias_copia_sessao_ajax, name='filtra_materias_copia_sessao_ajax_view'), - url(r'^sessao/verifica-materia-sessao-plenaria-ajax/', + re_path(r'^sessao/verifica-materia-sessao-plenaria-ajax/', verifica_materia_sessao_plenaria_ajax, name='verifica_materia_sessao_plenaria_ajax_view'), - url(r'^sessao/(?P\d+)/(?P\d+)/abrir-votacao$', + path('sessao///abrir-votacao', abrir_votacao, name="abrir_votacao"), - url(r'^sessao/(?P\d+)/reordena/(?P[\w\-]+)/(?P\d+)/$', + re_path(r'^sessao/(?P\d+)/reordena/(?P[\w\-]+)/(?P\d+)/$', reordena_materias, name="reordena_materias"), - url(r'^sistema/sessao-plenaria/tipo/', + path('sistema/sessao-plenaria/tipo/', include(TipoSessaoCrud.get_urls())), - url(r'^sistema/sessao-plenaria/tipo-resultado-votacao/', + path('sistema/sessao-plenaria/tipo-resultado-votacao/', include(TipoResultadoVotacaoCrud.get_urls())), - url(r'^sistema/sessao-plenaria/tipo-expediente/', + path('sistema/sessao-plenaria/tipo-expediente/', include(TipoExpedienteCrud.get_urls())), - url(r'^sistema/sessao-plenaria/tipo-justificativa/', + path('sistema/sessao-plenaria/tipo-justificativa/', include(TipoJustificativaCrud.get_urls())), - url(r'^sistema/sessao-plenaria/tipo-retirada-pauta/', + path('sistema/sessao-plenaria/tipo-retirada-pauta/', include(TipoRetiradaPautaCrud.get_urls())), - url(r'^sistema/bancada/', + path('sistema/bancada/', include(BancadaCrud.get_urls())), - url(r'^sistema/cargo-bancada/', + path('sistema/cargo-bancada/', include(CargoBancadaCrud.get_urls())), - url(r'^sistema/resumo-ordenacao/', + re_path(r'^sistema/resumo-ordenacao/', ResumoOrdenacaoView.as_view(), name='resumo_ordenacao'), - url(r'^sessao/(?P\d+)/adicionar-varias-materias-expediente/', + re_path(r'^sessao/(?P\d+)/adicionar-varias-materias-expediente/', AdicionarVariasMateriasExpediente.as_view(), name='adicionar_varias_materias_expediente'), - url(r'^sessao/(?P\d+)/adicionar-varias-materias-ordem-dia/', + re_path(r'^sessao/(?P\d+)/adicionar-varias-materias-ordem-dia/', AdicionarVariasMateriasOrdemDia.as_view(), name='adicionar_varias_materias_ordem_dia'), # PAUTA SESSÃO - url(r'^sessao/pauta-sessao$', + path('sessao/pauta-sessao', PautaSessaoView.as_view(), name='pauta_sessao'), - url(r'^sessao/pauta-sessao/pesquisar-pauta$', + path('sessao/pauta-sessao/pesquisar-pauta', PesquisarPautaSessaoView.as_view(), name='pesquisar_pauta'), - url(r'^sessao/pauta-sessao/(?P\d+)/(?:pdf)?$', + re_path(r'^sessao/pauta-sessao/(?P\d+)/(?:pdf)?$', PautaSessaoDetailView.as_view(), name='pauta_sessao_detail'), # Subnav sessão - url(r'^sessao/(?P\d+)/expediente$', + path('sessao//expediente', ExpedienteView.as_view(), name='expediente'), - url(r'^sessao/(?P\d+)/ocorrencia_sessao$', + path('sessao//ocorrencia_sessao', OcorrenciaSessaoView.as_view(), name='ocorrencia_sessao'), - url(r'^sessao/(?P\d+)/consideracoes_finais$', + path('sessao//consideracoes_finais', ConsideracoesFinaisView.as_view(), name='consideracoes_finais'), - url(r'^sessao/(?P\d+)/presenca$', + path('sessao//presenca', PresencaView.as_view(), name='presenca'), - url(r'^sessao/(?P\d+)/painel$', + path('sessao//painel', PainelView.as_view(), name='painel'), - url(r'^sessao/(?P\d+)/presencaordemdia$', + path('sessao//presencaordemdia', PresencaOrdemDiaView.as_view(), name='presencaordemdia'), - url(r'^sessao/(?P\d+)/votacao_bloco_ordemdia$', + path('sessao//votacao_bloco_ordemdia', VotacaoEmBlocoOrdemDia.as_view(), name='votacao_bloco_ordemdia'), - url(r'^sessao/(?P\d+)/votacao_bloco/votnom$', + path('sessao//votacao_bloco/votnom', VotacaoEmBlocoNominalView.as_view(), name='votacaobloconom'), - url(r'^sessao/(?P\d+)/votacao_bloco/votsimb$', + path('sessao//votacao_bloco/votsimb', VotacaoEmBlocoSimbolicaView.as_view(), name='votacaoblocosimb'), - url(r'^sessao/(?P\d+)/votacao_bloco_expediente$', + path('sessao//votacao_bloco_expediente', VotacaoEmBlocoExpediente.as_view(), name='votacao_bloco_expediente'), - url(r'^sessao/(?P\d+)/leitura_bloco_expediente$', + path('sessao//leitura_bloco_expediente', LeituraEmBlocoExpediente.as_view(), name='leitura_bloco_expediente'), - url(r'^sessao/(?P\d+)/leitura_bloco_ordem_dia$', + path('sessao//leitura_bloco_ordem_dia', LeituraEmBlocoOrdemDia.as_view(), name='leitura_bloco_ordem_dia'), - url(r'^sessao/(?P\d+)/resumo$', + path('sessao//resumo', ResumoView.as_view(), name='resumo'), - url(r'^sessao/(?P\d+)/resumo_ata$', + path('sessao//resumo_ata', ResumoAtaView.as_view(), name='resumo_ata'), - url(r'^sessao/pesquisar-sessao$', + path('sessao/pesquisar-sessao', PesquisarSessaoPlenariaView.as_view(), name='pesquisar_sessao'), - url(r'^sessao/(?P\d+)/matordemdia/votnom/(?P\d+)/(?P\d+)$', + path('sessao//matordemdia/votnom//', VotacaoNominalView.as_view(), name='votacaonominal'), - url(r'^sessao/(?P\d+)/matordemdia/votnom/edit/(?P\d+)/(?P\d+)$', + path('sessao//matordemdia/votnom/edit//', VotacaoNominalEditView.as_view(), name='votacaonominaledit'), - url(r'^sessao/(?P\d+)/matordemdia/votsec/(?P\d+)/(?P\d+)$', + path('sessao//matordemdia/votsec//', VotacaoView.as_view(), name='votacaosecreta'), - url(r'^sessao/(?P\d+)/matordemdia/votsec/view/(?P\d+)/(?P\d+)$', + path('sessao//matordemdia/votsec/view//', VotacaoEditView.as_view(), name='votacaosecretaedit'), - url(r'^sessao/(?P\d+)/matordemdia/votsimb/(?P\d+)/(?P\d+)$', + path('sessao//matordemdia/votsimb//', VotacaoView.as_view(), name='votacaosimbolica'), - url(r'^sessao/(?P\d+)/matordemdia/votsimbbloco/$', + path('sessao//matordemdia/votsimbbloco/', VotacaoView.as_view(), name='votacaosimbolicabloco'), - url(r'^sessao/(?P\d+)/matordemdia/votsimb/view/(?P\d+)/(?P\d+)$', + path('sessao//matordemdia/votsimb/view//', VotacaoEditView.as_view(), name='votacaosimbolicaedit'), - url(r'^sessao/(?P\d+)/matexp/votnom/(?P\d+)/(?P\d+)$', + path('sessao//matexp/votnom//', VotacaoNominalExpedienteView.as_view(), name='votacaonominalexp'), - url(r'^sessao/(?P\d+)/matexp/votnom/edit/(?P\d+)/(?P\d+)$', + path('sessao//matexp/votnom/edit//', VotacaoNominalExpedienteEditView.as_view(), name='votacaonominalexpedit'), - url(r'^sessao/(?P\d+)/matexp/votnom/detail/(?P\d+)/(?P\d+)$', + path('sessao//matexp/votnom/detail//', VotacaoNominalExpedienteDetailView.as_view(), name='votacaonominalexpdetail'), - url(r'^sessao/(?P\d+)/matexp/votsimb/(?P\d+)/(?P\d+)$', + path('sessao//matexp/votsimb//', VotacaoExpedienteView.as_view(), name='votacaosimbolicaexp'), - url(r'^sessao/(?P\d+)/matexp/votsimb/view/(?P\d+)/(?P\d+)$', + path('sessao//matexp/votsimb/view//', VotacaoExpedienteEditView.as_view(), name='votacaosimbolicaexpedit'), - url(r'^sessao/(?P\d+)/matexp/votsec/(?P\d+)/(?P\d+)$', + path('sessao//matexp/votsec//', VotacaoExpedienteView.as_view(), name='votacaosecretaexp'), - url(r'^sessao/(?P\d+)/matexp/votsec/view/(?P\d+)/(?P\d+)$', + path('sessao//matexp/votsec/view//', VotacaoExpedienteEditView.as_view(), name='votacaosecretaexpedit'), - url(r'^sessao/(?P\d+)/votacao-nominal-transparencia/(?P\d+)/(?P\d+)$', + path('sessao//votacao-nominal-transparencia//', VotacaoNominalTransparenciaDetailView.as_view(), name='votacao_nominal_transparencia'), - url(r'^sessao/(?P\d+)/votacao-simbolica-transparencia/(?P\d+)/(?P\d+)$', + path('sessao//votacao-simbolica-transparencia//', VotacaoSimbolicaTransparenciaDetailView.as_view(), name='votacao_simbolica_transparencia'), - url(r'^sessao/mudar-ordem-materia-sessao/', + re_path(r'^sessao/mudar-ordem-materia-sessao/', mudar_ordem_materia_sessao, name='mudar_ordem_materia_sessao'), - url(r'^sessao/(?P\d+)/matexp/leitura/(?P\d+)/(?P\d+)$', + path('sessao//matexp/leitura//', ExpedienteLeituraView.as_view(), name='leituraexp'), - url(r'^sessao/(?P\d+)/matordemdia/leitura/(?P\d+)/(?P\d+)$', + path('sessao//matordemdia/leitura//', OrdemDiaLeituraView.as_view(), name='leituraod'), - url(r'^sessao/(?P\d+)/(?P\d+)/(?P\d+)/retirar-leitura$', + path('sessao////retirar-leitura', retirar_leitura, name='retirar_leitura'), - url(r'^sessao/(?P\d+)/transf-mat-exp$', + path('sessao//transf-mat-exp', TransferenciaMateriasExpediente.as_view(), name="transf_mat_exp"), - url(r'^sessao/(?P\d+)/transf-mat-ordemdia$', + path('sessao//transf-mat-ordemdia', TransferenciaMateriasOrdemDia.as_view(), name="transf_mat_ordemdia"), ] diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 84cb755e5..90df7de0f 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -17,9 +17,9 @@ from django.urls.base import reverse_lazy from django.utils import timezone from django.utils.datastructures import MultiValueDictKeyError from django.utils.decorators import method_decorator -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.html import strip_tags -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.views.decorators.csrf import csrf_exempt from django.views.generic import (FormView, ListView, TemplateView) from django.views.generic.base import RedirectView @@ -4024,7 +4024,7 @@ class PesquisarSessaoPlenariaView(MultiFormatOutputMixin, FilterView): return kwargs def hook_header_(self): - return force_text(_('Título')) + return force_str(_('Título')) def hook_(self, obj): return str(obj) @@ -5298,7 +5298,7 @@ class CorrespondenciaCrud(MasterDetailCrud): return qs def hook_header_numero_ordem(self, *args, **kwargs): - return force_text(_('Ordem / Tipo')) if not self.request.user.is_anonymous else force_text(_('Tipo')) + return force_str(_('Ordem / Tipo')) if not self.request.user.is_anonymous else force_str(_('Tipo')) def hook_numero_ordem(self, obj, ss, url): if not self.request.user.is_anonymous: diff --git a/sapl/settings.py b/sapl/settings.py index 4b749790b..4da82d0c4 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -31,6 +31,8 @@ host = socket.gethostbyname_ex(socket.gethostname())[0] BASE_DIR = Path(__file__).ancestor(1) PROJECT_DIR = Path(__file__).ancestor(2) +DEFAULT_AUTO_FIELD = "django.db.models.AutoField" + # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = config('SECRET_KEY', default='32jk1h412l3kjh421lkj4hlkj234') # SECURITY WARNING: don't run with debug turned on in production! @@ -331,29 +333,6 @@ USE_I18N = True USE_L10N = True USE_TZ = True - -## -## Monkey patch of the Django 2.2 because latest version of psycopg2 returns DB time zone as UTC, -## but Django 2.2 requires an int! This should be removed once we are able to upgrade to Django >= 4 -## -import importlib -from django.utils.timezone import utc - -pg_utils = importlib.import_module("django.db.backends.postgresql.utils") - - -def _compat_utc_tzinfo_factory(offset): - try: - minutes = int(offset.total_seconds() // 60) if hasattr(offset, "total_seconds") else int(offset) - except Exception: - raise AssertionError("database connection isn't set to UTC") - if minutes != 0: - raise AssertionError("database connection isn't set to UTC") - return utc - - -pg_utils.utc_tzinfo_factory = _compat_utc_tzinfo_factory - # DATE_FORMAT = 'N j, Y' DATE_FORMAT = 'd/m/Y' SHORT_DATE_FORMAT = 'd/m/Y' diff --git a/sapl/templates/base.html b/sapl/templates/base.html index ec04b7742..1e97bada0 100644 --- a/sapl/templates/base.html +++ b/sapl/templates/base.html @@ -1,5 +1,5 @@ -{% load i18n staticfiles menus %} +{% load i18n static menus %} {% load common_tags %} {% load waffle_tags %} {% load render_bundle from webpack_loader %} diff --git a/sapl/templates/base/auditlog_filter.html b/sapl/templates/base/auditlog_filter.html index ef4b7ef77..25b4adafd 100644 --- a/sapl/templates/base/auditlog_filter.html +++ b/sapl/templates/base/auditlog_filter.html @@ -1,7 +1,7 @@ {% extends "crud/list.html" %} {% load i18n common_tags %} {% load tz %} -{% load crispy_forms_tags staticfiles %} +{% load crispy_forms_tags static %} {% block head_extra_css %} created { diff --git a/sapl/templates/materia/statustramitacao_filter.html b/sapl/templates/materia/statustramitacao_filter.html index 5b93f3ee0..2f6466d7e 100644 --- a/sapl/templates/materia/statustramitacao_filter.html +++ b/sapl/templates/materia/statustramitacao_filter.html @@ -1,6 +1,6 @@ {% extends "crud/list.html" %} {% load i18n %} -{% load crispy_forms_tags staticfiles %} +{% load crispy_forms_tags static %} {% block base_content %} {% if not show_results %} diff --git a/sapl/templates/norma/assuntonorma_filter.html b/sapl/templates/norma/assuntonorma_filter.html index 3b8599d8a..6a0cc0e88 100644 --- a/sapl/templates/norma/assuntonorma_filter.html +++ b/sapl/templates/norma/assuntonorma_filter.html @@ -1,6 +1,6 @@ {% extends "crud/list.html" %} {% load i18n %} -{% load crispy_forms_tags staticfiles %} +{% load crispy_forms_tags static %} {% block base_content %} {% if not show_results %} diff --git a/sapl/templates/parlamentares/coligacao_filter.html b/sapl/templates/parlamentares/coligacao_filter.html index ba3a82c33..43ac210e7 100644 --- a/sapl/templates/parlamentares/coligacao_filter.html +++ b/sapl/templates/parlamentares/coligacao_filter.html @@ -1,6 +1,6 @@ {% extends "crud/list.html" %} {% load i18n %} -{% load crispy_forms_tags staticfiles %} +{% load crispy_forms_tags static %} {% block base_content %} {% if not show_results %} diff --git a/sapl/templates/parlamentares/parlamentar_filter.html b/sapl/templates/parlamentares/parlamentar_filter.html index dd6af7034..72708129b 100644 --- a/sapl/templates/parlamentares/parlamentar_filter.html +++ b/sapl/templates/parlamentares/parlamentar_filter.html @@ -1,6 +1,6 @@ {% extends "crud/list.html" %} {% load i18n %} -{% load crispy_forms_tags staticfiles %} +{% load crispy_forms_tags static %} {% block base_content %} {% if not show_results %} diff --git a/sapl/templates/parlamentares/partido_filter.html b/sapl/templates/parlamentares/partido_filter.html index 963e151e4..606bf6bd3 100644 --- a/sapl/templates/parlamentares/partido_filter.html +++ b/sapl/templates/parlamentares/partido_filter.html @@ -1,6 +1,6 @@ {% extends "crud/list.html" %} {% load i18n %} -{% load crispy_forms_tags staticfiles %} +{% load crispy_forms_tags static %} {% block base_content %} {% if not show_results %} diff --git a/sapl/templates/relatorios/RelatorioAtas_filter.html b/sapl/templates/relatorios/RelatorioAtas_filter.html index fa91bb73d..aadfc1d3a 100644 --- a/sapl/templates/relatorios/RelatorioAtas_filter.html +++ b/sapl/templates/relatorios/RelatorioAtas_filter.html @@ -1,6 +1,6 @@ {% extends "crud/list.html" %} {% load i18n %} -{% load crispy_forms_tags staticfiles %} +{% load crispy_forms_tags static %} {% load webpack_static from webpack_loader %} {% block base_content %} diff --git a/sapl/templates/relatorios/relatorio_doc_administrativos.html b/sapl/templates/relatorios/relatorio_doc_administrativos.html index 5ba5b5a80..9c67cc5b4 100644 --- a/sapl/templates/relatorios/relatorio_doc_administrativos.html +++ b/sapl/templates/relatorios/relatorio_doc_administrativos.html @@ -1,7 +1,7 @@ {% extends "relatorios/base_relatorio.html" %} {% load i18n %} {% load common_tags %} -{% load crispy_forms_tags staticfiles %} +{% load crispy_forms_tags static %} {% block content %}

Documentos Administrativos

diff --git a/sapl/templates/sessao/painel.html b/sapl/templates/sessao/painel.html index 44f345a75..2a61038f8 100644 --- a/sapl/templates/sessao/painel.html +++ b/sapl/templates/sessao/painel.html @@ -1,6 +1,6 @@ {% extends "crud/detail.html" %} {% load i18n %} -{% load staticfiles %} +{% load static %} {% load webpack_static from webpack_loader %} {% block actions %} {% endblock %} diff --git a/sapl/templates/sessao/pauta_sessao_list.html b/sapl/templates/sessao/pauta_sessao_list.html index 535efdcc2..9e0b53fc2 100644 --- a/sapl/templates/sessao/pauta_sessao_list.html +++ b/sapl/templates/sessao/pauta_sessao_list.html @@ -1,5 +1,5 @@ {% extends "base.html" %} -{% load i18n staticfiles %} +{% load i18n static %} {% load webpack_static from webpack_loader %} {% block base_content %} diff --git a/sapl/templates/widgets/image_thumbnail.html b/sapl/templates/widgets/image_thumbnail.html index 154c1a7b2..b31f19403 100644 --- a/sapl/templates/widgets/image_thumbnail.html +++ b/sapl/templates/widgets/image_thumbnail.html @@ -1,4 +1,4 @@ -{% load i18n staticfiles thumbnail %} +{% load i18n static thumbnail %} {% load webpack_static from webpack_loader %}
.*)$', view_static_server, { + re_path(r'^media/(?P.*)$', view_static_server, { 'document_root': settings.MEDIA_ROOT, }), ] diff --git a/sapl/utils.py b/sapl/utils.py index 09a334f72..c39d02de8 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -35,9 +35,10 @@ from django.db.models.fields.related import ForeignKey from django.forms import BaseForm from django.forms.widgets import SplitDateTimeWidget, ClearableFileInput from django.http.response import JsonResponse, HttpResponse -from django.utils import six, timezone +import six +from django.utils import timezone from django.utils.safestring import mark_safe -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ import django_filters from easy_thumbnails import source_generators import magic @@ -403,7 +404,7 @@ def xstr(s): def get_client_ip(request): - x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') + x_forwarded_for = request.headers.get('x-forwarded-for') if x_forwarded_for: ip = x_forwarded_for.split(',')[0] else: