ср не понятные проблемы

This commit is contained in:
2025-09-02 22:37:26 +03:00
parent eb6d23bba8
commit 15d13870f3
4 changed files with 53 additions and 6 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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
View 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)