manejo del get

parent 92c577c4
......@@ -592,57 +592,87 @@ def run_update_and_report(request):
if request.method != 'POST':
return HttpResponseNotAllowed(['POST'])
# Inicializar variables para recopilar resultados y errores
results = {
'status': 'success',
'messages': [],
'errors': [],
'api_response': None
}
status_code = 200
try:
# Leer y validar JSON del request
try:
data = json.loads(request.body)
except json.JSONDecodeError:
return JsonResponse({'status': 'error', 'message': 'JSON inválido'}, status=400)
except json.JSONDecodeError as e:
results['status'] = 'partial_success'
results['errors'].append('JSON inválido')
status_code = 400
data = {} # Usar valores por defecto
db_path = data.get('db_path', '/data/m3/news/')
json_output_path = data.get('output_path', 'catalog/static/js/data.js')
# Ejecutar los comandos de Django con manejo de errores
# Ejecutar updateDB
try:
call_command('updateDB', db_path)
results['messages'].append('updateDB ejecutado correctamente')
except Exception as e:
return JsonResponse({'status': 'error', 'message': f'Error en updateDB: {str(e)}'}, status=500)
results['status'] = 'partial_success'
results['errors'].append(f'Error en updateDB: {str(e)}')
# No hacemos return, continuamos con el siguiente comando
# Ejecutar report
try:
call_command('report', json_output_path)
results['messages'].append(f'Reporte generado en {json_output_path}')
except Exception as e:
return JsonResponse({'status': 'error', 'message': f'Error en report: {str(e)}'}, status=500)
results['status'] = 'partial_success'
results['errors'].append(f'Error en report: {str(e)}')
# Obtener la última fecha de ejecución
try:
last_execution_date = read_last_execution_date() or datetime.date.today().strftime('%Y-%m-%d')
except Exception as e:
return JsonResponse({'status': 'error', 'message': f'Error al leer fecha de ejecución: {str(e)}'}, status=500)
fecha_inicio = last_execution_date
fecha_final = (datetime.date.today() - datetime.timedelta(days=1)).strftime('%Y-%m-%d')
except Exception as e:
results['status'] = 'partial_success'
results['errors'].append(f'Error al leer fecha de ejecución: {str(e)}')
# Usar fechas por defecto si hay error
fecha_inicio = datetime.date.today().strftime('%Y-%m-%d')
fecha_final = (datetime.date.today() - datetime.timedelta(days=1)).strftime('%Y-%m-%d')
# Enviar solicitud POST a API externa
payload = {"fecha_inicio": fecha_inicio, "fecha_final": fecha_final}
try:
payload = {"fecha_inicio": fecha_inicio, "fecha_final": fecha_final}
response = requests.post("https://em.geoint.mx/m3/processnews", json=payload, timeout=10)
response.raise_for_status() # Lanza error si la respuesta no es 200
response.raise_for_status()
results['api_response'] = response.json()
results['messages'].append('API externa llamada correctamente')
except requests.exceptions.RequestException as e:
return JsonResponse({'status': 'error', 'message': f'Error en API externa: {str(e)}'}, status=500)
results['status'] = 'partial_success'
results['errors'].append(f'Error en API externa: {str(e)}')
# Guardar nueva fecha de ejecución
try:
write_execution_date()
results['messages'].append('Fecha de ejecución actualizada')
except Exception as e:
return JsonResponse({'status': 'error', 'message': f'Error al escribir fecha de ejecución: {str(e)}'}, status=500)
return JsonResponse({
'status': 'success',
'message': f'Reporte generado en {json_output_path}',
'api_response': response.json()
})
results['status'] = 'partial_success'
results['errors'].append(f'Error al escribir fecha de ejecución: {str(e)}')
except Exception as e:
print(traceback.format_exc()) # Muestra error completo en consola
return JsonResponse({'status': 'error', 'message': f'Error inesperado: {str(e)}'}, status=500)
# Este bloque captura errores inesperados no manejados en los bloques try internos
print(traceback.format_exc())
results['status'] = 'error'
results['errors'].append(f'Error inesperado: {str(e)}')
status_code = 500
# Determinar el código de estado final
if results['status'] == 'error':
status_code = 500
elif results['status'] == 'partial_success' and status_code == 200:
status_code = 207 # Multi-Status, si todo fue parcial
return JsonResponse(results, status=status_code)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment