Alejandro Marchan
2018-11-20 20:06:55 UTC
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>
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.
Atte.
Alejandro Marchán.