feature/implementacion de gestor de informacion y archivos minIO
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
from api.reports.models import ReportDocument
|
||||
from api.reports.tasks.report_document import generate_report_document, generate_report_control_pedimento
|
||||
from django.http import FileResponse
|
||||
from api.utils.storage_service import storage_service
|
||||
from rest_framework.decorators import api_view, permission_classes
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
import tempfile
|
||||
import os
|
||||
import atexit
|
||||
|
||||
@api_view(['GET'])
|
||||
@permission_classes([IsAuthenticated])
|
||||
@@ -71,7 +75,9 @@ def table_summary(request):
|
||||
"report_id": report.id,
|
||||
"status": report.status,
|
||||
"created_at": report.created_at,
|
||||
"download_url": report.file.url if report.file else None
|
||||
# "download_url": report.file.url if report.file else None
|
||||
"download_url": storage_service.get_file_url(report.file) if report.file else None
|
||||
|
||||
}, status=202)
|
||||
|
||||
@api_view(['GET'])
|
||||
@@ -85,7 +91,9 @@ def report_document_status(request, report_id):
|
||||
"created_at": report.created_at,
|
||||
"finished_at": report.finished_at,
|
||||
"error_message": report.error_message,
|
||||
"download_url": report.file.url if report.file else None
|
||||
# "download_url": report.file.url if report.file else None
|
||||
"download_url": storage_service.get_file_url(report.file) if report.file else None
|
||||
|
||||
}
|
||||
return Response(data)
|
||||
except ReportDocument.DoesNotExist:
|
||||
@@ -103,7 +111,8 @@ def report_document_list(request):
|
||||
"created_at": r.created_at,
|
||||
"finished_at": r.finished_at,
|
||||
"error_message": r.error_message,
|
||||
"download_url": r.file.url if r.file else None
|
||||
# "download_url": r.file.url if r.file else None
|
||||
"download_url": storage_service.get_file_url(r.file) if r.file else None
|
||||
}
|
||||
for r in reports
|
||||
]
|
||||
@@ -116,8 +125,22 @@ def report_document_download(request, report_id):
|
||||
report = ReportDocument.objects.get(id=report_id, user=request.user)
|
||||
if not report.file:
|
||||
return Response({"error": "El archivo aún no está disponible"}, status=404)
|
||||
response = FileResponse(report.file.open('rb'), as_attachment=True, filename=report.file.name)
|
||||
|
||||
ruta = str(report.file)
|
||||
with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp:
|
||||
tmp_path = tmp.name
|
||||
|
||||
success = storage_service.download_file(ruta, tmp_path)
|
||||
if not success:
|
||||
return Response({"error": "No se pudo descargar el archivo"}, status=500)
|
||||
|
||||
filename = os.path.basename(ruta)
|
||||
response = FileResponse(open(tmp_path, 'rb'),as_attachment=True,filename=filename)
|
||||
|
||||
atexit.register(lambda: os.unlink(tmp_path) if os.path.exists(tmp_path) else None)
|
||||
|
||||
return response
|
||||
|
||||
except ReportDocument.DoesNotExist:
|
||||
return Response({"error": "Reporte no encontrado"}, status=404)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user