Skip to content
This repository was archived by the owner on May 6, 2026. It is now read-only.
This repository was archived by the owner on May 6, 2026. It is now read-only.

BadValueError when referencing ndb.UserProperty #280

Description

@safetymonkey

Environment details

  1. OS: MacOS Mojave 10.14.6
  2. Python version: 2.7.12
  3. google-cloud-ndb version: 0.2.0

Overview

I'm getting an error when I try to sign into my Python 2 App Engine app w/ the Users API.

  1. Go to app home screen and click login button, which takes you to the URL specified by google.appengine.api.users.create_login_url().
  2. The local dev environment login window will appear. Keep default "test@example.com" email address and click "Login".
  3. Receive the following error: BadValueError: Expected User, got users.User(email='test@example.com',_user_id='185804764220139124118')

From what I can tell, the Users API users.get_current_user() call is returning a <class 'google.appengine.api.users.User'> object which the legacy version of ndb.UserProperty is fine with but which the Cloud version is choking on.

Relevant code

# settings.py (controller)fromgoogle.cloudimportndbfromgoogle.appengine.apiimportusersfromcontrollers._authimportAuthorizefrommodels.memberimportMemberclassSettingsController(webapp2.RequestHandler):
defcreate_uncommitted_member(self):
"""Create a new uncommitted member. Initialize the user, and key, and sessionID. It's used to populate the form for a user who isn't yet a member. And it's used to create a Member instance for a user who just joined. """user=Authorize.get_current_user(self)
ifnotuser:
returnFalsemember=Member(id=user.user_id(),
session_id=SessionID.generate(),
user=user) # Line 201 referenced in stack tracereturnmember
# member.py (model)fromgoogle.cloudimportndbclassMember(ndb.Model):
user=ndb.UserProperty()
name=ndb.StringProperty()
session_id=ndb.StringProperty()
# _auth.py (helper controller)fromgoogle.cloudimportndbfromgoogle.appengine.apiimportusersclassAuthorize(object):
@staticmethoddefget_current_user(req):
returnusers.get_current_user()

Stack trace

ERROR 2019-12-18 20:32:55,197 webapp2.py:1552] Expected User, got users.User(email='test@example.com',_user_id='185804764220139124118')
Traceback (most recent call last):
File "/Users/user/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1535, in __call__
rv = self.handle_exception(request, response, e)
File "/Users/user/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1529, in __call__
rv = self.router.dispatch(request, response)
File "/Users/user/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/Users/user/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/Users/user/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/Users/user/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/Users/user/project/controllers/settings.py", line 41, in get
self.render_settings_page()
File "/Users/user/project/controllers/settings.py", line 164, in render_settings_page
member = self.create_uncommitted_member()
File "/Users/user/project/controllers/settings.py", line 201, in create_uncommitted_member
user=user)
File "/Users/user/project/lib/google/cloud/ndb/model.py", line 4519, in __init__
self._set_attributes(kwargs)
File "/Users/user/project/lib/google/cloud/ndb/model.py", line 4567, in _set_attributes
prop._set_value(self, value)
File "/Users/user/project/lib/google/cloud/ndb/model.py", line 1475, in _set_value
value = self._do_validate(value)
File "/Users/user/project/lib/google/cloud/ndb/model.py", line 1382, in _do_validate
value = self._call_shallow_validation(value)
File "/Users/user/project/lib/google/cloud/ndb/model.py", line 1729, in _call_shallow_validation
return call(value)
File "/Users/user/project/lib/google/cloud/ndb/model.py", line 1801, in call
new_value = method(self, value)
File "/Users/user/project/lib/google/cloud/ndb/model.py", line 3194, in _validate
"Expected User, got {!r}".format(value)
BadValueError: Expected User, got users.User(email='test@example.com',_user_id='185804764220139124118')

Metadata

Metadata

Assignees

Labels

priority: p2Moderately-important priority. Fix may not be included in next release.status: investigatingThe issue is under investigation, which is determined to be non-trivial.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions