get_current_user() could return None has documented here, if no user
is logged in:
http://code.google.com/appengine/docs/python/users/functions.html

You could also take a look at the new OAuth2Decorator in
google-api-python-client that make dealing with OAuth 2.0 easier:
http://code.google.com/p/google-api-python-client/wiki/OAuth2AppEngineDecorator

I just published an article on how to use it with Google Tasks API,
but that should be easy to translate to Moderator API:
http://googleappengine.blogspot.com/2011/06/getting-started-with-tasks-api-on.html

On Fri, Jun 17, 2011 at 2:45 PM, GAE app developer
<[email protected]> wrote:
> Hi,
>
> I am developing an Google app engine application using Moderator API
> in python. I am able to retrieve the submissions. I am having an
> authentication problem. My code runs locally without any problem but
> when I deploy it in Google app engine launcher. It shows the following
> error:
>
>
> 'NoneType' object has no attribute 'user_id'
> Traceback (most recent call last):
>  File "/base/python_runtime/python_lib/versions/1/google/appengine/
> ext/webapp/__init__.py", line 700, in __call__
>    handler.get(*groups)
>  File "/base/data/home/apps/ktbookstore/3.351197542995528852/
> retrieve_list_unique.py", line 107, in get
>    f = Flow.get_by_key_name(user.user_id())
> AttributeError: 'NoneType' object has no attribute 'user_id'
>
> My code is:
>
> import gflags
> import httplib2
> import logging
> import pprint
> import sys
> import os
> import cgi
> import pickle
>
> from apiclient.discovery import build
> from oauth2client.file import Storage
> from oauth2client.client import AccessTokenRefreshError
> from oauth2client.client import OAuth2WebServerFlow
> from oauth2client.tools import run
> from google.appengine.ext import webapp
> from google.appengine.ext.webapp import template
> from google.appengine.ext.webapp.util import run_wsgi_app
> from google.appengine.ext import db
> from google.appengine.api import users
> from oauth2client.appengine import CredentialsProperty
> from oauth2client.appengine import StorageByKeyName
> from google.appengine.ext.webapp.util import login_required
> from google.appengine.api import memcache
> from oauth2client.appengine import FlowProperty
>
> FLAGS = gflags.FLAGS
>
> FLOW = OAuth2WebServerFlow(
>    client_id='My client id',
>    client_secret='my client_secret',
>    scope='https://www.example.com/oauth2callback',
>    user_agent='moderator-cmdline-sample/1.0')
>
>
> gflags.DEFINE_enum('logging_level', 'ERROR',['DEBUG', 'INFO',
> 'WARNING', 'ERROR', 'CRITICAL'],'Set the level of logging detail.')
>
> class Flow(db.Model):   # FlowThreeLegged could also be stored in
> memcache.
>    flow = FlowProperty()
>
> class Credentials(db.Model):
>  credentials = CredentialsProperty()
>
> class ModPage(webapp.RequestHandler):
>  def get(self):
>    # Let the gflags module process the command-line arguments
>
>    service = build("moderator", "v1", developerKey='my developer
> key')
>
>
> class voteUpdate(webapp.RequestHandler):
>  def get(self):
>      user = users.get_current_user()
>      logging.info(user)
>      f = Flow.get_by_key_name(user.user_id())
>      if f:
>        credentials = f.flow.step2_exchange(self.request.params)
>        c = Credentials(key_name=user.user_id(),
> credentials=credentials)
>        c.put()
>        f.delete()
>        self.redirect("/")
>      else:
>        pass
>      user = users.get_current_user()
>      c = Credentials.get_by_key_name(user.user_id())
>      if c:
>        http = httplib2.Http()
>        http = c.credentials.authorize(http)
>      else:
>        flow = FlowThreeLegged(
>                              consumer_key='',
>                              consumer_secret='anonymous',
>                              user_agent='google-api-client-python-
> moderator-webapp/1.0',
>                              domain='anonymous',
>                              scope='https://www.googleapis.com/auth/
> moderator',
>                              xoauth_displayname='Example Web App')
>      authorize_url = flow.step1_get_authorize_url(STEP2_URI)
>      f = Flow(key_name=user.user_id(), flow=flow)
>      f.put()
>      self.redirect(authorize_url)
>
>
>
>      service = build("moderator", "v1", http=http,developerKey='my
> developer key')
>
>
>      minus=self.request.get("Minus")
>      if minus=="":
>        self.response.out.write("plus")
>        #code which will increment plus vote counter by 1
>      else:
>        self.response.out.write("minus")
>        #code which will increment minus vote counter by 1
>
>
>
>
> application = webapp.WSGIApplication([
>  ('/', ModPage),('/vote',voteUpdate)
> ], debug=True)
>
> def main():
>   run_wsgi_app(application)
>
>
> if __name__ == '__main__':
>  main()
>
> Please help me in finding the solution.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Google App Engine" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/google-appengine?hl=en.
>
>



-- 
Johan Euphrosine (proppy)
Developer Programs Engineer
Google Developer Relations

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

Reply via email to