示例#1
0
def obter_relatorio_por_id(id):
    relatorio = Relatorios().obter_por_id(id)
    if relatorio:
        return modelar_pagina_relatorio(relatorio.to_dict())
    else:
        return render_template(
            'erro.html',
            erro_titulo="Relatório não encontrado",
            erro_descricao="Esse relatório não existe."), 400
示例#2
0
    def post(self):
        assemblyman = request.json['parlamentar']
        house = request.json['casa']
        final_datetime = request.json['data_final']
        interval = request.json['intervalo']

        try:
            datetime.strptime(final_datetime, '%Y-%m-%d')
        except ValueError as e:
            return {
                'errors': {
                    'data_final': 'Should be in %Y-%m-%d format'
                },
                'message': 'Input payload validation failed'
            }, 422

        relatorio = Relatorios().solicitar_geracao_relatorio(
            parlamentar=assemblyman,
            data_final=final_datetime,
            cargo=house,
            periodo=interval
        )
        if isinstance(relatorio, Relatorio):
            return {
                'message': 'Relatório já criado',
                'url': '{}/v1/relatorios/{}'.format(
                    os.environ.get('HOST_ENDPOINT', request.url_root[:-1]),
                    relatorio.id
                )
            }, 201
        elif relatorio:
            return {'message': 'Relatório solicitado'}, 202
        return {'message': 'Relatório já está sendo processado'}, 202
示例#3
0
    def test_obter_relatorio_json_inexistente_por_periodos_diferentes(
        self,
        mock_model_selector
    ):
        parlamentar = Parlamentar(id='1', cargo='BR1')
        brasilia_tz = pytz.timezone('America/Sao_Paulo')
        relatorio_inicial = Relatorio(
            parlamentar=parlamentar,
            data_final=brasilia_tz.localize(datetime(2019, 6, 29)),
            data_inicial=brasilia_tz.localize(datetime(2019, 6, 15))
        ).save()
        relatorio_gerado = Relatorio(
            parlamentar=parlamentar,
            data_final=datetime(2019, 6, 29),
            data_inicial=datetime(2019, 6, 22)
        )
        class FakeModel:
            def obter_relatorio(self, *args, **kwargs):
                return relatorio_gerado
        mock_model_selector.return_value = FakeModel

        actual_response = Relatorios().obter_relatorio('1', '2019-06-29', 'BR1', periodo=7)
        actual_response['_id'] = 'id'
        relatorio_gerado.pk = 'id'

        self.assertEqual(mock_model_selector.call_count, 1)
        self.assertEqual(actual_response, relatorio_gerado.to_dict())
示例#4
0
 def get(self):
     _reports_query_parser.parse_args()
     house = request.args.get("casa")
     assemblyman = request.args.get("parlamentar")
     if not check_if_house_exists(house):
         abort(400, message="Id de casa legislativa inválido")
     resultado = Relatorios().buscar_por_parlamentar(house, assemblyman)
     return resultado if resultado else []
示例#5
0
    def test_obter_por_id(self):
        parlamentar = Parlamentar(id='id')
        relatorio = Relatorio(parlamentar=parlamentar, data_inicial='2019-01-01')
        relatorio.save()
        
        actual = Relatorios().obter_por_id(relatorio.pk)

        self.assertEqual(relatorio, actual)
示例#6
0
def consultar_parlamentar():
    try:
        relatorio = Relatorios().verificar_relatorio(
            parlamentar=request.args['parlamentar'],
            data_final=request.args['data'],
            cargo=request.args['parlamentarTipo'],
            periodo=request.args['dias'])
        if isinstance(relatorio, Relatorio):
            return modelar_pagina_relatorio(relatorio.to_dict())
        return render_template('relatorio_background.html')
    except AppError as e:
        return render_template('erro.html',
                               erro_titulo="500 - Erro interno",
                               erro_descricao=e.message), 500
    except (ValueError, KeyError):
        return render_template(
            'erro.html',
            erro_titulo="400 - Requisição incompleta",
            erro_descricao="Parâmetros incompletos ou incorretos."), 400
示例#7
0
    def test_solicitar_geracao_relatorio_relatorio_ja_sendo_gerado(self):
        def fakeLongThread():
            sleep(0.1)
        thread_existente = threading.Thread(
            name='1BR12019-06-297',
            target=fakeLongThread
        )

        thread_existente.start()
        actual_response = Relatorios().solicitar_geracao_relatorio('1', '2019-06-29', 'BR1', 7)

        self.assertEqual(actual_response, False)
示例#8
0
    def test_solicitar_geracao_relatorio_relatorio_existente(self):
        parlamentar = Parlamentar(id='1', cargo='BR1')
        brasilia_tz = pytz.timezone('America/Sao_Paulo')
        relatorio_inicial = Relatorio(
            parlamentar=parlamentar,
            data_final=brasilia_tz.localize(datetime(2019, 6, 29)),
            data_inicial=brasilia_tz.localize(datetime(2019, 6, 22))
        ).save()

        actual_response = Relatorios().solicitar_geracao_relatorio('1', '2019-06-29', 'BR1', 7)

        self.assertEqual(actual_response, relatorio_inicial)
示例#9
0
    def test_buscar_por_parlamentar(self):
        parlamentar_1 = Parlamentar(id='1', cargo='BR1')
        parlamentar_2 = Parlamentar(id='2', cargo='BR1')
        parlamentar_3 = Parlamentar(id='1', cargo='BR2')
        relatorio_1 = Relatorio(parlamentar=parlamentar_1, data_inicial=datetime(2019, 1, 1)).save()
        relatorio_2 = Relatorio(parlamentar=parlamentar_2, data_inicial=datetime(2019, 1, 1)).save()
        relatorio_3 = Relatorio(parlamentar=parlamentar_3, data_inicial=datetime(2019, 1, 1)).save()
        relatorio_4 = Relatorio(parlamentar=parlamentar_1, data_inicial=datetime(2019, 1, 1)).save()
        relatorio_5 = Relatorio(parlamentar=parlamentar_3, data_inicial=datetime(2019, 1, 1)).save()
        relatorio_6 = Relatorio(parlamentar=parlamentar_2, data_inicial=datetime(2019, 1, 1)).save()

        actual = Relatorios().buscar_por_parlamentar('BR1', '1')
        expected = [relatorio_1.to_dict(), relatorio_4.to_dict()]

        self.assertEqual(len(actual), len(expected))
示例#10
0
    def test_obter_relatorio_json_inexistente_funcao_sem_erro(
        self,
        mock_model_selector
    ):
        parlamentar = Parlamentar(id='1', cargo='BR1')
        relatorio = Relatorio(parlamentar=parlamentar, data_final=datetime(2019, 1, 1))
        class FakeModel:
            def obter_relatorio(self, *args, **kwargs):
                return relatorio
        mock_model_selector.return_value = FakeModel

        actual_response = Relatorios().obter_relatorio('1', '2019-01-01', 'BR1', periodo=7)
        actual_response['_id'] = 'id'
        relatorio.pk = 'id'

        self.assertEqual(mock_model_selector.call_count, 1)
        self.assertEqual(actual_response, relatorio.to_dict())
示例#11
0
    def test_solicitar_geracao_relatorio_nova_thread(
        self,
        mock_model_selector
    ):
        brasilia_tz = pytz.timezone('America/Sao_Paulo')
        parlamentar = Parlamentar(id='1', cargo='BR1')
        relatorio_gerado = Relatorio(
            parlamentar=parlamentar,
            data_final=brasilia_tz.localize(datetime(2019, 6, 29)),
            data_inicial=brasilia_tz.localize(datetime(2019, 6, 22))
        )
        def obter_relatorio(self, *args, **kwargs):
            return relatorio_gerado
        mock_model_selector.return_value = obter_relatorio

        actual_response = Relatorios().solicitar_geracao_relatorio('1', '2019-06-29', 'BR1', 7)

        self.assertEqual(actual_response, True)
示例#12
0
    def test_obter_relatorio_json_existente(self):
        brasilia_tz = pytz.timezone('America/Sao_Paulo')
        parlamentar = Parlamentar(id='1', cargo='BR1')
        relatorio = Relatorio(
            parlamentar=parlamentar,
            data_final=brasilia_tz.localize(datetime(2019, 1, 8)),
            data_inicial=brasilia_tz.localize(datetime(2019, 1, 1)),
        ).save()

        actual_response = Relatorios().obter_relatorio(
            '1', '2019-01-08', 'BR1', periodo=7)

        self.maxDiff = None
        self.assertEqual(
            brasilia_tz.normalize(actual_response['dataFinal'].replace(tzinfo=pytz.UTC)),
            relatorio.to_dict()['dataFinal']
        )
        actual_response['dataFinal'] = relatorio.to_dict()['dataFinal']
        self.assertEqual(
            brasilia_tz.normalize(actual_response['dataInicial'].replace(tzinfo=pytz.UTC)),
            relatorio.to_dict()['dataInicial']
        )
        actual_response['dataInicial'] = relatorio.to_dict()['dataInicial']
        self.assertEqual(actual_response, relatorio.to_dict())
示例#13
0
 def get(self, relatorio_id):
     relatorio = Relatorios().obter_por_id(relatorio_id)
     if relatorio:
         return json.loads(relatorio.to_json())
     else:
         abort(400, message="Id de relatório inválido")