diff --git a/python_parser/app/main.py b/python_parser/app/main.py index 8f6e7e8..578d06a 100644 --- a/python_parser/app/main.py +++ b/python_parser/app/main.py @@ -96,6 +96,54 @@ async def get_available_parsers(): return {"parsers": parsers} +@app.get("/parsers/{parser_name}/getters", tags=["Общее"], + summary="Информация о геттерах парсера", + description="Возвращает информацию о доступных геттерах для указанного парсера", + responses={ + 200: { + "content": { + "application/json": { + "example": { + "parser": "svodka_pm", + "getters": { + "single_og": { + "required_params": ["id", "codes", "columns"], + "optional_params": ["search"], + "description": "Получение данных по одному ОГ" + }, + "total_ogs": { + "required_params": ["codes", "columns"], + "optional_params": ["search"], + "description": "Получение данных по всем ОГ" + } + } + } + } + } + }, + 404: { + "description": "Парсер не найден" + } + }) +async def get_parser_getters(parser_name: str): + """Получение информации о геттерах парсера""" + if parser_name not in PARSERS: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=f"Парсер '{parser_name}' не найден" + ) + + parser_class = PARSERS[parser_name] + parser_instance = parser_class() + + getters_info = parser_instance.get_available_getters() + + return { + "parser": parser_name, + "getters": getters_info + } + + @app.get("/server-info", tags=["Общее"], summary="Информация о сервере", response_model=ServerInfoResponse,) @@ -352,40 +400,40 @@ async def get_svodka_pm_total_ogs( raise HTTPException(status_code=500, detail=f"Внутренняя ошибка сервера: {str(e)}") -# @app.post("/svodka_pm/get_data", tags=[SvodkaPMParser.name]) -# async def get_svodka_pm_data( -# request_data: dict -# ): -# report_service = get_report_service() -# """ -# Получение данных из отчета сводки факта СарНПЗ +@app.post("/svodka_pm/get_data", tags=[SvodkaPMParser.name]) +async def get_svodka_pm_data( + request_data: dict +): + report_service = get_report_service() + """ + Получение данных из отчета сводки факта СарНПЗ -# - indicator_id: ID индикатора -# - code: Код для поиска -# - search_value: Опциональное значение для поиска -# """ -# try: -# # Создаем запрос -# request = DataRequest( -# report_type='svodka_pm', -# get_params=request_data -# ) + - indicator_id: ID индикатора + - code: Код для поиска + - search_value: Опциональное значение для поиска + """ + try: + # Создаем запрос + request = DataRequest( + report_type='svodka_pm', + get_params=request_data + ) -# # Получаем данные -# result = report_service.get_data(request) + # Получаем данные + result = report_service.get_data(request) -# if result.success: -# return { -# "success": True, -# "data": result.data -# } -# else: -# raise HTTPException(status_code=404, detail=result.message) + if result.success: + return { + "success": True, + "data": result.data + } + else: + raise HTTPException(status_code=404, detail=result.message) -# except HTTPException: -# raise -# except Exception as e: -# raise HTTPException(status_code=500, detail=f"Внутренняя ошибка сервера: {str(e)}") + except HTTPException: + raise + except Exception as e: + raise HTTPException(status_code=500, detail=f"Внутренняя ошибка сервера: {str(e)}") @app.post("/svodka_ca/upload", tags=[SvodkaCAParser.name], @@ -562,38 +610,38 @@ async def get_svodka_ca_data( # raise HTTPException(status_code=500, detail=f"Внутренняя ошибка сервера: {str(e)}") -# @app.post("/monitoring_fuel/get_data", tags=[MonitoringFuelParser.name]) -# async def get_monitoring_fuel_data( -# request_data: dict -# ): -# report_service = get_report_service() -# """ -# Получение данных из отчета мониторинга топлива +@app.post("/monitoring_fuel/get_data", tags=[MonitoringFuelParser.name]) +async def get_monitoring_fuel_data( + request_data: dict +): + report_service = get_report_service() + """ + Получение данных из отчета мониторинга топлива -# - column: Название колонки для агрегации (normativ, total, total_svod) -# """ -# try: -# # Создаем запрос -# request = DataRequest( -# report_type='monitoring_fuel', -# get_params=request_data -# ) + - column: Название колонки для агрегации (normativ, total, total_svod) + """ + try: + # Создаем запрос + request = DataRequest( + report_type='monitoring_fuel', + get_params=request_data + ) -# # Получаем данные -# result = report_service.get_data(request) + # Получаем данные + result = report_service.get_data(request) -# if result.success: -# return { -# "success": True, -# "data": result.data -# } -# else: -# raise HTTPException(status_code=404, detail=result.message) + if result.success: + return { + "success": True, + "data": result.data + } + else: + raise HTTPException(status_code=404, detail=result.message) -# except HTTPException: -# raise -# except Exception as e: -# raise HTTPException(status_code=500, detail=f"Внутренняя ошибка сервера: {str(e)}") + except HTTPException: + raise + except Exception as e: + raise HTTPException(status_code=500, detail=f"Внутренняя ошибка сервера: {str(e)}") # @app.post("/monitoring_fuel/upload_directory", tags=[MonitoringFuelParser.name])