fix time
parent
62c0e37b6d
commit
881210cd04
51
app.py
51
app.py
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in New Issue