2016-10-27 3 views
0

Мне нужно немного REST API и выбрал Cherrypy. Я пишу Cherrypy RESTApi примерно через 2 года. Теперь, используя тот же самый старт, как обычно, я сталкиваюсь с ошибкой, это сводит меня с ума. Я на Ubuntu 16.04 с Python 3.5.2 и Cherrypy 8.1.2. Код:Объект Cherrypy не подлежит вызову - MethodDispatcher

import cherrypy 


class Sotd: 
    exposed = True 

    @cherrypy.tools.json_out() 
    def GET(self): 
     return {"message": "blub"} 


class RestAPI: 
    exposed = True 


if __name__ == '__main__': 

    api = RestAPI() 
    api.sotd = Sotd() 

    cherrypy.tree.mount(
     api, 
     '/api', 
     { 
      '/sotd': 
       { 
        'request.dispatcher': cherrypy.dispatch.MethodDispatcher() 
       } 
     } 
    ) 

    cherrypy.server.socket_host = '0.0.0.0' 
    cherrypy.server.socket_port = 8080 
    cherrypy.engine.start() 
    cherrypy.engine.block() 

Теперь я пытаюсь сделать GET Call и ожидать, что мой JSON вернется.

curl http://localhost:8080/api/sotd 

И вещи взорвать

Traceback (most recent call last): 
    File "/usr/lib/python3.5/inspect.py", line 1089, in getfullargspec 
    sigcls=Signature) 
    File "/usr/lib/python3.5/inspect.py", line 2156, in _signature_from_callable 
    raise TypeError('{!r} is not a callable object'.format(obj)) 
TypeError: <__main__.Sotd object at 0x7efc1271b4a8> is not a callable object 

The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
File "/usr/local/lib/python3.5/dist-packages/cherrypy/_cpdispatch.py", line 64, in __call__ 
    test_callable_spec(self.callable, self.args, self.kwargs) 
    File "/usr/local/lib/python3.5/dist-packages/cherrypy/_cpdispatch.py", line 95, in test_callable_spec 
    (args, varargs, varkw, defaults) = getargspec(callable) 
    File "/usr/local/lib/python3.5/dist-packages/cherrypy/_cpdispatch.py", line 212, in getargspec 
return inspect.getfullargspec(callable)[:4] 
    File "/usr/lib/python3.5/inspect.py", line 1095, in getfullargspec 
    raise TypeError('unsupported callable') from ex 
TypeError: unsupported callable 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/dist-packages/cherrypy/_cprequest.py", line 670, in respond 
    response.body = self.handler() 
    File "/usr/local/lib/python3.5/dist-packages/cherrypy/lib/encoding.py", line 220, in __call__ 
    self.body = self.oldhandler(*args, **kwargs) 
    File "/usr/local/lib/python3.5/dist-packages/cherrypy/_cpdispatch.py", line 68, in __call__ 
    raise x 
    File "/usr/local/lib/python3.5/dist-packages/cherrypy/_cpdispatch.py", line 60, in __call__ 
    return self.callable(*self.args, **self.kwargs) 
TypeError: 'Sotd' object is not callable 

Я видел это 1-2 Сообщения о CherryPy и не вызываемом объекте - но решения (простая конфигурация не удается) не работали для меня :(

Спасибо за вашу помощь!

ответ

1

Ну, это было конфиг терпят неудачу ... это не «request.dispatcher» это «request.dispatch»

Смежные вопросы