Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No api proxy found for service "memcache" in OAuth2.0 dance

I trying to implement OAuth2.0 to my app and I got a problem, which I can't fix now.

The error is:

Traceback:
File "/home/i159/Envs/photorulez/lib/python2.6/site- packages/django/core/handlers/base.py" in get_response
111.                         response = callback(request, *callback_args,   **callback_kwargs)
File "/home/i159/workspace/photorulez/photorulez/photoapp/views.py" in get_token
63.     saved_token = gdata.gauth.AeLoad(request.GET.get('oauth_token'))
File "/home/i159/Envs/photorulez/lib/python2.6/site-packages/gdata/gauth.py" in ae_load
1289.   token_string = gdata.alt.app_engine.get_token(key_name)
File "/home/i159/Envs/photorulez/lib/python2.6/site-packages/gdata/alt/app_engine.py" in get_token
51.   token_string = memcache.get(unique_key)
File "/home/i159/Envs/photorulez/lib/python2.6/site-  packages/google/appengine/api/memcache/__init__.py" in get
487.       self._make_sync_call('memcache', 'Get', request, response)
File "/home/i159/Envs/photorulez/lib/python2.6/site-packages/google/appengine/api/apiproxy_stub_map.py" in MakeSyncCall
94.   return stubmap.MakeSyncCall(service, call, request, response)
File "/home/i159/Envs/photorulez/lib/python2.6/site-packages/google/appengine/api/apiproxy_stub_map.py" in MakeSyncCall
301.     assert stub, 'No api proxy found for service "%s"' % service

Exception Type: AssertionError at /get_access_token/
Exception Value: No api proxy found for service "memcache"

The code is:

CONSUMER_KEY = 'anonymous'
CONSUMER_SECRET = 'anonymous'
SCOPES = ['https://picasaweb.google.com/data/',]

def oauth2_login(request):
    client = gdata.docs.client.DocsClient(source='photorulez')

    oauth_callback_url = 'http://%s/get_access_token' % '127.0.0.1:8000'

    request_token = client.GetOAuthToken(
        SCOPES, 
        oauth_callback_url, 
        CONSUMER_KEY, 
        consumer_secret=CONSUMER_SECRET)

    request.session['request_token'] = request_token
    return HttpResponseRedirect(request_token.generate_authorization_url())


def get_token(request):
    client = gdata.docs.client.DocsClient(source='photorulez')
    saved_token = gdata.gauth.AeLoad(request.GET.get('oauth_token'))
    uri = 'http://127.0.0.1:8000'

    request_token = gdata.gauth.AuthorizeRequestToken(
        saved_token, 
        uri)    
    access_token = client.GetAccessToken(request_token)

    client.auth_token = gdata.gauth.OAuthHmacToken(CONSUMER_KEY,
        CONSUMER_SECRET,
        access_token.token,
        access_token.token_secret,
        gdata.gauth.ACCESS_TOKEN)
    return HttpResponseRedirect('/')

I was just installed google_appengine-1.5.1 module via pip, my app running on Django dev-server. What can I do to fix it? Should I run it only on GAE?

like image 641
I159 Avatar asked Oct 15 '11 14:10

I159


1 Answers

Looks like you need to be running GAE because the OAth implementation uses the GAE memcache service. You are telling the GAE API that your Django server will handle the GAE calls. You probably need to be running the GAE dev server so that it can handle the requests.

If you don't want to run the GAE server, it looks like this blog entry shows the code to get just enough of GAE running to service this request.

like image 105
ubiquitousthey Avatar answered Oct 11 '22 18:10

ubiquitousthey