Discussion:
[pyar] Problemas con Swagger usando Flask
Alejandro Marchan
2018-11-20 20:06:55 UTC
Permalink
Comunidad de Python, saludos para todos.

Les escribo para solicitar su ayuda ya que tengo un tema que me trae de
cabeza y no he podido resolverlo de ninguna forma.

Por primera vez estoy usando Python, lo vimos como el lenguaje más
apropiado y sencillo para resolver unos requerimientos que surgieron en
nuestro departamento y allí vamos dándole.

Hemos estado desarrollando unos microservicios web usando la librería Flask
para levantar el servicio y para también hacer la respectiva documentación
con Swagger. Nos han salido 3 microservicios, pero ahora tenemos un caso
que no lo he podido resolver, tampoco tengo idea de cómo solucionarlo ni he
tenido a quien recurrir ya que pocos conocen de Python en el trabajo y
menos sobre esa librería.

Ese servicio es invocado desde un HTLM.
En sí lo que hace eso es invocar al Microservicio de Python que al
invocarse llama a un Store Procedure de Oracle que devuelve un varchar con
formato JSON con algo así:

*{"list_pais": [
{"pais":"URUGUAY"},{"pais":"ARGENTINA"},{"pais":"PARAGUAY"},{"pais":"VENEZUELA"}]
}*

Y en la página HTML se ve como una lista. Hasta allí todo va bien.

Ahora cuando quiero documentar esa salida en el swagger, no se visualiza,
dice las especificaciones del servicio pero no el modelo de salida que
debería ser algo así (creo yo):

*{"list_pais":*
* ["pais": string]*
*}*

Pero esa parte no encuentro como detallarla en el modelo. He colocado algo
así:

md_respuesta = api.model('getCountry', {
'pais': fields.String(required=True, description='Agrupador de paises'),
'list_pais': fields.String(required=True, description='Nombre del Pais')
})


Pero eso no es la realidad. He querido colocar "list_pais" como nested o
como list pero si pongo algo así, el swagger muere ya que me dice "No Api
specification". Hasta ahora no tenemos problemas porque el Microservicio
está trabajando, pero la gente de arquitectura nos anda pidiendo que
también funcione el Swagger y no hemos podido hacer nada.

En el siguiente link escribí en un foro donde coloqué otras pruebas que he
estado haciendo para probar otras formar y nada que me funciona:

https://stackoverflow.com/questions/53268702/python-swagger-trouble

Alguien ha trabajado con eso a ver si me puede echar una mano? Disculpen lo
extenso, pero no sé si con ello logro dar un buen detalle del problema que
no he podido resolver. Acá les adjunto el servicio que tenemos funcionando,
no es lo más óptimo ni bonito de seguro pero allí vamos!

sources_predictivo_prod.zip
<https://drive.google.com/file/d/12imyTAD_xyx_MfpLaFu9BqMniqVs-kIR/view?usp=drive_web>
--
Atte.
Alejandro Marchán.
Juan Francisco Mosquera
2018-11-20 21:23:25 UTC
Permalink
Hello man , Try to check it
http://michal.karzynski.pl/blog/2016/06/19/building-beautiful-restful-apis-using-flask-swagger-ui-flask-restplus/
, but could you send me an error message with the trace ?.

I would like help to you , I wait for your comments.

*Student Master of Science in Computer Science *
Post by Alejandro Marchan
Comunidad de Python, saludos para todos.
Les escribo para solicitar su ayuda ya que tengo un tema que me trae de
cabeza y no he podido resolverlo de ninguna forma.
Por primera vez estoy usando Python, lo vimos como el lenguaje más
apropiado y sencillo para resolver unos requerimientos que surgieron en
nuestro departamento y allí vamos dándole.
Hemos estado desarrollando unos microservicios web usando la librería
Flask para levantar el servicio y para también hacer la respectiva
documentación con Swagger. Nos han salido 3 microservicios, pero ahora
tenemos un caso que no lo he podido resolver, tampoco tengo idea de cómo
solucionarlo ni he tenido a quien recurrir ya que pocos conocen de Python
en el trabajo y menos sobre esa librería.
Ese servicio es invocado desde un HTLM.
En sí lo que hace eso es invocar al Microservicio de Python que al
invocarse llama a un Store Procedure de Oracle que devuelve un varchar con
*{"list_pais": [
{"pais":"URUGUAY"},{"pais":"ARGENTINA"},{"pais":"PARAGUAY"},{"pais":"VENEZUELA"}]
}*
Y en la página HTML se ve como una lista. Hasta allí todo va bien.
Ahora cuando quiero documentar esa salida en el swagger, no se visualiza,
dice las especificaciones del servicio pero no el modelo de salida que
*{"list_pais":*
* ["pais": string]*
*}*
Pero esa parte no encuentro como detallarla en el modelo. He colocado algo
md_respuesta = api.model('getCountry', {
'pais': fields.String(required=True, description='Agrupador de paises'),
'list_pais': fields.String(required=True, description='Nombre del Pais')
})
Pero eso no es la realidad. He querido colocar "list_pais" como nested o
como list pero si pongo algo así, el swagger muere ya que me dice "No Api
specification". Hasta ahora no tenemos problemas porque el Microservicio
está trabajando, pero la gente de arquitectura nos anda pidiendo que
también funcione el Swagger y no hemos podido hacer nada.
En el siguiente link escribí en un foro donde coloqué otras pruebas que he
https://stackoverflow.com/questions/53268702/python-swagger-trouble
Alguien ha trabajado con eso a ver si me puede echar una mano? Disculpen
lo extenso, pero no sé si con ello logro dar un buen detalle del problema
que no he podido resolver. Acá les adjunto el servicio que tenemos
funcionando, no es lo más óptimo ni bonito de seguro pero allí vamos!
sources_predictivo_prod.zip
<https://drive.google.com/file/d/12imyTAD_xyx_MfpLaFu9BqMniqVs-kIR/view?usp=drive_web>
--
Atte.
Alejandro Marchán.
_______________________________________________
Sitio web: http://www.python.org.ar/
Para administrar la lista (o desuscribirse) entrar a
http://listas.python.org.ar/listinfo/pyar
La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
Loading...