From f47f256536fe8e738e9efaa12c0c01683efe4688 Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Fri, 18 Jun 2021 12:51:55 -0300 Subject: [PATCH 01/15] Adicionado rota para pagina da info de mesa diretora na API --- sapl/api/urls.py | 4 +++- sapl/api/views.py | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/sapl/api/urls.py b/sapl/api/urls.py index 17fd432ab..9a8da714d 100644 --- a/sapl/api/urls.py +++ b/sapl/api/urls.py @@ -6,7 +6,7 @@ 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 @@ url(r'^api/', include(urlpatterns_router)), url(r'^api/version', AppVersionView.as_view()), url(r'^api/recriar-token/(?P\d*)$', recria_token, name="recria_token"), + url(r'^api/parlamentares/mesa-diretora/(?P\d*)$', + get_mesa_diretora, name='get_mesa_diretora') # implementar caminho para autenticação # https://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/ diff --git a/sapl/api/views.py b/sapl/api/views.py index f4e853ccd..5fd12408e 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -704,3 +704,6 @@ def get(self, request): 'is_authenticated': request.user.is_authenticated, } return Response(content) + + + From af02725d6b57551f9523e68dbcaf3d3d875a5c2e Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Fri, 18 Jun 2021 13:09:12 -0300 Subject: [PATCH 02/15] =?UTF-8?q?Arrumada=20a=20url=20e=20definida=20fun?= =?UTF-8?q?=C3=A7=C3=A3o=20b=C3=A1sica=20da=20issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/api/urls.py | 2 +- sapl/api/views.py | 80 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/sapl/api/urls.py b/sapl/api/urls.py index 9a8da714d..aa1715982 100644 --- a/sapl/api/urls.py +++ b/sapl/api/urls.py @@ -72,7 +72,7 @@ url(r'^api/', include(urlpatterns_router)), url(r'^api/version', AppVersionView.as_view()), url(r'^api/recriar-token/(?P\d*)$', recria_token, name="recria_token"), - url(r'^api/parlamentares/mesa-diretora/(?P\d*)$', + url(r'^api/parlamentares/mesa-diretora', get_mesa_diretora, name='get_mesa_diretora') # implementar caminho para autenticação diff --git a/sapl/api/views.py b/sapl/api/views.py index 5fd12408e..466415726 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -11,6 +11,7 @@ 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 @@ -34,6 +35,8 @@ 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.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,83 @@ def recria_token(request, pk): return Response({"message": "Token recriado com sucesso!", "token": token.key}) +def get_mesa_diretora(request): + logger = logging.getLogger(__name__) + username = request.user.username + legislatura = request.GET.get('legislatura') + if legislatura: + legislatura = Legislatura.objects.get(id=legislatura) + else: + legislatura = Legislatura.objects.order_by('-data_inicio').first() + + sessoes = legislatura.sessaolegislativa_set.filter( + tipo='O').order_by('-data_inicio') + + if not sessoes: + return JsonResponse({'msg': ('Nenhuma sessão encontrada!', 0)}) + + # Verifica se já tem uma sessão selecionada. Ocorre quando é alterado o + # campo de sessão + + sessao_selecionada = request.GET.get('sessao') + if not sessao_selecionada: + try: + year = timezone.now().year + logger.info( + f"user={username}. Tentando obter sessões com data_inicio.ano = {year}.") + sessao_selecionada = sessoes.get(data_inicio__year=year).id + except ObjectDoesNotExist: + logger.error(f"user={username}. Sessões não encontradas com com data_inicio.ano = {year}. " + "Selecionado o id da primeira sessão.") + sessao_selecionada = sessoes.first().id + + # Atualiza os componentes da view após a mudança + lista_sessoes = [(s.id, s.__str__()) for s in sessoes] + + composicao_mesa = ComposicaoMesa.objects.select_related('cargo', 'parlamentar').filter( + sessao_legislativa=sessao_selecionada).order_by('cargo_id') + cargos_ocupados = list(composicao_mesa.values_list( + 'cargo__id', 'cargo__descricao')) + parlamentares_ocupados = list(composicao_mesa.values_list( + 'parlamentar__id', 'parlamentar__nome_parlamentar')) + + lista_fotos = [] + lista_partidos = [] + + sessao = SessaoLegislativa.objects.get(id=sessao_selecionada) + for p in parlamentares_ocupados: + parlamentar = Parlamentar.objects.get(id=p[0]) + lista_partidos.append( + partido_parlamentar_sessao_legislativa(sessao, parlamentar)) + if parlamentar.fotografia: + try: + thumbnail_url = get_backend().get_thumbnail_url( + parlamentar.fotografia, + { + 'size': (128, 128), + 'box': parlamentar.cropping, + 'crop': True, + 'detail': True, + } + ) + lista_fotos.append(thumbnail_url) + except Exception as e: + logger.error(e) + logger.error( + F'erro processando arquivo: {parlamentar.fotografia.path}') + else: + lista_fotos.append(None) + + return JsonResponse({ + 'lista_parlamentares': parlamentares_ocupados, + 'lista_partidos': lista_partidos, + 'lista_cargos': cargos_ocupados, + 'lista_sessoes': lista_sessoes, + 'lista_fotos': lista_fotos, + 'sessao_selecionada': sessao_selecionada, + 'msg': ('', 1) + }) + class BusinessRulesNotImplementedMixin: def create(self, request, *args, **kwargs): From 86ddedf828154131ab81ce6fd8ae1634cb62b027 Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Mon, 21 Jun 2021 13:08:19 -0300 Subject: [PATCH 03/15] Apresentando maior parte das informacoes da mesa diretora --- sapl/api/views.py | 44 +++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/sapl/api/views.py b/sapl/api/views.py index 466415726..80c44a17c 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -57,6 +57,7 @@ def get_mesa_diretora(request): logger = logging.getLogger(__name__) username = request.user.username legislatura = request.GET.get('legislatura') + if legislatura: legislatura = Legislatura.objects.get(id=legislatura) else: @@ -68,9 +69,6 @@ def get_mesa_diretora(request): if not sessoes: return JsonResponse({'msg': ('Nenhuma sessão encontrada!', 0)}) - # Verifica se já tem uma sessão selecionada. Ocorre quando é alterado o - # campo de sessão - sessao_selecionada = request.GET.get('sessao') if not sessao_selecionada: try: @@ -88,6 +86,7 @@ def get_mesa_diretora(request): composicao_mesa = ComposicaoMesa.objects.select_related('cargo', 'parlamentar').filter( sessao_legislativa=sessao_selecionada).order_by('cargo_id') + cargos_ocupados = list(composicao_mesa.values_list( 'cargo__id', 'cargo__descricao')) parlamentares_ocupados = list(composicao_mesa.values_list( @@ -99,35 +98,26 @@ def get_mesa_diretora(request): sessao = SessaoLegislativa.objects.get(id=sessao_selecionada) for p in parlamentares_ocupados: parlamentar = Parlamentar.objects.get(id=p[0]) - lista_partidos.append( - partido_parlamentar_sessao_legislativa(sessao, parlamentar)) if parlamentar.fotografia: - try: - thumbnail_url = get_backend().get_thumbnail_url( - parlamentar.fotografia, - { - 'size': (128, 128), - 'box': parlamentar.cropping, - 'crop': True, - 'detail': True, - } - ) - lista_fotos.append(thumbnail_url) - except Exception as e: - logger.error(e) - logger.error( - F'erro processando arquivo: {parlamentar.fotografia.path}') + lista_fotos.append({parlamentar.fotografia.path}) else: lista_fotos.append(None) + + membros_da_mesa = [] + + for x in range(0, len(parlamentares_ocupados)): + membro_atual = {} + membro_atual['lesgilatura_id'] = legislatura.id + membro_atual['sessao_legislativa_id'] = sessao.id + membro_atual['cargo_id'] = cargos_ocupados[x][0] + membro_atual['cargo_descricao'] = cargos_ocupados[x][1] + membro_atual['parlamentar_id'] = parlamentares_ocupados[x][0] + membro_atual['nome_parlamentar'] = parlamentares_ocupados[x][1] + + membros_da_mesa.append(membro_atual) return JsonResponse({ - 'lista_parlamentares': parlamentares_ocupados, - 'lista_partidos': lista_partidos, - 'lista_cargos': cargos_ocupados, - 'lista_sessoes': lista_sessoes, - 'lista_fotos': lista_fotos, - 'sessao_selecionada': sessao_selecionada, - 'msg': ('', 1) + 'mesa_diretora':membros_da_mesa, }) From 4d08dafd0a399eb543cb118eea2acc9fbb0c9843 Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Tue, 22 Jun 2021 11:32:43 -0300 Subject: [PATCH 04/15] =?UTF-8?q?Refatora=C3=A7=C3=A3o=20do=20c=C3=B3digo?= =?UTF-8?q?=20fonte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/api/views.py | 78 +++++++++++++---------------------------------- 1 file changed, 22 insertions(+), 56 deletions(-) diff --git a/sapl/api/views.py b/sapl/api/views.py index 80c44a17c..f73af6b50 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -34,7 +34,7 @@ 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) @@ -55,69 +55,35 @@ def recria_token(request, pk): def get_mesa_diretora(request): logger = logging.getLogger(__name__) - username = request.user.username - legislatura = request.GET.get('legislatura') - - if legislatura: - legislatura = Legislatura.objects.get(id=legislatura) - else: - legislatura = Legislatura.objects.order_by('-data_inicio').first() - sessoes = legislatura.sessaolegislativa_set.filter( - tipo='O').order_by('-data_inicio') + kwargs = {} - if not sessoes: - return JsonResponse({'msg': ('Nenhuma sessão encontrada!', 0)}) + legislatura = request.GET.get('legislatura') + if legislatura: + kwargs['legislatura_id'] = legislatura + + sessao = request.GET.get('sessao') + if sessao: + kwargs['id'] = sessao - sessao_selecionada = request.GET.get('sessao') - if not sessao_selecionada: - try: - year = timezone.now().year - logger.info( - f"user={username}. Tentando obter sessões com data_inicio.ano = {year}.") - sessao_selecionada = sessoes.get(data_inicio__year=year).id - except ObjectDoesNotExist: - logger.error(f"user={username}. Sessões não encontradas com com data_inicio.ano = {year}. " - "Selecionado o id da primeira sessão.") - sessao_selecionada = sessoes.first().id + sessao_legislativa = SessaoLegislativa.objects.filter(**kwargs).order_by('-data_inicio').first() - # Atualiza os componentes da view após a mudança - lista_sessoes = [(s.id, s.__str__()) for s in sessoes] + query_legislatura = Legislatura.objects.filter(id=legislatura).order_by('-data_inicio').first() - composicao_mesa = ComposicaoMesa.objects.select_related('cargo', 'parlamentar').filter( - sessao_legislativa=sessao_selecionada).order_by('cargo_id') + composicao_mesa = ComposicaoMesa.objects.select_related('parlamentar', 'cargo').all().filter( + sessao_legislativa=sessao_legislativa).order_by('cargo_id') - cargos_ocupados = list(composicao_mesa.values_list( - 'cargo__id', 'cargo__descricao')) - parlamentares_ocupados = list(composicao_mesa.values_list( - 'parlamentar__id', 'parlamentar__nome_parlamentar')) - - lista_fotos = [] - lista_partidos = [] - - sessao = SessaoLegislativa.objects.get(id=sessao_selecionada) - for p in parlamentares_ocupados: - parlamentar = Parlamentar.objects.get(id=p[0]) - if parlamentar.fotografia: - lista_fotos.append({parlamentar.fotografia.path}) - else: - lista_fotos.append(None) - - membros_da_mesa = [] - - for x in range(0, len(parlamentares_ocupados)): - membro_atual = {} - membro_atual['lesgilatura_id'] = legislatura.id - membro_atual['sessao_legislativa_id'] = sessao.id - membro_atual['cargo_id'] = cargos_ocupados[x][0] - membro_atual['cargo_descricao'] = cargos_ocupados[x][1] - membro_atual['parlamentar_id'] = parlamentares_ocupados[x][0] - membro_atual['nome_parlamentar'] = parlamentares_ocupados[x][1] - - membros_da_mesa.append(membro_atual) + mesa_diretora = [{'legislatura_id':query_legislatura.id,'legislatura':str(query_legislatura), + 'sessao_legislativa_id':sessao_legislativa.id,'sessao_legislativa':str(sessao_legislativa), + 'parlamentar_id':i[0], 'parlamentar_nome':i[1], 'cargo_id':i[2], 'cargo_descricao':i[3]} + for i in composicao_mesa.values_list('parlamentar_id', 'parlamentar__nome_parlamentar', + 'cargo_id', 'cargo__descricao')] + + for i, c in enumerate(composicao_mesa): + mesa_diretora[i]['fotografia'] = get_base_url(request) + c.parlamentar.fotografia.url return JsonResponse({ - 'mesa_diretora':membros_da_mesa, + 'mesa_diretora':mesa_diretora, }) From f678f12a71877daceea70b5a6b8857709343c252 Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Tue, 22 Jun 2021 12:18:53 -0300 Subject: [PATCH 05/15] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20de=20condiciona?= =?UTF-8?q?l=20para=20legislatura=20n=C3=A3o=20informada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/api/views.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/sapl/api/views.py b/sapl/api/views.py index f73af6b50..9884079db 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -59,8 +59,10 @@ def get_mesa_diretora(request): kwargs = {} legislatura = request.GET.get('legislatura') - if legislatura: - kwargs['legislatura_id'] = legislatura + if not legislatura: + legislatura = Legislatura.objects.order_by('-data_inicio').first().id + + kwargs['legislatura_id'] = legislatura sessao = request.GET.get('sessao') if sessao: @@ -739,7 +741,4 @@ def get(self, request): 'user': request.user.username, 'is_authenticated': request.user.is_authenticated, } - return Response(content) - - - + return Response(content) \ No newline at end of file From 7c3820d9ba5bd4402eb6b37ac1d4b3b6be9ad96e Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Tue, 22 Jun 2021 12:57:55 -0300 Subject: [PATCH 06/15] =?UTF-8?q?Condicionais=20para=20caso=20de=20informa?= =?UTF-8?q?=C3=A7=C3=B5es=20n=C3=A3o=20dispon=C3=ADveis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/api/views.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sapl/api/views.py b/sapl/api/views.py index 9884079db..9db3cf6f2 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -59,10 +59,8 @@ def get_mesa_diretora(request): kwargs = {} legislatura = request.GET.get('legislatura') - if not legislatura: - legislatura = Legislatura.objects.order_by('-data_inicio').first().id - - kwargs['legislatura_id'] = legislatura + if legislatura: + kwargs['legislatura_id'] = legislatura sessao = request.GET.get('sessao') if sessao: @@ -75,6 +73,11 @@ def get_mesa_diretora(request): composicao_mesa = ComposicaoMesa.objects.select_related('parlamentar', 'cargo').all().filter( sessao_legislativa=sessao_legislativa).order_by('cargo_id') + if sessao_legislativa is None or legislatura is None or composicao_mesa is None: + logger.error("Sessão, legislatura ou mesa não encontrada(s)!") + return JsonResponse({}) + + mesa_diretora = [{'legislatura_id':query_legislatura.id,'legislatura':str(query_legislatura), 'sessao_legislativa_id':sessao_legislativa.id,'sessao_legislativa':str(sessao_legislativa), 'parlamentar_id':i[0], 'parlamentar_nome':i[1], 'cargo_id':i[2], 'cargo_descricao':i[3]} From f5c089d2efed526a253d6bfe8695304f5647509d Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Wed, 23 Jun 2021 12:18:18 -0300 Subject: [PATCH 07/15] =?UTF-8?q?Refatora=C3=A7=C3=A3o=20das=20condicionai?= =?UTF-8?q?s=20de=20informa=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/api/views.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/sapl/api/views.py b/sapl/api/views.py index 9db3cf6f2..5875be367 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -60,25 +60,28 @@ def get_mesa_diretora(request): legislatura = request.GET.get('legislatura') if legislatura: - kwargs['legislatura_id'] = legislatura + kwargs['legislatura_id'] = legislatura sessao = request.GET.get('sessao') if sessao: kwargs['id'] = sessao - sessao_legislativa = SessaoLegislativa.objects.filter(**kwargs).order_by('-data_inicio').first() + sessao_legislativa = SessaoLegislativa.objects.select_related('legislatura').filter(**kwargs).order_by('-data_inicio').first() - query_legislatura = Legislatura.objects.filter(id=legislatura).order_by('-data_inicio').first() + if sessao_legislativa is None: + logger.error("Sessão ou legislatura não encontrada!") + return JsonResponse({}) composicao_mesa = ComposicaoMesa.objects.select_related('parlamentar', 'cargo').all().filter( sessao_legislativa=sessao_legislativa).order_by('cargo_id') - - if sessao_legislativa is None or legislatura is None or composicao_mesa is None: - logger.error("Sessão, legislatura ou mesa não encontrada(s)!") + + if composicao_mesa is None: + logger.error("Nenhuma mesa não encontrada!") return JsonResponse({}) + - mesa_diretora = [{'legislatura_id':query_legislatura.id,'legislatura':str(query_legislatura), + mesa_diretora = [{'legislatura_id':sessao_legislativa.legislatura.id,'legislatura':str(sessao_legislativa.legislatura), 'sessao_legislativa_id':sessao_legislativa.id,'sessao_legislativa':str(sessao_legislativa), 'parlamentar_id':i[0], 'parlamentar_nome':i[1], 'cargo_id':i[2], 'cargo_descricao':i[3]} for i in composicao_mesa.values_list('parlamentar_id', 'parlamentar__nome_parlamentar', From fc8b61c34010a04b2feb6ae57bb26ff419535592 Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Fri, 25 Jun 2021 09:57:48 -0300 Subject: [PATCH 08/15] Criado o arquivo de testes --- sapl/api/test_api.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sapl/api/test_api.py diff --git a/sapl/api/test_api.py b/sapl/api/test_api.py new file mode 100644 index 000000000..cf1cf686d --- /dev/null +++ b/sapl/api/test_api.py @@ -0,0 +1,6 @@ +from model_bakery import baker +import pytest + +from sapl.parlamentares.models import Legislatura, ComposicaoMesa, Parlamentar,\ + SessaoLegislativa, CargoMesa + From b08f537c400d2b07947a6a14e71aba8e3e24951c Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Fri, 25 Jun 2021 09:58:28 -0300 Subject: [PATCH 09/15] =?UTF-8?q?Iniciada=20a=20fun=C3=A7=C3=A3o=20de=20te?= =?UTF-8?q?ste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/api/test_api.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/sapl/api/test_api.py b/sapl/api/test_api.py index cf1cf686d..e6ab07da9 100644 --- a/sapl/api/test_api.py +++ b/sapl/api/test_api.py @@ -4,3 +4,21 @@ from sapl.parlamentares.models import Legislatura, ComposicaoMesa, Parlamentar,\ SessaoLegislativa, CargoMesa +@pytest.mark.django_db(transaction=False) +def test_get_mesa_diretora(): + #criar legislatura, sessao e parlamentares + parlamentar = baker.make(Parlamentar, nome_parlamentar='Joseph Joestar', id=8) + + legislatura = baker.make(Legislatura, id=34) + + sessao = baker.make(SessaoLegislativa, legislatura=legislatura) + + cargo = baker.make(CargoMesa, descricao="presidente") + + #passar informações para a composicao_mesa + mesa = baker.make(ComposicaoMesa, parlamentar=parlamentar, + sessao_legislativa=sessao, cargo=cargo) + + print(mesa.cargo) + + #checagens \ No newline at end of file From 03668fe67eb974293d54df5a65a383d5a088bfb9 Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Fri, 25 Jun 2021 10:06:23 -0300 Subject: [PATCH 10/15] Alterada condicional de legislatura e adicionadas mensagens de erro --- sapl/api/views.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sapl/api/views.py b/sapl/api/views.py index 5875be367..c8b883a2f 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -59,8 +59,10 @@ def get_mesa_diretora(request): kwargs = {} legislatura = request.GET.get('legislatura') - if legislatura: - kwargs['legislatura_id'] = legislatura + if not legislatura: + legislatura = Legislatura.objects.order_by('-data_inicio').first() + + kwargs['legislatura_id'] = legislatura sessao = request.GET.get('sessao') if sessao: @@ -70,14 +72,14 @@ def get_mesa_diretora(request): if sessao_legislativa is None: logger.error("Sessão ou legislatura não encontrada!") - return JsonResponse({}) + return JsonResponse({"error": "Sessão ou legislatura não encontrada!"}) composicao_mesa = ComposicaoMesa.objects.select_related('parlamentar', 'cargo').all().filter( sessao_legislativa=sessao_legislativa).order_by('cargo_id') if composicao_mesa is None: logger.error("Nenhuma mesa não encontrada!") - return JsonResponse({}) + return JsonResponse({"error": "Sessão ou legislatura não encontrada!"}) From 2729e38a08f5b3afa955bcfdd6af4e485473e750 Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Fri, 25 Jun 2021 10:08:28 -0300 Subject: [PATCH 11/15] Removida redundancia de query --- sapl/api/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/api/views.py b/sapl/api/views.py index c8b883a2f..2fda446f4 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -74,7 +74,7 @@ def get_mesa_diretora(request): 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').all().filter( + composicao_mesa = ComposicaoMesa.objects.select_related('parlamentar', 'cargo').filter( sessao_legislativa=sessao_legislativa).order_by('cargo_id') if composicao_mesa is None: From efcb0c0f8d932379d82efefeb9f5115be679439d Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Fri, 25 Jun 2021 11:30:36 -0300 Subject: [PATCH 12/15] Desempacotamento da tupla para melhorar legibilidade --- sapl/api/views.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sapl/api/views.py b/sapl/api/views.py index 2fda446f4..addfd1e98 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -83,11 +83,13 @@ def get_mesa_diretora(request): - mesa_diretora = [{'legislatura_id':sessao_legislativa.legislatura.id,'legislatura':str(sessao_legislativa.legislatura), + mesa_diretora = [{'legislatura_id':legislatura.id,'legislatura':str(legislatura), 'sessao_legislativa_id':sessao_legislativa.id,'sessao_legislativa':str(sessao_legislativa), - 'parlamentar_id':i[0], 'parlamentar_nome':i[1], 'cargo_id':i[2], 'cargo_descricao':i[3]} - for i in composicao_mesa.values_list('parlamentar_id', 'parlamentar__nome_parlamentar', - 'cargo_id', 'cargo__descricao')] + '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): mesa_diretora[i]['fotografia'] = get_base_url(request) + c.parlamentar.fotografia.url From 810744debfc71d0f7ffb64ccc00a628818ac1740 Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Mon, 28 Jun 2021 10:10:49 -0300 Subject: [PATCH 13/15] Adicionada condicional para inexistencia do arquivos de fotografia do parlamentar --- sapl/api/views.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sapl/api/views.py b/sapl/api/views.py index addfd1e98..71797ecdc 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -92,7 +92,12 @@ def get_mesa_diretora(request): for i, c in enumerate(composicao_mesa): - mesa_diretora[i]['fotografia'] = get_base_url(request) + c.parlamentar.fotografia.url + 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, From 04446aca31786c5a512cf2f3f0b05b189a0cd206 Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Mon, 28 Jun 2021 10:53:26 -0300 Subject: [PATCH 14/15] Alterada a condicional para inexistencia do arquivos de fotografia do parlamentar --- sapl/api/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/api/views.py b/sapl/api/views.py index 71797ecdc..4049a074c 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -95,7 +95,7 @@ def get_mesa_diretora(request): 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!") + logger.error("Parlamentar"+mesa_diretora[i]['parlamentar_nome']+" não possui foto!") mesa_diretora[i]['fotografia'] = "Não encontrada" From e1acbff5f69877ea124fc6491e5d506df391d561 Mon Sep 17 00:00:00 2001 From: AlGouvea Date: Mon, 28 Jun 2021 11:23:54 -0300 Subject: [PATCH 15/15] =?UTF-8?q?Inicio=20da=20configura=C3=A7=C3=A3o=20do?= =?UTF-8?q?=20arquivo=20de=20testes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/api/test_api.py | 18 ++++++++++++------ sapl/api/views.py | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/sapl/api/test_api.py b/sapl/api/test_api.py index e6ab07da9..59529d2d6 100644 --- a/sapl/api/test_api.py +++ b/sapl/api/test_api.py @@ -1,17 +1,19 @@ 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(): +def test_get_mesa_diretora(admin_client): #criar legislatura, sessao e parlamentares - parlamentar = baker.make(Parlamentar, nome_parlamentar='Joseph Joestar', id=8) + parlamentar = baker.make(Parlamentar, nome_parlamentar='Joseph Joestar', id=8, fotografia=None) legislatura = baker.make(Legislatura, id=34) - sessao = baker.make(SessaoLegislativa, legislatura=legislatura) + sessao = baker.make(SessaoLegislativa, legislatura=legislatura, id=44) cargo = baker.make(CargoMesa, descricao="presidente") @@ -19,6 +21,10 @@ def test_get_mesa_diretora(): mesa = baker.make(ComposicaoMesa, parlamentar=parlamentar, sessao_legislativa=sessao, cargo=cargo) - print(mesa.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 - #checagens \ No newline at end of file diff --git a/sapl/api/views.py b/sapl/api/views.py index 4049a074c..1a147027e 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -95,7 +95,7 @@ def get_mesa_diretora(request): 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!") + logger.error("Parlamentar "+mesa_diretora[i]['parlamentar_nome']+" não possui foto!") mesa_diretora[i]['fotografia'] = "Não encontrada"