forked from TDTP/admin_transporte_backend
se notifica a redis que se inicio proceso de archivo zip
parent
edb2e21927
commit
d35e135565
|
@ -12,6 +12,11 @@ Content-Type: application/json
|
|||
"password": "usuario1"
|
||||
}
|
||||
|
||||
|
||||
###
|
||||
GET {{server}}/upload/zip
|
||||
Authorization: Bearer {{token}}
|
||||
|
||||
###
|
||||
POST {{server}}/upload/zip/
|
||||
Authorization: Bearer {{token}}
|
||||
|
|
|
@ -1,26 +1,46 @@
|
|||
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.http import JsonResponse
|
||||
from django.http import HttpResponse
|
||||
from rest_framework.decorators import action
|
||||
from django.db import connection
|
||||
import tempfile
|
||||
import threading
|
||||
import time
|
||||
import shutil
|
||||
import logging
|
||||
import zipfile
|
||||
import os
|
||||
import csv
|
||||
import redis
|
||||
|
||||
|
||||
|
||||
@csrf_exempt
|
||||
@action(detail=False, methods=['post'])
|
||||
@action(detail=False, methods=['get','post'])
|
||||
def upload_zip(request):
|
||||
|
||||
if request.method == 'POST':
|
||||
filezip = request.FILES['filezip']
|
||||
db_host = os.getenv('DB_REDIS_HOST')
|
||||
db_port = os.getenv('DB_REDIS_PORT')
|
||||
r = redis.Redis(host=db_host, port=db_port, decode_responses=True)
|
||||
|
||||
if request.method == 'GET':
|
||||
filezip = r.get('filezip')
|
||||
return JsonResponse({
|
||||
'process': filezip != None,
|
||||
'filename': filezip
|
||||
})
|
||||
|
||||
if request.method == 'POST':
|
||||
|
||||
status = r.get('filezip')
|
||||
if status != None:
|
||||
return HttpResponse('Ya existe un proceso en ejecución', status=400)
|
||||
|
||||
filezip = request.FILES['filezip']
|
||||
if filezip.closed == False and hasattr(filezip,'temporary_file_path'):
|
||||
|
||||
# Notificar a Redis que proceso ha iniciado
|
||||
r.set('filezip', filezip.name)
|
||||
|
||||
hilo = threading.Thread(target=procesa_zip, args=(filezip,))
|
||||
hilo.start()
|
||||
return JsonResponse({
|
||||
|
@ -33,9 +53,11 @@ def upload_zip(request):
|
|||
'message': 'Error en archivo zip enviado'
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
def procesa_zip(file_upload):
|
||||
carpeta_destino = tempfile.gettempdir()
|
||||
# shutil.copy(filezip.temporary_file_path(), carpeta_destino)
|
||||
|
||||
# descomprimir archivo zip
|
||||
archivo_zip = zipfile.ZipFile(file_upload.temporary_file_path(), "r")
|
||||
|
@ -72,13 +94,15 @@ def procesa_zip(file_upload):
|
|||
cur.close()
|
||||
connection.commit()
|
||||
|
||||
# for i in range(10):
|
||||
# time.sleep(1)
|
||||
# print('.', end='', flush=True)
|
||||
|
||||
print('==============', flush=True)
|
||||
print(f'fin proceso archivo: {archivo_zip}', flush=True)
|
||||
|
||||
# notificar a Redis que proceso ha finalizado
|
||||
db_host = os.getenv('DB_REDIS_HOST')
|
||||
db_port = os.getenv('DB_REDIS_PORT')
|
||||
r = redis.Redis(host=db_host, port=db_port, decode_responses=True)
|
||||
r.delete('filezip')
|
||||
|
||||
|
||||
|
||||
# Función para crear la definición de la tabla como texto y cargar los datos
|
||||
|
|
Loading…
Reference in New Issue