[ Foro de Python ]

Problemas con Python usando Swagger

12-Nov-2018 21:27
Alejandro Marchan
0 Respuestas

Tengo un procedimiento oracle que al recibir unos parámetros arroja como resultado una cadena con formato JSON como la siguiente:

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

Este procedimiento es invocado desde un webservice en Python que desarrollé con FlaskResfutl para crear el swagger
import cx_Oracle
import json
from app import APP
import log
import graypy
import database
from flask_restplus import Api, Resource, fields

with open('./config/config_countries.json', 'r') as config_file:
   config = json.load(config_file)

log.init()

#Se inicializa la base de datos
#Importando de database la conexión a la BD
database.init()

#Invoca al archivo de configuración
with open('./config/config_countries.json', 'r') as config_file:
   config = json.load(config_file)

with open('./config/config_general.json', 'r') as config_file:
   config_general = json.load(config_file)

srv_name = config["CONFIG"]["LOG_TAG"]
db_str = config["CONFIG"]["DB"]
max_return = config_general["CONFIG"]["MAX_RETURN"]
limite = config["CONFIG"]["LIMIT_PER_SECOND"]
api = Api(APP, version='1.0', title=srv_name,
         description='getCountries de Callejero Predictivo\n'
                     'Conexión a BD:' + db_str + '\n'
                     'Cantidad máxima de invocaciones por segundo:' + limite)

ns = api.namespace('getCountry', description='getCountries de Callejero Predictivo')


md_respuesta = {'pais': fields.String(required=True, description='Agrupador de Paises'), 'list_pais': fields.Nested(fields.String)}


@ns.route('/<string:country>')
@ns.response(200, 'Success')
@ns.response(404, 'Not found')
@ns.response(429, 'Too many request')
@ns.param('country', 'Introducir Cadena de Caracteres para el Pais')
class getCountryClass(Resource):
   @ns.doc('getCountry')
   @ns.marshal_list_with(md_respuesta)
   def post(self, country):
       try:
           cur = database.db.cursor()
           listOutput = cur.var(cx_Oracle.STRING)
           cur.callproc('PREDICTIVO.get_pais', (country, max_return, listOutput))
       except Exception as e:
           database.init()
           if database.db is not None:
               log.err('Reconexion OK')
               cur = database.db.cursor()
               listOutput = cur.var(cx_Oracle.STRING)
               cur.callproc('PREDICTIVO.get_pais', (country, max_return, listOutput))
           else:
               log.err('Sin conexion a la base de datos')
               listOutput = None


       return listOutput, 200


pero al ejecutarlo, me genera el siguiente error:

Running on http://127.0.0.1:5200/ (Press CTRL+C to quit)
127.0.0.1 - - [12/Nov/2018 15:52:21] "GET / HTTP/1.1" 200 -
Unable to render schema
Traceback (most recent call last):
 File "C:\Program Files\Python37\lib\site-packages\flask_restplus\api.py", line 483, in __schema__
   self._schema = Swagger(self).as_dict()
 File "C:\Program Files\Python37\lib\site-packages\flask_restplus\swagger.py", line 177, in as_dict
   paths[extract_path(url)] = self.serialize_resource(ns, resource, url, kwargs)
 File "C:\Program Files\Python37\lib\site-packages\flask_restplus\swagger.py", line 346, in serialize_resource
   path[method] = self.serialize_operation(doc, method)
 File "C:\Program Files\Python37\lib\site-packages\flask_restplus\swagger.py", line 352, in serialize_operation
   'responses': self.responses_for(doc, method) or None,
 File "C:\Program Files\Python37\lib\site-packages\flask_restplus\swagger.py", line 464, in responses_for
   responses[code]['schema'] = self.serialize_schema(model)
 File "C:\Program Files\Python37\lib\site-packages\flask_restplus\swagger.py", line 509, in serialize_schema
   'items': self.serialize_schema(model),
 File "C:\Program Files\Python37\lib\site-packages\flask_restplus\swagger.py", line 529, in serialize_schema
   raise ValueError('Model {0} not registered'.format(model))
ValueError: Model {'pais': <flask_restplus.fields.String object at 0x00000189FFB94C88>, 'list_pais': <flask_restplus.fields.Nested object at 0x00000189FFB94F28>} not registered
127.0.0.1 - - [12/Nov/2018 15:52:22] "GET /swagger.json HTTP/1.1" 500 -

y ya no encuentro qué vueltas darle ni como solucionarlo.
Alguien me pudiese dar pistas para resolverlo?




Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...