Recuperación de contactos con gdata.contacts.client y oauth2

Estoy usando oAuth2WebServerFlow para obtener un token de acceso a oAuth y luego recuperar una lista de los contactos de un usuario. Estoy usando web2py como el framework web.

    flow = oauth2client.client.OAuth2WebServerFlow(client_id=CLIENT_ID,
                                                   client_secret=CLIENT_SECRET,
                                                  scope='https://www.google.com/m8/feeds', 
                                                   user_agent=USER_AGENT)
    callback = 'http://127.0.0.1:8000/Test/searcher/oauth2callback'
    authorise_url = flow.step1_get_authorize_url(callback)
    session.flow = pickle.dumps(flow)
    redirect(authorise_url) 

Con la redirección entonces se maneja de la siguiente manera

flow = pickle.loads(session.flow)
credentials = flow.step2_exchange(request.vars) 

Mi pregunta es cómo cambiar el objeto OAuth2Credentials devuelto anteriormente a un objeto OAuth2AccessToken, que luego puedo usar para autorizar una solicitud a la biblioteca de contactos con algo como:

gc = gdata.contacts.client.ContactsClient(source="")
token.authorize(gc)
gc.GetContacts

He intentado varios métodos sin éxito, normalmente obtengo un mensaje oAuth2AccessTokenError de "Invalid Grant". Estoy pensando que algo como esto puede funcionar pero también creo que debe haber una forma más simple.

token = gdata.gauth.OAuth2Token(client_id=CLIENT_ID, client_secret=CLIENT_SECRET, scope='https://www.google.com/m8/feeds', user_agent=USER_AGENT)

    token.redirect_uri = 'http://127.0.0.1:8000/Test/searcher/oauth2callback'
    token.get_access_token(<<code to pass the access_token out of the Credentials object??>>)

¿Alguien puede ayudarme con esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta