Turbogears2 migration: API calls

Thomas De Schampheleire patrickdepinguin at gmail.com
Sat Jul 30 20:01:31 UTC 2016


Hi,

API calls currently do not work under Turbogears2.

The simplest call is:

../venv/kallithea-tg-clean/bin/kallithea-api
--apikey=811a4ad6f382e75c20392b668cad9408bde9f42e
--apihost=http://localhost:5000 test

(where apikey can be obtained from the web UI, after logging in, going
to 'My account' via you user name top right, then API keys.)

This call is supposed to finally end up in the 'test' method in
kallithea/controllers/api/api.py.
However, the command fails with 500 Server Error, and on server side:

Traceback (most recent call last):
  File "/home/tdescham/repo/contrib/kallithea/venv/kallithea-tg-clean/lib/python2.7/site-packages/tg/wsgiapp.py",
line 120, in __call__
    response = self.wrapped_dispatch(controller, environ, context)
  File "/home/tdescham/repo/contrib/kallithea/venv/kallithea-tg-clean/lib/python2.7/site-packages/tg/appwrappers/errorpage.py",
line 56, in __call__
    resp = self.next_handler(controller, environ, context)
  File "/home/tdescham/repo/contrib/kallithea/venv/kallithea-tg-clean/lib/python2.7/site-packages/tg/appwrappers/caching.py",
line 54, in __call__
    return self.next_handler(controller, environ, context)
  File "/home/tdescham/repo/contrib/kallithea/venv/kallithea-tg-clean/lib/python2.7/site-packages/tg/appwrappers/session.py",
line 71, in __call__
    response = self.next_handler(controller, environ, context)
  File "/home/tdescham/repo/contrib/kallithea/venv/kallithea-tg-clean/lib/python2.7/site-packages/tg/appwrappers/i18n.py",
line 71, in __call__
    return self.next_handler(controller, environ, context)
  File "/home/tdescham/repo/contrib/kallithea/venv/kallithea-tg-clean/lib/python2.7/site-packages/tg/wsgiapp.py",
line 285, in _dispatch
    return controller(environ, context)
  File "/home/tdescham/repo/contrib/kallithea/kallithea-tg-clean/kallithea/lib/base.py",
line 461, in __call__
    return super(BaseController, self).__call__(environ, context)
  File "/home/tdescham/repo/contrib/kallithea/venv/kallithea-tg-clean/lib/python2.7/site-packages/tg/controllers/dispatcher.py",
line 119, in __call__
    response = self._perform_call(context)
  File "/home/tdescham/repo/contrib/kallithea/venv/kallithea-tg-clean/lib/python2.7/site-packages/tg/controllers/dispatcher.py",
line 99, in _perform_call
    state = self._get_dispatchable(context, py_request.quoted_path_info)
  File "/home/tdescham/repo/contrib/kallithea/venv/kallithea-tg-clean/lib/python2.7/site-packages/tg/controllers/dispatcher.py",
line 73, in _get_dispatchable
    state = state.resolve()
  File "/home/tdescham/repo/contrib/kallithea/venv/kallithea-tg-clean/lib/python2.7/site-packages/crank/dispatchstate.py",
line 178, in resolve
    return self._root_dispatcher._dispatch(self, self._path)
  File "/home/tdescham/repo/contrib/kallithea/venv/kallithea-tg-clean/lib/python2.7/site-packages/tgext/routes/dispatch.py",
line 146, in _dispatch
    action = getattr(controller, action_name)
AttributeError: 'ApiController' object has no attribute 'index'


So the routing tries to access an index method.

In the API code, the JSONRPCController parent class of ApiController
is supposed to direct the calls to the correct method, but it seems we
do not enter that class.

Alessandro, would you have some time to have a look?

I have seen in the TG2 documentation that typical, recommended, usage
is different than what Kallithea is doing, and I think we should
investigate if we can adapt our code base to such best practices
eventually, but in the short term I think we should try to make the
existing code base work.

Thanks,
Thomas


More information about the kallithea-general mailing list