44 lines
1.9 KiB
Python
44 lines
1.9 KiB
Python
import os
|
||
import re
|
||
from datetime import datetime, timedelta
|
||
from celery import shared_task
|
||
from django.conf import settings
|
||
import logging
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
@shared_task
|
||
def delete_old_import_error_files():
|
||
"""
|
||
Удаляет файлы с ошибками импорта, которые не были скачаны пользователем в течение 24 часов.
|
||
"""
|
||
temp_imports_dir = os.path.join(settings.MEDIA_ROOT, 'temp_imports')
|
||
if not os.path.exists(temp_imports_dir):
|
||
logger.info(f"Директория {temp_imports_dir} не существует. Задача завершена.")
|
||
return
|
||
|
||
current_time = datetime.now()
|
||
files_deleted = 0
|
||
|
||
for filename in os.listdir(temp_imports_dir):
|
||
file_path = os.path.join(temp_imports_dir, filename)
|
||
if os.path.isfile(file_path):
|
||
# Извлекаем дату и время из имени файла
|
||
match = re.search(r'customer_import_errors_(\d{8})_(\d{6})\.xlsx', filename)
|
||
if match:
|
||
file_date_str = match.group(1)
|
||
file_time_str = match.group(2)
|
||
file_datetime = datetime.strptime(f"{file_date_str} {file_time_str}", "%Y%m%d %H%M%S")
|
||
|
||
# Проверяем, прошло ли 24 часа с момента создания файла
|
||
if current_time - file_datetime > timedelta(hours=24):
|
||
try:
|
||
os.remove(file_path)
|
||
files_deleted += 1
|
||
logger.info(f"Удален файл: {file_path}")
|
||
except Exception as e:
|
||
logger.error(f"Ошибка при удалении файла {file_path}: {e}")
|
||
|
||
logger.info(f"Удалено {files_deleted} устаревших файлов.")
|
||
return files_deleted |