main
Satur@it-depot.ru 2025-03-05 11:15:04 +03:00
parent 62c0e37b6d
commit 881210cd04
1 changed files with 44 additions and 7 deletions

51
app.py
View File

@ -121,9 +121,24 @@ def get_installs():
LEFT JOIN folders f ON i.folder_id = f.id
""")
rows = cursor.fetchall()
# Форматируем время для вывода в читаемом формате
# Обработка времени в разных форматах
def format_time(time_str):
if not time_str:
return None
try:
# Пробуем разобрать ISO 8601 (с T и Z)
dt = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S.%fZ")
return dt.strftime("%Y-%m-%d %H:%M:%S")
except ValueError:
try:
# Пробуем разобрать наш читаемый формат
dt = datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
return dt.strftime("%Y-%m-%d %H:%M:%S")
except ValueError:
return time_str # Возвращаем как есть, если формат не распознан
return [{"id": row[0], "rust_id": row[1], "computer_name": row[2],
"install_time": datetime.datetime.strptime(row[3], "%Y-%m-%d %H:%M:%S").strftime("%Y-%m-%d %H:%M:%S") if row[3] else None,
"install_time": format_time(row[3]),
"folder_id": row[4], "folder_name": row[5], "protocol": row[6]}
for row in rows]
@ -198,8 +213,8 @@ async def export_csv(folder_id: int | None = Query(None, description="ID пап
writer = csv.writer(output, lineterminator='\n')
writer.writerow(['ID подключения', 'Имя компьютера', 'Время установки', 'Папка', 'Протокол'])
for row in rows:
# Форматируем время для CSV в читаемом формате
install_time = datetime.datetime.strptime(row[2], "%Y-%m-%d %H:%M:%S").strftime("%Y-%m-%d %H:%M:%S") if row[2] else ""
# Обработка времени в разных форматах
install_time = format_time(row[2]) if row[2] else ""
writer.writerow([row[0], row[1], install_time, row[3], row[4]])
headers = {
@ -208,6 +223,21 @@ async def export_csv(folder_id: int | None = Query(None, description="ID пап
}
return StreamingResponse(iter([output.getvalue()]), headers=headers)
def format_time(time_str):
if not time_str:
return None
try:
# Пробуем разобрать ISO 8601 (с T и Z)
dt = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S.%fZ")
return dt.strftime("%Y-%m-%d %H:%M:%S")
except ValueError:
try:
# Пробуем разобрать наш читаемый формат
dt = datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
return dt.strftime("%Y-%m-%d %H:%M:%S")
except ValueError:
return time_str # Возвращаем как есть, если формат не распознан
@app.post("/api/import/csv")
async def import_csv(file: UploadFile = File(...), folder_id: int | None = Query(None, description="ID папки для импорта, если None - использовать 'Несортированные'")):
try:
@ -229,12 +259,19 @@ async def import_csv(file: UploadFile = File(...), folder_id: int | None = Query
if cursor.fetchone():
continue # Пропускаем дублирующуюся запись
# Проверяем формат времени
# Проверяем и форматируем время
if install_time:
try:
datetime.datetime.strptime(install_time, "%Y-%m-%d %H:%M:%S")
# Пробуем разобрать время в формате YYYY-MM-DD HH:MM:SS
dt = datetime.datetime.strptime(install_time, "%Y-%m-%d %H:%M:%S")
install_time = dt.strftime("%Y-%m-%d %H:%M:%S")
except ValueError:
raise HTTPException(status_code=400, detail=f"Неверный формат времени для записи с ID {rust_id}. Используйте YYYY-MM-DD HH:MM:SS")
try:
# Пробуем разобрать ISO 8601 (если в CSV другой формат)
dt = datetime.datetime.strptime(install_time, "%Y-%m-%dT%H:%M:%S.%fZ")
install_time = dt.strftime("%Y-%m-%d %H:%M:%S")
except ValueError:
raise HTTPException(status_code=400, detail=f"Неверный формат времени для записи с ID {rust_id}. Используйте YYYY-MM-DD HH:MM:SS или ISO 8601")
# Получаем или создаем ID папки
if folder_name: