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

BadValueError when referencing ndb.UserProperty #280

@safetymonkey

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)
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')

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