Пример #1
0
    def test_get_expected_events(
        self,
        mock_obterDataInicialEFinal,
    ):
        events = [{
            'id': 1,
            'descricao': 'Evento 1'
        }, {
            'id': 2,
            'descricao': 'Evento 2'
        }, {
            'id': 3,
            'descricao': 'Evento 3'
        }]
        dep_id = '12345'
        mock = Mocker(self.dep.dep)
        mock.add_response("obterEventosDeputado", [events],
                          dep_id,
                          dataInicio='2018-10-21',
                          dataFim='2018-10-28')

        mock_obterDataInicialEFinal.return_value = ('2018-10-21', '2018-10-28')

        actual_response = self.dep.get_expected_events(dep_id,
                                                       datetime(2018, 10, 28))

        self.assertEqual(actual_response, [
            Evento(id='1', nome='Evento 1'),
            Evento(id='2', nome='Evento 2'),
            Evento(id='3', nome='Evento 3'),
        ])

        mock_obterDataInicialEFinal.assert_called_once_with(
            datetime(2018, 10, 28))
        mock.assert_no_pending_responses()
Пример #2
0
    def test_send_push_notification_message_too_big_sucess(self, mock_urllib3):
        def assert_equal(actual, expected):
            self.assertEqual(actual, expected)

        class FakePoolManager:
            def __init__(self, *args, **kwargs):
                FakePoolManager.call_count = 0

            def request(self, method, url, headers, body):
                class responseFail():
                    status = 200
                    data = json.dumps({
                        'results': [{
                            'error': 'MessageTooBig'
                        }]
                    }).encode('utf-8')

                class responseSucess():
                    status = 200
                    data = json.dumps({
                        'results': [{
                            'id': '123'
                        }]
                    }).encode('utf-8')

                FakePoolManager.call_count += 1
                assert_equal(method, "POST")
                assert_equal(url, "https://fcm.googleapis.com/fcm/send")
                if 'reportsIds' in body.decode('utf-8'):
                    return responseSucess()
                return responseFail()

        data_inicial = datetime(2019, 10, 12)
        data_final = datetime(2019, 10, 19)
        parlamentar1 = Parlamentar(id='1', cargo='BR1', nome='AMANDA')
        relatorio1 = Relatorio(
            id="123",
            parlamentar=parlamentar1,
            data_final=data_final,
            data_inicial=data_inicial,
            proposicoes=[
                Proposicao(id="1"),
                Proposicao(id="2"),
                Proposicao(id="3"),
                Proposicao(id="4")
            ],
            eventos_presentes=[Evento(id="1"), Evento(id="2")],
            eventos_previstos=None,
            eventos_ausentes=[Evento(id="4"),
                              Evento(id="5"),
                              Evento(id="6")])

        mock_urllib3.side_effect = FakePoolManager

        result = send_push_notification("token", [relatorio1.to_dict()])

        self.assertTrue(mock_urllib3.called)
        self.assertEqual(2, mock_urllib3.side_effect.call_count)
        self.assertTrue(result)
Пример #3
0
    def test_build_event(self):
        event = {
            'id': '123',
            'dataHoraInicio': '2019-08-10T10:00',
            'dataHoraFim': '2019-08-10T12:00',
            'situacao': 'Encerrada',
            'descricao': 'Sessão Ordinária',
            'uri': 'uri',
            'orgaos': [{
                'nome': 'Plenário',
                'apelido': 'PLEN'
            }]
        }
        expected = Evento(
            id='123',
            data_inicial=self.dep.get_brt(datetime(2019, 8, 10, 10)),
            data_final=self.dep.get_brt(datetime(2019, 8, 10, 12)),
            situacao='Encerrada',
            nome='Sessão Ordinária',
            url='uri',
            orgaos=[Orgao(nome='Plenário', apelido='PLEN')])

        actual = self.dep.build_event(event)

        self.assertEqual(expected, actual)
Пример #4
0
    def test_send_push_notification_invalid_json_response(self, mock_urllib3):
        def assert_equal(actual, expected):
            self.assertEqual(actual, expected)

        class FakePoolManager:
            def __init__(self, *args, **kwargs):
                FakePoolManager.call_count = 0

            def request(self, method, url, headers, body):
                class response():
                    status = 401
                    data = '<HTML><HEAD><TITLE>Invalid (legacy) Server-key delivered or Sender is not authorized to perform request.</TITLE></HEAD><BODY BGCOLOR="#FFFFFF" TEXT="#000000"><H1>Invalid (legacy) Server-key delivered or Sender is not authorized to perform request.</H1><H2>Error 401</H2></BODY></HTML>'.encode(
                        'utf-8')

                FakePoolManager.call_count += 1
                assert_equal(method, "POST")
                assert_equal(url, "https://fcm.googleapis.com/fcm/send")
                return response()

        data_inicial = datetime(2019, 10, 12)
        data_final = datetime(2019, 10, 19)
        parlamentar1 = Parlamentar(id='1', cargo='BR1', nome='AMANDA')
        relatorio1 = Relatorio(
            id="123",
            parlamentar=parlamentar1,
            data_final=data_final,
            data_inicial=data_inicial,
            proposicoes=[
                Proposicao(id="1"),
                Proposicao(id="2"),
                Proposicao(id="3"),
                Proposicao(id="4")
            ],
            eventos_presentes=[Evento(id="1"), Evento(id="2")],
            eventos_previstos=None,
            eventos_ausentes=[Evento(id="4"),
                              Evento(id="5"),
                              Evento(id="6")])

        mock_urllib3.side_effect = FakePoolManager

        result = send_push_notification("token", [relatorio1.to_dict()])

        self.assertTrue(mock_urllib3.called)
        self.assertEqual(1, mock_urllib3.side_effect.call_count)
        self.assertFalse(result)
Пример #5
0
    def test_add_absent_events(self):
        absent_events = [
            Evento(id='1',
                   presenca=2,
                   orgaos=[Orgao(nome='Órgão 1', apelido='')]),
            Evento(id='2',
                   presenca=3,
                   orgaos=[Orgao(nome='Órgão 1', apelido='')]),
            Evento(id='5',
                   presenca=1,
                   orgaos=[Orgao(nome='Órgão 4', apelido='')]),
            Evento(id='6',
                   presenca=2,
                   orgaos=[Orgao(nome='Órgão 4', apelido='PLEN')]),
        ]
        self.dep.relatorio = Relatorio()

        self.dep._add_absent_events(absent_events)

        self.assertEqual(self.dep.relatorio.eventos_ausentes, absent_events)
        absent_events.pop(2)
        self.assertEqual(self.dep.relatorio.eventos_previstos, absent_events)
        self.assertEqual(self.dep.relatorio.eventos_ausentes_esperados_total,
                         3)
Пример #6
0
    def build_event(self, event_info):
        """
        Builds an Event object with given event data

        :param event_info: Event dict
        :type event_info: Dict
        :return: Event object
        :rtype: Evento
        """
        event = Evento()
        event.id = str(event_info['id'])
        event.data_inicial = self.get_brt(
            self._parse_datetime(event_info.get('dataHoraInicio')))
        event.data_final = self.get_brt(
            self._parse_datetime(event_info.get('dataHoraFim')))
        event.situacao = event_info.get('situacao')
        event.nome = event_info.get('descricao')
        event.url = event_info.get('uri')
        event.orgaos = [
            Orgao(nome=o.get('nome'), apelido=o.get('apelido'))
            for o in event_info.get('orgaos', [])
        ]
        return event
Пример #7
0
    def test_avaliar_sucesso(self):
        parlamentar = Parlamentar(id='id', cargo='BR1')
        evento = Evento(id='123', nome='Evento')
        relatorio = Relatorio(
            parlamentar=parlamentar,
            data_inicial='2019-01-01',
            eventos_presentes=[evento]
        )
        relatorio.save()

        Avaliacao().avaliar('123', '1', '*****@*****.**', relatorio.pk)
        actual = Avaliacoes.objects().first()

        self.assertEqual(actual.email, '*****@*****.**')
        self.assertEqual(actual.relatorioId, relatorio.pk)
        self.assertEqual(actual.parlamentar.id, 'id')
        self.assertEqual(actual.parlamentar.cargo, 'BR1')
        self.assertEqual(actual.avaliado['id'], '123')
Пример #8
0
    def test_add_attended_events(self):
        events_attended = [
            Evento(id='3',
                   data_inicial=self.dep.helper.get_brt(datetime(2019, 12,
                                                                 10)),
                   data_final=self.dep.helper.get_brt(datetime(2019, 12, 17))),
            Evento(id='4',
                   data_inicial=self.dep.helper.get_brt(datetime(2019, 12,
                                                                 10)),
                   data_final=self.dep.helper.get_brt(datetime(2019, 12, 17)))
        ]
        mock_ev = Mocker(self.dep.helper.ev)
        mock_prop = Mocker(self.dep.helper.prop)
        mock_ev.add_response("obterPautaEvento", [
            {
                'codRegime': '123',
                'proposicao_': {
                    'id': '11'
                }
            },
            {
                'codRegime': '123',
                'proposicao_': {
                    'id': '12'
                }
            },
        ])
        mock_ev.add_exception("obterPautaEvento", CamaraDeputadosError)
        mock_prop.add_response(
            "obterProposicao", {
                'id': '11',
                'nome': 'Proposição I',
                'ementa': 'Proposição I',
                'numero': '11',
                'ano': 2019
            })
        mock_prop.add_exception("obterProposicao", CamaraDeputadosError)
        mock_prop.add_response("obterVotacoesProposicao", [{
            'data':
            '15/12/2019',
            'hora':
            '12:00',
            'resumo':
            'Votação 1',
            'votos': [
                {
                    'id': '23456',
                    'voto': 'Não'
                },
                {
                    'id': '12345',
                    'voto': 'Sim'
                },
                {
                    'id': '34567',
                    'voto': 'Abstenção'
                },
            ]
        }])
        mock_prop.add_response("obterVotacoesProposicao", [{
            'data':
            '16/12/2019',
            'hora':
            '12:00',
            'resumo':
            'Votação 2',
            'votos': [
                {
                    'id': '23456',
                    'voto': 'Sim'
                },
                {
                    'id': '12345',
                    'voto': 'Não'
                },
                {
                    'id': '34567',
                    'voto': 'Abstenção'
                },
            ]
        }])
        self.dep.relatorio = Relatorio(parlamentar=Parlamentar(id='12345'))

        self.dep._add_attended_events(events_attended)

        self.assertEqual(self.dep.relatorio.eventos_presentes, [
            Evento(id='3',
                   data_inicial=self.dep.helper.get_brt(datetime(2019, 12,
                                                                 10)),
                   data_final=self.dep.helper.get_brt(datetime(2019, 12, 17)),
                   presenca=0,
                   pautas=[
                       Proposicao(id='11',
                                  numero='11',
                                  ementa='Proposição I',
                                  pauta='Votação 1 de Proposição I',
                                  voto='Sim')
                   ]),
            Evento(id='4',
                   data_inicial=self.dep.helper.get_brt(datetime(2019, 12,
                                                                 10)),
                   data_final=self.dep.helper.get_brt(datetime(2019, 12, 17)),
                   presenca=0,
                   pautas=[])
        ])
Пример #9
0
    def test_get_all_events(self, mock_obterDataInicialEFinal):
        mock = Mocker(self.dep.ev)
        mock.add_response(
            "obterTodosEventos",
            [[{
                'id': '123',
                'dataHoraInicio': '2018-10-24T10:00',
                'dataHoraFim': '2018-10-24T12:00',
                'situacao': 'Encerrada',
                'descricao': 'Sessão Ordinária',
                'uri': 'uri',
                'orgaos': [{
                    'nome': 'Plenário',
                    'apelido': 'PLEN'
                }]
            }, {
                'id': '1234',
                'dataHoraInicio': '2018-10-24T14:00',
                'dataHoraFim': '2018-10-24T18:45',
                'situacao': 'Encerrada',
                'descricao': 'Sessão Extraordinária',
                'uri': 'uri',
                'orgaos': [{
                    'nome': 'Plenário',
                    'apelido': 'PLEN'
                }]
            }],
             [{
                 'id':
                 '12345',
                 'dataHoraInicio':
                 '2018-10-25T10:00',
                 'dataHoraFim':
                 None,
                 'situacao':
                 'Cancelada',
                 'descricao':
                 'Sessão Ordinária',
                 'uri':
                 'uri',
                 'orgaos': [{
                     'nome': 'Comissão de Constituição e Justiça',
                     'apelido': 'CCJ'
                 }]
             }]],
            dataInicio='2018-10-21',
            dataFim='2018-10-28')
        mock_obterDataInicialEFinal.return_value = ('2018-10-21', '2018-10-28')

        actual_response = self.dep.get_all_events(datetime(2018, 10, 28))

        self.assertEqual([
            Evento(id='123',
                   data_inicial=self.dep.get_brt(datetime(2018, 10, 24, 10,
                                                          0)),
                   data_final=self.dep.get_brt(datetime(2018, 10, 24, 12, 0)),
                   situacao='Encerrada',
                   nome='Sessão Ordinária',
                   url='uri',
                   orgaos=[Orgao(nome='Plenário', apelido='PLEN')]),
            Evento(id='1234',
                   data_inicial=self.dep.get_brt(datetime(2018, 10, 24, 14,
                                                          0)),
                   data_final=self.dep.get_brt(datetime(2018, 10, 24, 18, 45)),
                   situacao='Encerrada',
                   nome='Sessão Extraordinária',
                   url='uri',
                   orgaos=[Orgao(nome='Plenário', apelido='PLEN')]),
            Evento(id='12345',
                   data_inicial=self.dep.get_brt(datetime(2018, 10, 25, 10,
                                                          0)),
                   data_final=None,
                   situacao='Cancelada',
                   nome='Sessão Ordinária',
                   url='uri',
                   orgaos=[
                       Orgao(nome='Comissão de Constituição e Justiça',
                             apelido='CCJ')
                   ]),
        ], actual_response)

        mock_obterDataInicialEFinal.assert_called_once_with(
            datetime(2018, 10, 28))
        mock.assert_no_pending_responses()
Пример #10
0
    def test_get_absent_events(self):
        expected_events = [
            self.dep.build_event(e) for e in [
                {
                    'id': '2'
                },
                {
                    'id': '3'
                },
                {
                    'id': '4'
                },
            ]
        ]
        events = [
            self.dep.build_event(e) for e in [
                {
                    'id': '1',
                    'orgaos': [{
                        'nome': 'Órgão 1',
                        'apelido': ''
                    }]
                },
                {
                    'id': '2',
                    'orgaos': [{
                        'nome': 'Órgão 1',
                        'apelido': ''
                    }]
                },
                {
                    'id': '3',
                    'orgaos': [{
                        'nome': 'Órgão 2',
                        'apelido': ''
                    }]
                },
                {
                    'id': '4',
                    'orgaos': [{
                        'nome': 'Órgão 2',
                        'apelido': ''
                    }]
                },
                {
                    'id': '5',
                    'orgaos': [{
                        'nome': 'Órgão 4',
                        'apelido': ''
                    }]
                },
                {
                    'id': '6',
                    'orgaos': [{
                        'nome': 'Órgão 4',
                        'apelido': 'PLEN'
                    }]
                },
            ]
        ]
        events_attended = [
            self.dep.build_event(e) for e in [
                {
                    'id': '3',
                    'orgaos': [{
                        'nome': 'Órgão 2',
                        'apelido': ''
                    }]
                },
                {
                    'id': '4',
                    'orgaos': [{
                        'nome': 'Órgão 2',
                        'apelido': ''
                    }]
                },
            ]
        ]
        commissions = [
            Orgao(nome='Órgão 1'),
            Orgao(nome='Órgão 2'),
            Orgao(nome='Órgão 3'),
        ]

        actual_response = self.dep.get_absent_events(
            events,
            events_attended,
            expected_events,
            commissions,
        )

        self.assertEqual([
            Evento(id='1',
                   presenca=2,
                   orgaos=[Orgao(nome='Órgão 1', apelido='')]),
            Evento(id='2',
                   presenca=3,
                   orgaos=[Orgao(nome='Órgão 1', apelido='')]),
            Evento(id='5',
                   presenca=1,
                   orgaos=[Orgao(nome='Órgão 4', apelido='')]),
            Evento(id='6',
                   presenca=2,
                   orgaos=[Orgao(nome='Órgão 4', apelido='PLEN')]),
        ], actual_response)
Пример #11
0
    def test_send_push_notification_success(self, mock_urllib3):
        def assert_equal(actual, expected):
            self.assertEqual(actual, expected)

        data_inicial = datetime(2019, 10, 12)
        data_final = datetime(2019, 10, 19)
        parlamentar1 = Parlamentar(id='1', cargo='BR1', nome='AMANDA')
        relatorio1 = Relatorio(
            id="123",
            parlamentar=parlamentar1,
            data_final=data_final,
            data_inicial=data_inicial,
            proposicoes=[
                Proposicao(id="1"),
                Proposicao(id="2"),
                Proposicao(id="3"),
                Proposicao(id="4")
            ],
            eventos_presentes=[Evento(id="1"), Evento(id="2")],
            eventos_previstos=None,
            eventos_ausentes=[Evento(id="4"),
                              Evento(id="5"),
                              Evento(id="6")])
        expected_reports = [{
            "_id": "123",
            "parlamentar": parlamentar1.to_dict(),
            "mensagem": None,
            "dataInicial": str(data_inicial),
            "dataFinal": str(data_final),
            "orgaos": 0,
            "proposicoes": 4,
            "eventosPresentes": 2,
            "eventosAusentes": 3,
            "eventosPrevistos": 0,
            "presencaRelativa": "100.00%",
            "presencaTotal": "40.00%",
            "eventosAusentesEsperadosTotal": 0
        }]

        class FakePoolManager:
            def __init__(self, *args, **kwargs):
                pass

            def request(self, method, url, headers, body):
                class response():
                    status = 200
                    data = json.dumps({
                        'results': [{
                            'id': '123'
                        }]
                    }).encode('utf-8')

                assert_equal(method, "POST")
                assert_equal(url, "https://fcm.googleapis.com/fcm/send")
                assert_equal(
                    json.loads(body.decode('utf-8'))["data"]["reports"],
                    expected_reports)
                return response()

        mock_urllib3.side_effect = FakePoolManager

        reports = [relatorio1.to_dict()]
        result = send_push_notification("token", reports)

        self.assertTrue(mock_urllib3.called)
        self.assertTrue(result)
        self.assertEqual([relatorio1.to_dict()], reports)
 def obter_relatorio(self,
                     parlamentar_id,
                     data_final=datetime.now(),
                     periodo_dias=7):
     try:
         start_time = time()
         self.relatorio = Relatorio()
         self.relatorio.aviso_dados = u'Dados de sessões de comissões não disponível.'
         self.set_period(periodo_dias)
         data_final = datetime.strptime(data_final, '%Y-%m-%d')
         data_inicial = self.obterDataInicial(data_final, **self.periodo)
         logging.info('[SAO PAULO] Parlamentar: {}'.format(parlamentar_id))
         logging.info('[SAO PAULO] Data final: {}'.format(data_final))
         logging.info('[SAO PAULO] Intervalo: {}'.format(periodo_dias))
         vereador = self.obter_parlamentar(parlamentar_id)
         logging.info(
             '[SAO PAULO] Vereador obtido em {0:.5f}s'.format(time() -
                                                              start_time))
         self.relatorio.data_inicial = self.brasilia_tz.localize(
             data_inicial)
         self.relatorio.data_final = self.brasilia_tz.localize(data_final)
         presenca = []
         sessao_total = 0
         presenca_total = 0
         for dia in self.ver.obterPresenca(data_inicial, data_final):
             if dia:
                 for v in dia['vereadores']:
                     if str(v['chave']) == vereador.id:
                         for s in v['sessoes']:
                             if s['presenca'] == 'Presente':
                                 presenca.append(s['nome'])
                         sessao_total += int(dia['totalOrd']) + int(
                             dia['totalExtra'])
                         presenca_total += sum([
                             int(v['presenteOrd']),
                             int(v['presenteExtra'])
                         ])
                 for key, value in dia['sessoes'].items():
                     evento = Evento()
                     orgao = Orgao()
                     orgao.nome = 'Plenário'
                     orgao.apelido = 'PLENÁRIO'
                     evento.orgaos.append(orgao)
                     evento.nome = key
                     evento.id = str(uuid4())
                     if value['data']:
                         try:
                             evento.data_inicial = self.brasilia_tz.localize(
                                 datetime.strptime(value['data'],
                                                   "%d/%m/%Y"))
                             evento.data_final = self.brasilia_tz.localize(
                                 datetime.strptime(value['data'],
                                                   "%d/%m/%Y"))
                         except ValueError:
                             pass
                     for prop in value['pautas']:
                         proposicao = Proposicao()
                         proposicao.pauta = prop['projeto']
                         proposicao.tipo = prop['pauta']
                         for v in prop['votos']:
                             if str(v['chave']) == parlamentar_id:
                                 proposicao.voto = v['voto']
                         evento.pautas.append(proposicao)
                     if key in presenca:
                         evento.set_presente()
                         self.relatorio.eventos_presentes.append(evento)
                     else:
                         evento.set_ausencia_evento_esperado()
                         self.relatorio.eventos_ausentes.append(evento)
         logging.info(
             '[SAO PAULO] Eventos obtidos em {0:.5f}s'.format(time() -
                                                              start_time))
         self.relatorio.eventos_ausentes_esperados_total = sessao_total - presenca_total
         self.obter_proposicoes_parlamentar(vereador.id, data_inicial,
                                            data_final)
         logging.info('[SAO PAULO] Proposicoes obtidas em {0:.5f}s'.format(
             time() - start_time))
         logging.info(
             '[SAO PAULO] Relatorio obtido em {0:.5f}s'.format(time() -
                                                               start_time))
         return self.relatorio
     except Exception as e:
         logging.error(e)
         raise ModelError(str(e))
Пример #13
0
def set_up_db(db):
    parlamentar_test = set_up_parlamentar()
    brasilia_tz = pytz.timezone('America/Sao_Paulo')
    orgaos_evento = [
        Orgao(nome="ÓrgãoTeste", sigla="OT", cargo="None", apelido="OhTe")
    ]
    eventos_presentes = [
        Evento(id="12345",
               nome="Evento teste",
               data_inicial=brasilia_tz.localize(datetime(2019, 1, 1)),
               data_final=brasilia_tz.localize(datetime(2019, 1, 1)),
               url="http://url.com",
               situacao="Encerrada",
               presenca=0,
               orgaos=orgaos_evento)
    ]
    eventos_ausentes = [
        Evento(id="123",
               nome="Evento teste",
               data_inicial=brasilia_tz.localize(datetime(2019, 1, 1)),
               data_final=brasilia_tz.localize(datetime(2019, 1, 1)),
               url="http://url.com",
               situacao="Cancelada",
               presenca=1,
               orgaos=orgaos_evento)
    ]
    Relatorio(
        pk=ObjectId("5c264b5e3a5efd576ecaf48e"),
        parlamentar=parlamentar_test,
        proposicoes=[],
        data_inicial=brasilia_tz.localize(datetime(2018, 12, 31)),
        data_final=brasilia_tz.localize(datetime(2019, 1, 7)),
        orgaos=[],
        eventos_presentes=eventos_presentes,
        eventos_ausentes=eventos_ausentes,
        eventos_previstos=[],
    ).save()
    Avaliacoes(
        pk=ObjectId("5c5116f5c3acc80004eada0a"),
        email="*****@*****.**",
        parlamentar=parlamentar_test,
        avaliacao="1",
        avaliado={
            "url":
            "url",
            "situacao":
            "Cancelada",
            "dataFinal":
            brasilia_tz.localize(datetime(2019, 1, 1)),
            "orgaos": [{
                "sigla": "OT",
                "nome": "ÓrgãoTeste",
                "apelido": "OhTe",
                "cargo": None
            }],
            "dataInicial":
            brasilia_tz.localize(datetime(2019, 1, 1)),
            "presenca":
            1,
            "nome":
            "Evento teste",
            "id":
            "123"
        },
        relatorioId=ObjectId("5c264b5e3a5efd576ecaf48e"),
    ).save()
    inscricoes = Inscricoes(parlamentares=[parlamentar_test], intervalo=7)
    User.drop_collection()
    User(
        username="******",
        email="*****@*****.**",
        password=
        "******",
        inscricoes=inscricoes,
        devices=[
            UserDevice(id="14",
                       name="dispositivo",
                       token="---token---",
                       active=True,
                       os="Android")
        ]).save()
