I'm managing an API with using Google Cloud Endpoints and am struggling
with a strange, randomly happening, error. The error happens in production
only, the unit tests pass property on the dev environment.
I have the following model:
class UserFacebookData(ndb.Model):
facebook_id = ndb.StringProperty(required=True, indexed=True)
facebook_token = ndb.StringProperty(required=True, indexed=True)
class User(ndb.Model, Entity):
created = ndb.DateTimeProperty(auto_now_add=True, indexed=True)
username = ndb.StringProperty(indexed=True)
facebook_data = ndb.StructuredProperty(UserFacebookData,
indexed=False)
And using this to create a user
ufd = UserFacebookData(facebook_id=some_api_data,
facebook_token=some_api_data)
user = User(username=some_api_data, facebook_data=ufd)
user.save()
or to update one
ufd = UserFacebookData(facebook_id=some_api_data,
facebook_token=some_api_data)
user = get_from_db(some_api_data)
user.facebook_data = ufd
user.save()
When updating the user, I have the following error from time to time
Expected UserFacebookData instance,
got UserFacebookData(facebook_id=u'xxx', facebook_token=xxx'))
Yet, traces (to print and check type of the ufd / UserFacebookData
instance) show that it's correctly created and that the user also exists
# print user.username
my_username
# print ufd
UserFacebookData(facebook_id=u'xx', facebook_token=xx')
# print type(ufd)
UserFacebookData<facebook_id=StringProperty('facebook_id',
required=True),
facebook_token=StringProperty('facebook_token', required=True)>
I can't see what I'm missing. Has someone already experienced that - and
hopefully fixed it? Here's the full error stack
Encountered unexpected error from ProtoRPC method implementation:
BadValueError (Expected UserFacebookData instance, got
UserFacebookData(facebook_id=u'xx', facebook_token=xx'))
Traceback (most recent call last):
File
"/base/data/home/runtimes/python27/python27_lib/versions/third_party/protorpc-1.0/protorpc/wsgi/service.py",
line 181, in protorpc_service_app
response = method(instance, request)
File
"/base/data/home/runtimes/python27/python27_lib/versions/third_party/endpoints-1.0/endpoints/api_config.py",
line 1329, in invoke_remote
return remote_method(service_instance, request)
File
"/base/data/home/runtimes/python27/python27_lib/versions/third_party/protorpc-1.0/protorpc/remote.py",
line 412, in invoke_remote_method
response = method(service_instance, request)
File
"/base/data/home/apps/s~yapme-web/alpha2.377359917212322950/api/helpers.py",
line 43, in method
return func(*args, **kwargs)
File
"/base/data/home/apps/s~xx-web/alpha2.377359917212322950/api/user.py", line
25, in users_create
user = User.create(request)
File
"/base/data/home/apps/s~xx-web/alpha2.377359917212322950/entities/users.py",
line 168, in create
user.facebook_data = facebook_data
File
"/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py",
line 1339, in __set__
self._set_value(entity, value)
File
"/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py",
line 1084, in _set_value
value = self._do_validate(value)
File
"/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py",
line 1031, in _do_validate
value = self._call_shallow_validation(value)
File
"/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py",
line 1223, in _call_shallow_validation
return call(value)
File
"/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py",
line 1270, in call
newvalue = method(self, value)
File
"/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/ndb/model.py",
line 2269, in _validate
(self._modelclass.__name__, value))
BadValueError: Expected UserFacebookData instance, got
UserFacebookData(facebook_id=u'xx', facebook_token=xx')
NB: Thread also posted on SO
-
http://stackoverflow.com/questions/24869911/gae-endpoints-error-expected-foobar-instance-got-foobar
--
You received this message because you are subscribed to the Google Groups
"Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-appengine.
For more options, visit https://groups.google.com/d/optout.