У меня возникла странная ошибка сообщения.ndb Получение ошибки проверки ключа в StringProperty
У меня есть модель с StringProperty
, называемая checksum
, но когда я пытаюсь ее сохранить, я получаю ошибку проверки, требуя, чтобы значение ключа ожидалось.
EDIT: чтобы избежать потенциальных проблем, я переименовал свойство id
в gdid
, так как он отображается сейчас, и ошибка сохраняется.
class gd_file(base_class):
"""Google Drive File Reference"""
gdid = ndb.StringProperty()
#creation_date = ndb.DateTimeProperty()
#modification_date = ndb.DateTimeProperty()
name = ndb.StringProperty()
checksum = ndb.StringProperty()
size = ndb.IntegerProperty()
office = ndb.KeyProperty()
parents = ndb.KeyProperty()
Пример кода:
logging.info('GD_FILE:')
for p in gd_file._properties:
logging.info(getattr(gd_file,p))
logging.info('m:')
logging.info(type(m))
logging.info(m)
fd = gd_file(
parents = parents_list,
owners = gd['ownerNames'],
last_changed_by = gd['lastModifyingUserName'],
creation_date = datetime.datetime.strptime(cdate, '%Y-%m-%d %H:%M:%S.%f'),
modification_date = datetime.datetime.strptime(mdate, '%Y-%m-%d %H:%M:%S.%f'),
gdid = gd['id'],
name = result['name'],
size = result['size'],
type = gd['mimeType'],
checksum = m
)
линии 231 в моем коде, где я приписываю checksum = m
выше.
Войти включая ошибки:
INFO 2014-02-20 21:20:09,042 proterrahandler.py:213] GD_FILE:
INFO 2014-02-20 21:20:09,042 proterrahandler.py:215] KeyProperty('parents')
INFO 2014-02-20 21:20:09,042 proterrahandler.py:215] StringProperty('checksum')
INFO 2014-02-20 21:20:09,042 proterrahandler.py:215] StringProperty('owners', repeated=True)
INFO 2014-02-20 21:20:09,042 proterrahandler.py:215] DateTimeProperty('creation_date', auto_now_add=True)
INFO 2014-02-20 21:20:09,042 proterrahandler.py:215] StringProperty('type')
INFO 2014-02-20 21:20:09,042 proterrahandler.py:215] StringProperty('last_changed_by')
INFO 2014-02-20 21:20:09,042 proterrahandler.py:215] StringProperty('name')
INFO 2014-02-20 21:20:09,042 proterrahandler.py:215] IntegerProperty('size')
INFO 2014-02-20 21:20:09,042 proterrahandler.py:215] DateTimeProperty('modification_date', auto_now=True)
INFO 2014-02-20 21:20:09,042 proterrahandler.py:215] KeyProperty('cid')
INFO 2014-02-20 21:20:09,042 proterrahandler.py:215] KeyProperty('office')
INFO 2014-02-20 21:20:09,042 proterrahandler.py:215] StringProperty('id')
INFO 2014-02-20 21:20:09,042 proterrahandler.py:217] m:
INFO 2014-02-20 21:20:09,042 proterrahandler.py:218] <type 'str'>
INFO 2014-02-20 21:20:09,042 proterrahandler.py:219] 019f8998e5896bb34ecdbb0803343486
ERROR 2014-02-20 21:20:09,046 webapp2.py:1552] Expected Key, got [u'0B2PeVr8B69LER2ZGWVNjM29TSTQ']
Traceback (most recent call last):
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1535, in __call__
rv = self.handle_exception(request, response, e)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1529, in __call__
rv = self.router.dispatch(request, response)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1102, in __call__
return handler.dispatch()
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "C:\Users\Tiago\Google Drive\Development\gae\cert-id-tinkerbox\proterrahandler.py", line 89, in post
files = self.handle_upload()
File "C:\Users\Tiago\Google Drive\Development\gae\cert-id-tinkerbox\proterrahandler.py", line 231, in handle_upload
checksum = m
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 2852, in __init__
self._set_attributes(kwds)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 3587, in _set_attributes
setattr(self, name, value)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 3605, in __setattr__
return super(Expando, self).__setattr__(name, value)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 1343, in __set__
self._set_value(entity, value)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 1088, in _set_value
value = self._do_validate(value)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 1035, in _do_validate
value = self._call_shallow_validation(value)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 1227, in _call_shallow_validation
return call(value)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 1274, in call
newvalue = method(self, value)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 1927, in _validate
raise datastore_errors.BadValueError('Expected Key, got %r' % (value,))
BadValueError: Expected Key, got [u'0B2PeVr8B69LER2ZGWVNjM29TSTQ']
INFO 2014-02-20 18:20:09,193 module.py:612] default: "POST /app/proterra/checklist/import HTTP/1.1" 500 3357
Я немного тупик на этом, я понятия не имею, где выращенного ключ ошибка.
Любые идеи?
Почему вы думаете, что это связано с контрольной суммой? Эта ошибка вызывает затруднения в отношении списка, содержащего строку, которая не совпадает с тем, что вы регистрируете. Вы внедряете __init__ в свой base_class? Что он делает? (Я предполагаю, что проблема связана с parent_list, но вам нужно будет показать больше кода, чтобы кто-нибудь был уверен!) – Greg
Ошибка говорит, что он ожидает ключ, и вы даете ему список строк. – marcadian
Ошибка при назначении контрольной суммы = m, она не работает в вызове '_do_validate'. Если честно, я не пробирался через ваш стек, потому что свойство с именем id вызывает много проблем. Я предлагаю вам узнать, какой тип система считает свойством 'checksum', прежде чем пытаться его назначить. –