Пример #14
0
 def obterEventosPresentes(self, dep_id, data_inicial, data_final, reunioes,
                           comissoes, orgaos_nomes):
     eventos_todos = self.com.obterReunioesComissoes()
     presencas = self.com.obterPresencaReunioesComissoes()
     presencas = [x for x in presencas if x["idDeputado"] == dep_id]
     presencas_reunioes_id = [x["idReuniao"] for x in presencas]
     for e in eventos_todos:
         if (self.obterDatetimeDeStr(e["data"]) > data_inicial
                 and self.obterDatetimeDeStr(e["data"]) < data_final):
             evento = Evento()
             evento.id = e['id']
             evento.data_inicial = self.brasilia_tz.localize(
                 self.obterDatetimeDeStr(e["data"]))
             evento.nome = e['convocacao']
             evento.situacao = e['situacao']
             if e['id'] in reunioes:
                 for r in reunioes[e['id']]:
                     proposicao = Proposicao()
                     proposicao.id = r['idDocumento']
                     proposicao.pauta = r['idDocumento']
                     proposicao.url_documento = \
                         'https://www.al.sp.gov.br/propositura/?id={}'.format(r['idDocumento'])
                     proposicao.voto = self.obterVotoDescritivo(r['voto'])
                     proposicao.tipo = r['idDocumento']
                     evento.pautas.append(proposicao)
             orgao = Orgao()
             orgao.nome = comissoes[e['idComissao']]['nome']
             orgao.apelido = comissoes[e['idComissao']]['sigla']
             evento.orgaos.append(orgao)
             if e["id"] in presencas_reunioes_id:
                 evento.set_presente()
                 self.relatorio.eventos_presentes.append(evento)
             else:
                 evento.set_ausencia_evento_nao_esperado()
                 if (comissoes[e["idComissao"]]["sigla"] in orgaos_nomes
                         and e['situacao'].lower() in [
                             'em preparação', 'em preparacao', 'realizada',
                             'encerrada'
                         ]):
                     evento.set_ausente_evento_previsto()
                     self.relatorio.eventos_previstos.append(evento)
                 self.relatorio.eventos_ausentes.append(evento)