Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
m3_webInterface
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
m3
m3_webInterface
Commits
d282e884
Commit
d282e884
authored
Mar 31, 2025
by
Ulises Morales Ramírez
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
manejo del get
parent
92c577c4
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
52 additions
and
22 deletions
+52
-22
views.py
catalog/views.py
+52
-22
No files found.
catalog/views.py
View file @
d282e884
...
...
@@ -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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment