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"
|
"password": "usuario1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
GET {{server}}/upload/zip
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
|
||||||
###
|
###
|
||||||
POST {{server}}/upload/zip/
|
POST {{server}}/upload/zip/
|
||||||
Authorization: Bearer {{token}}
|
Authorization: Bearer {{token}}
|
||||||
|
|
|
@ -1,26 +1,46 @@
|
||||||
|
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
|
from django.http import HttpResponse
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
import tempfile
|
import tempfile
|
||||||
import threading
|
import threading
|
||||||
import time
|
|
||||||
import shutil
|
|
||||||
import logging
|
import logging
|
||||||
import zipfile
|
import zipfile
|
||||||
import os
|
import os
|
||||||
import csv
|
import csv
|
||||||
|
import redis
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
@action(detail=False, methods=['post'])
|
@action(detail=False, methods=['get','post'])
|
||||||
def upload_zip(request):
|
def upload_zip(request):
|
||||||
|
|
||||||
if request.method == 'POST':
|
db_host = os.getenv('DB_REDIS_HOST')
|
||||||
filezip = request.FILES['filezip']
|
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'):
|
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 = threading.Thread(target=procesa_zip, args=(filezip,))
|
||||||
hilo.start()
|
hilo.start()
|
||||||
return JsonResponse({
|
return JsonResponse({
|
||||||
|
@ -33,9 +53,11 @@ def upload_zip(request):
|
||||||
'message': 'Error en archivo zip enviado'
|
'message': 'Error en archivo zip enviado'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def procesa_zip(file_upload):
|
def procesa_zip(file_upload):
|
||||||
carpeta_destino = tempfile.gettempdir()
|
carpeta_destino = tempfile.gettempdir()
|
||||||
# shutil.copy(filezip.temporary_file_path(), carpeta_destino)
|
|
||||||
|
|
||||||
# descomprimir archivo zip
|
# descomprimir archivo zip
|
||||||
archivo_zip = zipfile.ZipFile(file_upload.temporary_file_path(), "r")
|
archivo_zip = zipfile.ZipFile(file_upload.temporary_file_path(), "r")
|
||||||
|
@ -72,13 +94,15 @@ def procesa_zip(file_upload):
|
||||||
cur.close()
|
cur.close()
|
||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
# for i in range(10):
|
|
||||||
# time.sleep(1)
|
|
||||||
# print('.', end='', flush=True)
|
|
||||||
|
|
||||||
print('==============', flush=True)
|
print('==============', flush=True)
|
||||||
print(f'fin proceso archivo: {archivo_zip}', 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
|
# Función para crear la definición de la tabla como texto y cargar los datos
|
||||||
|
|
Loading…
Reference in New Issue