diff --git a/sapl/__init__.py b/sapl/__init__.py index e69de29bb..cd0426407 100644 --- a/sapl/__init__.py +++ b/sapl/__init__.py @@ -0,0 +1,3 @@ +from .celery import app as celery_app + +__all__ = ['celery_app'] diff --git a/sapl/painel/views.py b/sapl/painel/views.py index 6718683cd..ed390f95b 100644 --- a/sapl/painel/views.py +++ b/sapl/painel/views.py @@ -78,9 +78,9 @@ def votacao_aberta(request): if numero_materias_abertas > 1: logger.info('user=' + username + '. Existe mais de uma votação aberta na Sessão: ' + ('''
  • %s
  • ''' % ( - reverse('sapl.sessao:sessaoplenaria_detail', - kwargs={'pk': votacoes_abertas.first().id}), - votacoes_abertas.first().__str__()))) + reverse('sapl.sessao:sessaoplenaria_detail', + kwargs={'pk': votacoes_abertas.first().id}), + votacoes_abertas.first().__str__()))) msg = _('Existe mais de uma votação aberta na Sessão: ' + ('''
  • %s
  • ''' % ( reverse('sapl.sessao:sessaoplenaria_detail', @@ -93,7 +93,7 @@ def votacao_aberta(request): return votacoes_abertas.first(), None -def votacao(context,context_vars): +def votacao(context, context_vars): logger = logging.getLogger(__name__) parlamentar = context_vars['votante'].parlamentar parlamentar_presente = False @@ -116,23 +116,26 @@ def votacao(context,context_vars): if voto: try: - logger.debug("Tentando obter objeto VotoParlamentar com parlamentar={}.".format(context_vars['parlamentar'])) + logger.debug("Tentando obter objeto VotoParlamentar com parlamentar={}.".format( + context_vars['parlamentar'])) voto = voto.get(parlamentar=context_vars['parlamentar']) context.update({'voto_parlamentar': voto.voto}) except ObjectDoesNotExist: - logger.error("Voto do parlamentar {} não computado.".format(context_vars['parlamentar'])) + logger.error("Voto do parlamentar {} não computado.".format( + context_vars['parlamentar'])) context.update( {'voto_parlamentar': 'Voto não ' 'computado.'}) else: logger.error("Parlamentar com id={} não está presente na " - "Ordem do Dia/Expediente em votação.".format(parlamentar.id)) + "Ordem do Dia/Expediente em votação.".format(parlamentar.id)) context.update({'error_message': 'Você não está presente na ' 'Ordem do Dia/Expediente em votação.'}) return context, context_vars -def sessao_votacao(context,context_vars): + +def sessao_votacao(context, context_vars): pk = context_vars['sessao'].pk context.update({'sessao_id': pk}) context.update({'sessao': context_vars['sessao'], @@ -143,9 +146,9 @@ def sessao_votacao(context,context_vars): presentes = [] ordem_dia = get_materia_aberta(pk) expediente = get_materia_expediente_aberta(pk) - errors_msgs = {'materia':'Não há nenhuma matéria aberta.', - 'registro':'A votação para esta matéria já encerrou.', - 'tipo':'A matéria aberta não é do tipo votação nominal.'} + errors_msgs = {'materia': 'Não há nenhuma matéria aberta.', + 'registro': 'A votação para esta matéria já encerrou.', + 'tipo': 'A matéria aberta não é do tipo votação nominal.'} materia_aberta = None if ordem_dia: @@ -160,8 +163,8 @@ def sessao_votacao(context,context_vars): 'parlamentar_id', flat=True).distinct() context_vars.update({'ordem_dia': ordem_dia, - 'expediente':expediente, - 'presentes': presentes}) + 'expediente': expediente, + 'presentes': presentes}) # Verifica votação aberta # Se aberta, verifica se é nominal. ID nominal == 2 @@ -188,7 +191,7 @@ def can_vote(context, context_vars, request): # Pega sessão sessao, msg = votacao_aberta(request) - context_vars.update({'sessao':sessao}) + context_vars.update({'sessao': sessao}) if sessao and not msg: context, context_vars = sessao_votacao(context, context_vars) elif not sessao and msg: @@ -202,20 +205,21 @@ def can_vote(context, context_vars, request): def votante_view(request): logger = logging.getLogger(__name__) username = request.user.username if request.user.is_authenticated else 'AnonymousUser' - + # Pega o votante relacionado ao usuário template_name = 'painel/voto_nominal.html' context = {} context_vars = {} try: - logger.debug(f'user={username}. Tentando obter objeto Votante com user={request.user}.') + logger.debug( + f'user={username}. Tentando obter objeto Votante com user={request.user}.') if not request.user.is_anonymous and request.user.is_authenticated: votante = Votante.objects.get(user=request.user) else: raise ObjectDoesNotExist except ObjectDoesNotExist: - logger.error(f"user={username}. Usuário (user={request.user}) não cadastrado como votante na tela de parlamentares. " + logger.error(f"user={username}. Usuário (user={request.user}) não cadastrado como votante na tela de parlamentares. " "Contate a administração de sua Casa Legislativa!") msg = _("Usuário não cadastrado como votante na tela de parlamentares. Contate a administração de sua Casa Legislativa!") context.update({'error_message': msg}) @@ -227,9 +231,11 @@ def votante_view(request): # Verifica se usuário possui permissão para votar if 'parlamentares.can_vote' in request.user.get_all_permissions(): context, context_vars = can_vote(context, context_vars, request) - logger.debug("user=" + username + ". Verificando se usuário {} possui permissão para votar.".format(request.user)) + logger.debug("user=" + username + + ". Verificando se usuário {} possui permissão para votar.".format(request.user)) else: - logger.error("user=" + username + ". Usuário {} sem permissão para votar.".format(request.user)) + logger.error("user=" + username + + ". Usuário {} sem permissão para votar.".format(request.user)) context.update({'permissao': False, 'error_message': 'Usuário sem permissão para votar.'}) @@ -294,7 +300,8 @@ def painel_view(request, pk): now = timezone.localtime(timezone.now()) utc_offset = now.utcoffset().total_seconds() / 60 - context = {'head_title': str(_('Painel Plenário')), 'sessao_id': pk, 'utc_offset': utc_offset } + context = {'head_title': str( + _('Painel Plenário')), 'sessao_id': pk, 'utc_offset': utc_offset} return render(request, 'painel/index.html', context) @@ -348,10 +355,12 @@ def get_cronometro_status(request, name): logger.debug("user=" + username + ". Tentando obter cronometro.") cronometro = request.session[name] except KeyError as e: - logger.error("user=" + username + ". Erro ao obter cronometro. Retornado como vazio. " + str(e)) + logger.error("user=" + username + + ". Erro ao obter cronometro. Retornado como vazio. " + str(e)) cronometro = '' return cronometro + def get_cronometro_value(request, name): if name == 'discurso': result = ConfiguracoesAplicacao.objects.first().cronometro_discurso @@ -377,7 +386,7 @@ def get_presentes(pk, response, materia): else: presentes = SessaoPlenariaPresenca.objects.filter( sessao_plenaria_id=pk) - + sessao = SessaoPlenaria.objects.get(id=pk) num_presentes = len(presentes) data_sessao = sessao.data_inicio @@ -503,7 +512,8 @@ def get_votos(response, materia): for i, p in enumerate(response['presentes']): try: - logger.info("Tentando obter votos do parlamentar (id={}).".format(p['parlamentar_id'])) + logger.info("Tentando obter votos do parlamentar (id={}).".format( + p['parlamentar_id'])) if votos_parlamentares.get(parlamentar_id=p['parlamentar_id']).voto: response['presentes'][i]['voto'] = 'Voto Informado' except ObjectDoesNotExist: @@ -531,11 +541,13 @@ def get_votos(response, materia): for i, p in enumerate(response['presentes']): try: - logger.debug("Tentando obter votos do parlamentar (id={}).".format(p['parlamentar_id'])) + logger.debug("Tentando obter votos do parlamentar (id={}).".format( + p['parlamentar_id'])) response['presentes'][i]['voto'] = votos_parlamentares.get( parlamentar_id=p['parlamentar_id']).voto except ObjectDoesNotExist: - logger.error("Votos do parlamentar (id={}) não encontrados. Retornado None.".format(p['parlamentar_id'])) + logger.error("Votos do parlamentar (id={}) não encontrados. Retornado None.".format( + p['parlamentar_id'])) response['presentes'][i]['voto'] = None response.update({ @@ -562,7 +574,7 @@ def get_dados_painel(request, pk): if casa and app_config and (bool(casa.logotipo)): brasao = casa.logotipo.url \ if app_config.mostrar_brasao_painel else None - + response = { 'sessao_plenaria': str(sessao), 'sessao_plenaria_data': sessao.data_inicio.strftime('%d/%m/%Y'), @@ -570,6 +582,7 @@ def get_dados_painel(request, pk): 'sessao_solene': sessao.tipo.nome == "Solene", 'sessao_finalizada': sessao.finalizada, 'tema_solene': sessao.tema_solene, + 'status_cronometro_discurso': get_cronometro_status(request, 'discurso'), 'cronometro_aparte': get_cronometro_value(request, 'aparte'), 'cronometro_discurso': get_cronometro_value(request, 'discurso'), 'cronometro_ordem': get_cronometro_value(request, 'ordem'), @@ -611,18 +624,18 @@ def get_dados_painel(request, pk): ordem_expediente = last_ordem_voto.ordem ultimo_timestamp = last_ordem_voto.data_hora if (last_expediente_voto and ultimo_timestamp and last_expediente_voto.data_hora > ultimo_timestamp) or \ - (not ultimo_timestamp and last_expediente_voto): + (not ultimo_timestamp and last_expediente_voto): ordem_expediente = last_expediente_voto.expediente ultimo_timestamp = last_expediente_voto.data_hora if (last_ordem_leitura and ultimo_timestamp and last_ordem_leitura.data_hora > ultimo_timestamp) or \ - (not ultimo_timestamp and last_ordem_leitura): + (not ultimo_timestamp and last_ordem_leitura): ordem_expediente = last_ordem_leitura.ordem ultimo_timestamp = last_ordem_leitura.data_hora if (last_expediente_leitura and ultimo_timestamp and last_expediente_leitura.data_hora > ultimo_timestamp) or \ - (not ultimo_timestamp and last_expediente_leitura): + (not ultimo_timestamp and last_expediente_leitura): ordem_expediente = last_expediente_leitura.expediente ultimo_timestamp = last_expediente_leitura.data_hora - + if ordem_expediente: return JsonResponse(get_votos( get_presentes(pk, response, ordem_expediente), diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 5284bb591..485c5533f 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -2,6 +2,7 @@ import logging from collections import OrderedDict from re import sub +from sapl.painel.views import get_cronometro_status from django.contrib import messages from django.contrib.auth.decorators import permission_required @@ -308,7 +309,8 @@ def customize_link_materia(context, pk, has_permission, is_expediente): page_number = "" if 'page' in context: #url += "?page={}".format(context['page']) - page_number = "" % context['page'] + page_number = "" % context[ + 'page'] if has_permission: if obj.tipo_votacao != LEITURA: @@ -649,7 +651,7 @@ class TransferenciaMateriasSessaoAbstract(PermissionRequiredMixin, ListView): numero_ordem = exp.last().numero_ordem if exp.exists() else 0 for num_ordem, expediente in enumerate( ExpedienteMateria.objects.filter(id__in=marcadas), - numero_ordem+1 + numero_ordem + 1 ): lista_expediente.append( ExpedienteMateria( @@ -669,7 +671,7 @@ class TransferenciaMateriasSessaoAbstract(PermissionRequiredMixin, ListView): o = OrdemDia.objects.filter(sessao_plenaria=sessao) numero_ordem = o.last().numero_ordem if o.exists() else 0 for num_ordem, ordemdia in enumerate( - OrdemDia.objects.filter(id__in=marcadas), numero_ordem+1 + OrdemDia.objects.filter(id__in=marcadas), numero_ordem + 1 ): lista_ordemdia.append( OrdemDia( @@ -945,7 +947,8 @@ class OradorCrud(MasterDetailCrud): {'subnav_template_name': 'sessao/subnav-solene.yaml'}) ultimo_orador = Orador.objects.filter( sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first() - context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 + context[ + "ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 return context def get_success_url(self): @@ -1018,7 +1021,8 @@ class OradorExpedienteCrud(OradorCrud): {'subnav_template_name': 'sessao/subnav-solene.yaml'}) ultimo_orador = OradorExpediente.objects.filter( sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first() - context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 + context[ + "ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 return context def get_success_url(self): @@ -1098,7 +1102,8 @@ class OradorOrdemDiaCrud(OradorCrud): context = super().get_context_data(**kwargs) ultimo_orador = OradorOrdemDia.objects.filter( sessao_plenaria=kwargs['root_pk']).order_by("-numero_ordem").first() - context["ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 + context[ + "ultima_ordem"] = ultimo_orador.numero_ordem if ultimo_orador else 0 return context class UpdateView(MasterDetailCrud.UpdateView): @@ -2936,7 +2941,8 @@ class VotacaoNominalAbstract(SessaoPermissionMixin): elif self.expediente: votacao.expediente_id = expediente_id - votacao.tipo_resultado_votacao = form.cleaned_data['resultado_votacao'] + votacao.tipo_resultado_votacao = form.cleaned_data[ + 'resultado_votacao'] votacao.save() for votos in request.POST.getlist('voto_parlamentar'): @@ -4496,7 +4502,8 @@ class VotacaoEmBlocoNominalView(PermissionRequiredForAppCrudMixin, TemplateView) votacao.observacao = request.POST['observacao'] votacao.materia = ordem.materia votacao.ordem = ordem - votacao.tipo_resultado_votacao = form.cleaned_data['resultado_votacao'] + votacao.tipo_resultado_votacao = form.cleaned_data[ + 'resultado_votacao'] votacao.user = request.user votacao.ip = get_client_ip(request) votacao.save() @@ -4517,7 +4524,8 @@ class VotacaoEmBlocoNominalView(PermissionRequiredForAppCrudMixin, TemplateView) voto_parlamentar.ip = get_client_ip(request) voto_parlamentar.save() - ordem.resultado = form.cleaned_data['resultado_votacao'].nome + ordem.resultado = form.cleaned_data[ + 'resultado_votacao'].nome ordem.votacao_aberta = False ordem.save() @@ -4541,7 +4549,8 @@ class VotacaoEmBlocoNominalView(PermissionRequiredForAppCrudMixin, TemplateView) votacao.observacao = request.POST['observacao'] votacao.materia = expediente.materia votacao.expediente = expediente - votacao.tipo_resultado_votacao = form.cleaned_data['resultado_votacao'] + votacao.tipo_resultado_votacao = form.cleaned_data[ + 'resultado_votacao'] votacao.user = request.user votacao.ip = get_client_ip(request) votacao.save() @@ -4563,7 +4572,8 @@ class VotacaoEmBlocoNominalView(PermissionRequiredForAppCrudMixin, TemplateView) voto_parlamentar.ip = get_client_ip(request) voto_parlamentar.save() - expediente.resultado = form.cleaned_data['resultado_votacao'].nome + expediente.resultado = form.cleaned_data[ + 'resultado_votacao'].nome expediente.votacao_aberta = False expediente.save() diff --git a/sapl/settings.py b/sapl/settings.py index a665a04af..8ddf5e4d7 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -204,6 +204,8 @@ TEMPLATES = [ WSGI_APPLICATION = 'sapl.wsgi.application' +CELERY_BROKER_URL = 'redis://localhost:6379' + # Database # https://docs.djangoproject.com/en/1.8/ref/settings/#databases