feature/implementacion de gestor de informacion y archivos minIO
This commit is contained in:
@@ -26,6 +26,49 @@ from api.organization.models import Organizacion
|
||||
from api.record.models import Document
|
||||
from .tasks.auditoria import auditar_pedimento_por_id
|
||||
from .tasks.auditoria_xml import extraer_info_pedimento_xml
|
||||
import tempfile
|
||||
import os
|
||||
from api.utils.storage_service import storage_service
|
||||
|
||||
def get_document_content(documento):
|
||||
"""
|
||||
Obtiene el contenido de un documento (MinIO o local).
|
||||
Retorna el contenido como string o bytes.
|
||||
"""
|
||||
ruta = str(documento.archivo)
|
||||
|
||||
with tempfile.NamedTemporaryFile(delete=False) as tmp:
|
||||
tmp_path = tmp.name
|
||||
|
||||
try:
|
||||
success = storage_service.download_file(ruta, tmp_path)
|
||||
if not success:
|
||||
return None
|
||||
|
||||
with open(tmp_path, 'r', encoding='utf-8', errors='ignore') as f:
|
||||
content = f.read()
|
||||
|
||||
return content
|
||||
finally:
|
||||
if os.path.exists(tmp_path):
|
||||
os.unlink(tmp_path)
|
||||
|
||||
def get_document_path(documento):
|
||||
"""
|
||||
Obtiene la ruta temporal de un documento para lectura.
|
||||
Retorna la ruta del archivo temporal descargado.
|
||||
"""
|
||||
ruta = str(documento.archivo)
|
||||
|
||||
tmp = tempfile.NamedTemporaryFile(delete=False)
|
||||
tmp_path = tmp.name
|
||||
tmp.close()
|
||||
|
||||
success = storage_service.download_file(ruta, tmp_path)
|
||||
if not success:
|
||||
return None
|
||||
|
||||
return tmp_path
|
||||
|
||||
@swagger_auto_schema(
|
||||
method='post',
|
||||
@@ -729,10 +772,10 @@ def auditar_peticion_respuesta_pedimento_completo(request):
|
||||
for documento in documentos_peticion:
|
||||
|
||||
nombre_archivo = os.path.basename(documento.archivo.name)
|
||||
|
||||
ruta_temporal = get_document_path(documento)
|
||||
documentos_lista_peticiones.append({
|
||||
'id': str(documento.id),
|
||||
'archivo': documento.archivo.path,
|
||||
'archivo': ruta_temporal,
|
||||
'archivo_original': nombre_archivo,
|
||||
'extension': documento.extension,
|
||||
'size': documento.size,
|
||||
@@ -1623,36 +1666,32 @@ def auditar_pedimento_endpoint(request):
|
||||
try:
|
||||
xml_info = {
|
||||
'documento_id': str(documento.id),
|
||||
'nombre_archivo': os.path.basename(documento.archivo.name),
|
||||
'nombre_archivo': os.path.basename(str(documento.archivo)),
|
||||
'tamanio': documento.size,
|
||||
'extension': documento.extension,
|
||||
'tipo_documento': documento.document_type.descripcion if documento.document_type else 'Desconocido'
|
||||
}
|
||||
|
||||
# Intentar extraer información del XML
|
||||
try:
|
||||
with open(documento.archivo.path, 'r', encoding='utf-8') as xml_file:
|
||||
xml_content = xml_file.read()
|
||||
|
||||
# Extraer información específica del XML
|
||||
xml_content = get_document_content(documento)
|
||||
|
||||
if xml_content is None:
|
||||
xml_info['error_lectura'] = 'No se pudo descargar el archivo'
|
||||
else:
|
||||
info_pedimento = extraer_info_pedimento_xml(xml_content)
|
||||
|
||||
if info_pedimento:
|
||||
xml_info['informacion_extraida'] = info_pedimento
|
||||
informacion_extraida.append(info_pedimento)
|
||||
|
||||
|
||||
# Actualizar el pedimento con la información encontrada si es necesario
|
||||
actualizar_info_pedimento(pedimento, info_pedimento)
|
||||
|
||||
except Exception as e:
|
||||
xml_info['error_lectura'] = str(e)
|
||||
|
||||
xmls_analizados.append(xml_info)
|
||||
|
||||
except Exception as e:
|
||||
xmls_analizados.append({
|
||||
'documento_id': str(documento.id),
|
||||
'nombre_archivo': os.path.basename(documento.archivo.name),
|
||||
'nombre_archivo': os.path.basename(str(documento.archivo)),
|
||||
'error': f'Error procesando archivo: {str(e)}'
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user