ср не понятные проблемы
This commit is contained in:
@@ -160,13 +160,23 @@ class SvodkaPMParser(ParserPort):
|
|||||||
if last_good_name:
|
if last_good_name:
|
||||||
new_columns.append(last_good_name)
|
new_columns.append(last_good_name)
|
||||||
else:
|
else:
|
||||||
# Если нет хорошего имени, пропускаем
|
# Если нет хорошего имени, используем имя по умолчанию
|
||||||
continue
|
new_columns.append(f"col_{len(new_columns)}")
|
||||||
else:
|
else:
|
||||||
# Это хорошая колонка
|
# Это хорошая колонка
|
||||||
last_good_name = col_str
|
last_good_name = col_str
|
||||||
new_columns.append(col_str)
|
new_columns.append(col_str)
|
||||||
|
|
||||||
|
# Убеждаемся, что количество столбцов совпадает
|
||||||
|
if len(new_columns) != len(df_final.columns):
|
||||||
|
# Если количество не совпадает, обрезаем или дополняем
|
||||||
|
if len(new_columns) > len(df_final.columns):
|
||||||
|
new_columns = new_columns[:len(df_final.columns)]
|
||||||
|
else:
|
||||||
|
# Дополняем недостающие столбцы
|
||||||
|
while len(new_columns) < len(df_final.columns):
|
||||||
|
new_columns.append(f"col_{len(new_columns)}")
|
||||||
|
|
||||||
# Применяем новые заголовки
|
# Применяем новые заголовки
|
||||||
df_final.columns = new_columns
|
df_final.columns = new_columns
|
||||||
|
|
||||||
@@ -256,8 +266,9 @@ class SvodkaPMParser(ParserPort):
|
|||||||
''' Служебная функция получения данных по одному ОГ '''
|
''' Служебная функция получения данных по одному ОГ '''
|
||||||
result = {}
|
result = {}
|
||||||
|
|
||||||
fact_df = pm_dict['facts'][id]
|
# Безопасно получаем данные, проверяя их наличие
|
||||||
plan_df = pm_dict['plans'][id]
|
fact_df = pm_dict.get('facts', {}).get(id) if 'facts' in pm_dict else None
|
||||||
|
plan_df = pm_dict.get('plans', {}).get(id) if 'plans' in pm_dict else None
|
||||||
|
|
||||||
# Определяем, какие столбцы из какого датафрейма брать
|
# Определяем, какие столбцы из какого датафрейма брать
|
||||||
for col in columns:
|
for col in columns:
|
||||||
@@ -266,6 +277,7 @@ class SvodkaPMParser(ParserPort):
|
|||||||
if col in ['ПП', 'БП']:
|
if col in ['ПП', 'БП']:
|
||||||
if plan_df is None:
|
if plan_df is None:
|
||||||
print(f"❌ Невозможно обработать '{col}': нет данных плана для {id}")
|
print(f"❌ Невозможно обработать '{col}': нет данных плана для {id}")
|
||||||
|
col_result = {code: None for code in codes}
|
||||||
else:
|
else:
|
||||||
for code in codes:
|
for code in codes:
|
||||||
val = self.get_svodka_value(plan_df, code, col, search_value)
|
val = self.get_svodka_value(plan_df, code, col, search_value)
|
||||||
@@ -274,6 +286,7 @@ class SvodkaPMParser(ParserPort):
|
|||||||
elif col in ['ТБ', 'СЭБ', 'НЭБ']:
|
elif col in ['ТБ', 'СЭБ', 'НЭБ']:
|
||||||
if fact_df is None:
|
if fact_df is None:
|
||||||
print(f"❌ Невозможно обработать '{col}': нет данных факта для {id}")
|
print(f"❌ Невозможно обработать '{col}': нет данных факта для {id}")
|
||||||
|
col_result = {code: None for code in codes}
|
||||||
else:
|
else:
|
||||||
for code in codes:
|
for code in codes:
|
||||||
val = self.get_svodka_value(fact_df, code, col, search_value)
|
val = self.get_svodka_value(fact_df, code, col, search_value)
|
||||||
|
|||||||
@@ -323,7 +323,7 @@ async def get_svodka_pm_single_og(
|
|||||||
try:
|
try:
|
||||||
# Создаем запрос
|
# Создаем запрос
|
||||||
request_dict = request_data.model_dump()
|
request_dict = request_data.model_dump()
|
||||||
request_dict['mode'] = 'single'
|
request_dict['mode'] = 'single_og'
|
||||||
request = DataRequest(
|
request = DataRequest(
|
||||||
report_type='svodka_pm',
|
report_type='svodka_pm',
|
||||||
get_params=request_dict
|
get_params=request_dict
|
||||||
@@ -377,7 +377,7 @@ async def get_svodka_pm_total_ogs(
|
|||||||
try:
|
try:
|
||||||
# Создаем запрос
|
# Создаем запрос
|
||||||
request_dict = request_data.model_dump()
|
request_dict = request_data.model_dump()
|
||||||
request_dict['mode'] = 'total'
|
request_dict['mode'] = 'total_ogs'
|
||||||
request = DataRequest(
|
request = DataRequest(
|
||||||
report_type='svodka_pm',
|
report_type='svodka_pm',
|
||||||
get_params=request_dict
|
get_params=request_dict
|
||||||
|
|||||||
@@ -138,6 +138,20 @@ class ReportService:
|
|||||||
success=False,
|
success=False,
|
||||||
message="Парсер не имеет доступных геттеров"
|
message="Парсер не имеет доступных геттеров"
|
||||||
)
|
)
|
||||||
|
elif request.report_type == 'svodka_pm':
|
||||||
|
# Для svodka_pm определяем геттер из параметра mode
|
||||||
|
getter_name = get_params.pop("mode", None)
|
||||||
|
if not getter_name:
|
||||||
|
# Если режим не указан, берем первый доступный
|
||||||
|
available_getters = list(parser.getters.keys())
|
||||||
|
if available_getters:
|
||||||
|
getter_name = available_getters[0]
|
||||||
|
print(f"⚠️ Режим не указан, используем первый доступный: {getter_name}")
|
||||||
|
else:
|
||||||
|
return DataResult(
|
||||||
|
success=False,
|
||||||
|
message="Парсер не имеет доступных геттеров"
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
# Для других парсеров определяем из параметра mode
|
# Для других парсеров определяем из параметра mode
|
||||||
getter_name = get_params.pop("mode", None)
|
getter_name = get_params.pop("mode", None)
|
||||||
|
|||||||
20
python_parser/test_app.py
Normal file
20
python_parser/test_app.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Простой тест для проверки работы FastAPI
|
||||||
|
"""
|
||||||
|
from fastapi import FastAPI
|
||||||
|
|
||||||
|
app = FastAPI(title="Test API")
|
||||||
|
|
||||||
|
@app.get("/")
|
||||||
|
async def root():
|
||||||
|
return {"message": "Test API is working"}
|
||||||
|
|
||||||
|
@app.get("/health")
|
||||||
|
async def health():
|
||||||
|
return {"status": "ok"}
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import uvicorn
|
||||||
|
print("Starting test server...")
|
||||||
|
uvicorn.run(app, host="0.0.0.0", port=8000)
|
||||||
Reference in New Issue
Block a user