I have a problem authorizing my application and user to read my own
google contacts. I am using gdata.py-1.2.4 library and did everything
as outlined in documentation. Here is a brief description of what I
did:
I was trying to adapt code from article "Using the YouTube Data API
with App Engine and the Python client library".

1. Scope of the auth. request:'http://www.google.com/m8/feeds/'
2. I was correctly redirected to google auth page and enter username
then grand permission to use
3. I received redirect request with token parameter
4. I try to upgrade token to session token, and received error in
UpgradeToSessiontoken method.

self.client.auth_token = self.token
    #self.client.SetAuthSubToken(self.token)
    self.client.UpgradeToSessionToken()

I do have entry of my username after self.current_user =
users.GetCurrentUser()

Error message is:
Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/
GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/
google/appengine/ext/webapp/__init__.py", line 498, in __call__
    handler.get(*groups)
  File "/Users/edvorkin/Documents/workspace/contactManager2/src/
contact.py", line 62, in get
    self.UpgradeAndStoreToken()
  File "/Users/edvorkin/Documents/workspace/contactManager2/src/
contact.py", line 125, in UpgradeAndStoreToken
    self.client.UpgradeToSessionToken()
  File "/Users/edvorkin/Documents/workspace/contactManager2/src/gdata/
service.py", line 860, in UpgradeToSessionToken
    raise NonAuthSubToken
NonAuthSubToken

Please help


My source code:
class AuthSub(webapp.RequestHandler):

  def __init__(self):
    self.current_user = None
    self.client = None
    self.token = None
    self.feed_url = 'http://www.google.com/m8/feeds/contacts/edvorkin
%40gmail.com/full'
    self.youtube_scope = 'http://www.google.com/m8/feeds/'
    self.developer_key = None
    self.client = gdata.contacts.service.ContactsService()

  def get(self):
    self.my_app_domain = 'http://' + self.request._environ
['HTTP_HOST']
    self.response.out.write("""<html><head><title>
        hello_authsub: AuthSub demo</title>
        <link type="text/css" rel="stylesheet" href="/stylesheets/
main.css" />
        """)

    self.current_user = users.GetCurrentUser()
    self.response.out.write('</head><body>')

    # Split URL parameters if found
    for param in self.request.query.split('&'):
      if param.startswith('token'):
        self.token = param.split('=')[1]
      elif param.startswith('feed_url'):
        self.feed_url = urllib.unquote_plus(param.split('=')[1])

    if self.current_user:
      self.response.out.write('<a href="%s">Sign Out</a><br /><br />'
% (
          users.CreateLogoutURL(self.request.uri)))

      if self.LookupToken():
        self.response.out.write('<div id="vcontacts_listing">')
        self.FetchFeed()
        self.response.out.write('</div>')

      else:
        # Check if a one-time use token was passed in the URL
parameters
        if self.token:
          self.UpgradeAndStoreToken()
          self.redirect('/')
        else:
          self.response.out.write('<div id="sidebar"> '
              '<div id="scopes"><h4>Request a token</h4><ul>')
          self.response.out.write('<li><a href="%s">Contact API</a></
li>' % (
              self.client.GenerateAuthSubURL(
              self.my_app_domain, self.youtube_scope, secure=False,
session=True))
              )
    else:
      self.response.out.write('<a href="%s">Sign In</a><br />' % (
          users.CreateLoginURL(self.request.uri)))
  def UpgradeAndStoreToken(self):
    self.client.auth_token = self.token
    #self.client.SetAuthSubToken(self.token)
    self.client.UpgradeToSessionToken()

    if self.current_user:
      new_token = StoredToken(user_email=self.current_user.email(),
          session_token=self.client.GetAuthSubToken())
      new_token.put()

  def LookupToken(self):
    if self.current_user:
      stored_tokens = StoredToken.gql('WHERE user_email = :1',
          self.current_user.email())
      for token in stored_tokens:
        self.client.auth_token = token.session_token
        return True

def main():
  application = webapp.WSGIApplication([('/.*', AuthSub),],
debug=True)
  wsgiref.handlers.CGIHandler().run(application)

if __name__ == '__main__':
  main()

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to