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

55
sapl/api/views.py

@ -11,6 +11,7 @@ from django.utils import timezone
from django.utils.decorators import classonlymethod from django.utils.decorators import classonlymethod
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django_filters.rest_framework.backends import DjangoFilterBackend from django_filters.rest_framework.backends import DjangoFilterBackend
from django.http import JsonResponse
from rest_framework import serializers as rest_serializers from rest_framework import serializers as rest_serializers
from rest_framework.authtoken.models import Token from rest_framework.authtoken.models import Token
from rest_framework.decorators import action, api_view, permission_classes 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,\ from sapl.protocoloadm.models import DocumentoAdministrativo,\
DocumentoAcessorioAdministrativo, TramitacaoAdministrativo, Anexado DocumentoAcessorioAdministrativo, TramitacaoAdministrativo, Anexado
from sapl.sessao.models import SessaoPlenaria, ExpedienteSessao 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) @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}) 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: class BusinessRulesNotImplementedMixin:
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):

Loading…
Cancel
Save