manejo del get

parent 92c577c4
...@@ -592,57 +592,87 @@ def run_update_and_report(request): ...@@ -592,57 +592,87 @@ def run_update_and_report(request):
if request.method != 'POST': if request.method != 'POST':
return HttpResponseNotAllowed(['POST']) return HttpResponseNotAllowed(['POST'])
# Inicializar variables para recopilar resultados y errores
results = {
'status': 'success',
'messages': [],
'errors': [],
'api_response': None
}
status_code = 200
try: try:
# Leer y validar JSON del request # Leer y validar JSON del request
try: try:
data = json.loads(request.body) data = json.loads(request.body)
except json.JSONDecodeError: except json.JSONDecodeError as e:
return JsonResponse({'status': 'error', 'message': 'JSON inválido'}, status=400) 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/') db_path = data.get('db_path', '/data/m3/news/')
json_output_path = data.get('output_path', 'catalog/static/js/data.js') json_output_path = data.get('output_path', 'catalog/static/js/data.js')
# Ejecutar los comandos de Django con manejo de errores # Ejecutar updateDB
try: try:
call_command('updateDB', db_path) call_command('updateDB', db_path)
results['messages'].append('updateDB ejecutado correctamente')
except Exception as e: 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: try:
call_command('report', json_output_path) call_command('report', json_output_path)
results['messages'].append(f'Reporte generado en {json_output_path}')
except Exception as e: 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 # Obtener la última fecha de ejecución
try: try:
last_execution_date = read_last_execution_date() or datetime.date.today().strftime('%Y-%m-%d') 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_inicio = last_execution_date
fecha_final = (datetime.date.today() - datetime.timedelta(days=1)).strftime('%Y-%m-%d') 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 # Enviar solicitud POST a API externa
payload = {"fecha_inicio": fecha_inicio, "fecha_final": fecha_final}
try: try:
payload = {"fecha_inicio": fecha_inicio, "fecha_final": fecha_final}
response = requests.post("https://em.geoint.mx/m3/processnews", json=payload, timeout=10) 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: 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 # Guardar nueva fecha de ejecución
try: try:
write_execution_date() write_execution_date()
results['messages'].append('Fecha de ejecución actualizada')
except Exception as e: except Exception as e:
return JsonResponse({'status': 'error', 'message': f'Error al escribir fecha de ejecución: {str(e)}'}, status=500) results['status'] = 'partial_success'
results['errors'].append(f'Error al escribir fecha de ejecución: {str(e)}')
return JsonResponse({
'status': 'success',
'message': f'Reporte generado en {json_output_path}',
'api_response': response.json()
})
except Exception as e: except Exception as e:
print(traceback.format_exc()) # Muestra error completo en consola # Este bloque captura errores inesperados no manejados en los bloques try internos
return JsonResponse({'status': 'error', 'message': f'Error inesperado: {str(e)}'}, status=500) 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