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
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
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())
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 []
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)
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
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)
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)
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))
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())
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)
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())
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")