This repository was archived by the owner on Mar 6, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 68
This repository was archived by the owner on Mar 6, 2026. It is now read-only.
BadValueError when referencing ndb.UserProperty #280
Copy link
Copy link
Closed
Labels
priority: p2Moderately-important priority. Fix may not be included in next release.Moderately-important priority. Fix may not be included in next release.status: investigatingThe issue is under investigation, which is determined to be non-trivial.The 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.Error or flaw in code with unintended results or allowing sub-optimal usage patterns.
Description
Environment details
- OS: MacOS Mojave 10.14.6
- Python version: 2.7.12
- 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.
- Go to app home screen and click login button, which takes you to the URL specified by
google.appengine.api.users.create_login_url(). - The local dev environment login window will appear. Keep default "test@example.com" email address and click "Login".
- 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)
from google.cloud import ndb
from google.appengine.api import users
from controllers._auth import Authorize
from models.member import Member
class SettingsController(webapp2.RequestHandler):
def create_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)
if not user:
return False
member = Member(id=user.user_id(),
session_id=SessionID.generate(),
user=user) # Line 201 referenced in stack trace
return member# member.py (model)
from google.cloud import ndb
class Member(ndb.Model):
user = ndb.UserProperty()
name = ndb.StringProperty()
session_id = ndb.StringProperty()# _auth.py (helper controller)
from google.cloud import ndb
from google.appengine.api import users
class Authorize(object):
@staticmethod
def get_current_user(req):
return users.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')
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
priority: p2Moderately-important priority. Fix may not be included in next release.Moderately-important priority. Fix may not be included in next release.status: investigatingThe issue is under investigation, which is determined to be non-trivial.The 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.Error or flaw in code with unintended results or allowing sub-optimal usage patterns.