I have a class 'UserHandler' that inherits from 'RestHandler', but for some reason it's not inheriting properly as I keep getting a 'AttributeError: 'UserHandler' object has no attribute 'sendJson'' error. I'm running python 2.7 btw.
Code and traceback below:
import json
import webapp2
class RestHandler(webapp2.RequestHandler):
def dispatch(self):
#time.sleep(1)
super(RestHandler, self).dispatch()
def SendJson(self, r):
self.response.headers['content-type'] = 'text/plain'
self.response.write(json.dumps(r))
class UserHandler(RestHandler):
def post(self):
r = json.loads(self.request.body)
user = modelUser.InsertUser(r['email'], r['firebaseUid'], r['firebaseId'])
r = modelUser.AsDict(user)
self.sendJson(r)
Traceback:
Traceback (most recent call last):
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 266, in Handle
result = handler(dict(self._environ), self._StartResponse)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1519, in __call__
response = self._internal_error(e)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1511, in __call__
rv = self.handle_exception(request, response, e)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1505, in __call__
rv = self.router.dispatch(request, response)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
return route.handler_adapter(request, response)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 1077, in __call__
return handler.dispatch()
File "main.py", line 25, in dispatch
super(RestHandler, self).dispatch()
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 547, in dispatch
return self.handle_exception(e, self.app.debug)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.3/webapp2.py", line 545, in dispatch
return method(*args, **kwargs)
File "main.py", line 37, in post
self.sendJson(r)
AttributeError: 'UserHandler' object has no attribute 'sendJson'
asked May 6, 2014 at 3:34
jmtoung
1,0221 gold badge15 silver badges28 bronze badges
3 Answers 3
The code defined SendJson (uppercase). But subclass call sendJson. (lowercase)
answered May 6, 2014 at 3:37
falsetru
371k69 gold badges770 silver badges660 bronze badges
Sign up to request clarification or add additional context in comments.
Comments
In your last few lines:
class UserHandler(RestHandler):
def post(self):
r = json.loads(self.request.body)
user = modelUser.InsertUser(r['email'], r['firebaseUid'], r['firebaseId'])
r = modelUser.AsDict(user)
self.SendJson(r)
^
Should be capitalized
Hope that helps :D
answered May 6, 2014 at 3:40
Sazid
2,8371 gold badge25 silver badges36 bronze badges
Comments
Capitalize the 's' (or better yet, make the function 'S' lowercase)
Comments
lang-py