Browse Source

Merge e1acbff5f6 into 6c65c5aad4

pull/3415/merge
Alvaro Gouvea 4 years ago
committed by GitHub
parent
commit
e6519805c2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 30
      sapl/api/test_api.py
  2. 4
      sapl/api/urls.py
  3. 57
      sapl/api/views.py

30
sapl/api/test_api.py

@ -0,0 +1,30 @@
from model_bakery import baker
import pytest
import json
from sapl.parlamentares.models import Legislatura, ComposicaoMesa, Parlamentar,\
SessaoLegislativa, CargoMesa
from django.urls import reverse
from sapl.api import views
@pytest.mark.django_db(transaction=False)
def test_get_mesa_diretora(admin_client):
#criar legislatura, sessao e parlamentares
parlamentar = baker.make(Parlamentar, nome_parlamentar='Joseph Joestar', id=8, fotografia=None)
legislatura = baker.make(Legislatura, id=34)
sessao = baker.make(SessaoLegislativa, legislatura=legislatura, id=44)
cargo = baker.make(CargoMesa, descricao="presidente")
#passar informações para a composicao_mesa
mesa = baker.make(ComposicaoMesa, parlamentar=parlamentar,
sessao_legislativa=sessao, cargo=cargo)
#Verifica se a mesa foi criada
mesa_diretora = ComposicaoMesa.objects.get(sessao_legislativa=sessao, parlamentar=parlamentar)
#Testa o POST
jresponse = admin_client.post(reverse('sapl.api:get_mesa_diretora'))
assert jresponse.status_code == 200

4
sapl/api/urls.py

@ -6,7 +6,7 @@ from rest_framework.routers import DefaultRouter
from sapl.api.deprecated import MateriaLegislativaViewSet, SessaoPlenariaViewSet,\
AutoresProvaveisListView, AutoresPossiveisListView, AutorListView,\
ModelChoiceView
from sapl.api.views import SaplApiViewSetConstrutor, AppVersionView, recria_token
from sapl.api.views import SaplApiViewSetConstrutor, AppVersionView, recria_token, get_mesa_diretora
from .apps import AppConfig
@ -72,6 +72,8 @@ urlpatterns = [
url(r'^api/', include(urlpatterns_router)),
url(r'^api/version', AppVersionView.as_view()),
url(r'^api/recriar-token/(?P<pk>\d*)$', recria_token, name="recria_token"),
url(r'^api/parlamentares/mesa-diretora',
get_mesa_diretora, name='get_mesa_diretora')
# implementar caminho para autenticação
# https://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/

57
sapl/api/views.py

@ -11,6 +11,7 @@ from django.utils import timezone
from django.utils.decorators import classonlymethod
from django.utils.translation import ugettext_lazy as _
from django_filters.rest_framework.backends import DjangoFilterBackend
from django.http import JsonResponse
from rest_framework import serializers as rest_serializers
from rest_framework.authtoken.models import Token
from rest_framework.decorators import action, api_view, permission_classes
@ -33,7 +34,9 @@ from sapl.parlamentares.models import Parlamentar
from sapl.protocoloadm.models import DocumentoAdministrativo,\
DocumentoAcessorioAdministrativo, TramitacaoAdministrativo, Anexado
from sapl.sessao.models import SessaoPlenaria, ExpedienteSessao
from sapl.utils import models_with_gr_for_model, choice_anos_com_sessaoplenaria
from sapl.utils import models_with_gr_for_model, choice_anos_com_sessaoplenaria, get_base_url
from sapl.parlamentares.models import (ComposicaoMesa, SessaoLegislativa)
from sapl.parlamentares.views import (partido_parlamentar_sessao_legislativa)
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
@ -50,6 +53,56 @@ def recria_token(request, pk):
return Response({"message": "Token recriado com sucesso!", "token": token.key})
def get_mesa_diretora(request):
logger = logging.getLogger(__name__)
kwargs = {}
legislatura = request.GET.get('legislatura')
if not legislatura:
legislatura = Legislatura.objects.order_by('-data_inicio').first()
kwargs['legislatura_id'] = legislatura
sessao = request.GET.get('sessao')
if sessao:
kwargs['id'] = sessao
sessao_legislativa = SessaoLegislativa.objects.select_related('legislatura').filter(**kwargs).order_by('-data_inicio').first()
if sessao_legislativa is None:
logger.error("Sessão ou legislatura não encontrada!")
return JsonResponse({"error": "Sessão ou legislatura não encontrada!"})
composicao_mesa = ComposicaoMesa.objects.select_related('parlamentar', 'cargo').filter(
sessao_legislativa=sessao_legislativa).order_by('cargo_id')
if composicao_mesa is None:
logger.error("Nenhuma mesa não encontrada!")
return JsonResponse({"error": "Sessão ou legislatura não encontrada!"})
mesa_diretora = [{'legislatura_id':legislatura.id,'legislatura':str(legislatura),
'sessao_legislativa_id':sessao_legislativa.id,'sessao_legislativa':str(sessao_legislativa),
'parlamentar_id': parlamentar_id, 'parlamentar_nome': parlamentar_nome, 'cargo_id': cargo_id,
'cargo_descricao':cargo_descricao} for (parlamentar_id, parlamentar_nome,
cargo_id, cargo_descricao) in composicao_mesa.values_list('parlamentar_id',
'parlamentar__nome_parlamentar', 'cargo_id', 'cargo__descricao')]
for i, c in enumerate(composicao_mesa):
try:
mesa_diretora[i]['fotografia'] = get_base_url(request) + c.parlamentar.fotografia.url
except:
logger.error("Parlamentar "+mesa_diretora[i]['parlamentar_nome']+" não possui foto!")
mesa_diretora[i]['fotografia'] = "Não encontrada"
return JsonResponse({
'mesa_diretora':mesa_diretora,
})
class BusinessRulesNotImplementedMixin:
def create(self, request, *args, **kwargs):
@ -703,4 +756,4 @@ class AppVersionView(APIView):
'user': request.user.username,
'is_authenticated': request.user.is_authenticated,
}
return Response(content)
return Response(content)
Loading…
Cancel
Save