2014-02-20 4 views
0

У меня возникла странная ошибка сообщения.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 

Я немного тупик на этом, я понятия не имею, где выращенного ключ ошибка.

Любые идеи?

+0

Почему вы думаете, что это связано с контрольной суммой? Эта ошибка вызывает затруднения в отношении списка, содержащего строку, которая не совпадает с тем, что вы регистрируете. Вы внедряете __init__ в свой base_class? Что он делает? (Я предполагаю, что проблема связана с parent_list, но вам нужно будет показать больше кода, чтобы кто-нибудь был уверен!) – Greg

+0

Ошибка говорит, что он ожидает ключ, и вы даете ему список строк. – marcadian

+0

Ошибка при назначении контрольной суммы = m, она не работает в вызове '_do_validate'. Если честно, я не пробирался через ваш стек, потому что свойство с именем id вызывает много проблем. Я предлагаю вам узнать, какой тип система считает свойством 'checksum', прежде чем пытаться его назначить. –

ответ

1

Вы не можете иметь свойство с именем ID

Это аргумент поставляется в конструктор, который используется при создании ключа с прилагаемым идентификатором.

Иметь чтения из документации ndb.Model https://developers.google.com/appengine/docs/python/ndb/modelclass#Constructor

+0

На самом деле это свойство id никогда не вызывало у меня никаких проблем. Независимо, изменение этого свойства id на любое другое имя ничего не меняет об ошибке. Я изменил его на 'gid', и ошибка сохраняется. –

+0

Хорошо, глядя дальше через стек, нам нужно увидеть более подробную информацию о вашем «base_class», похоже, что это подкласс ndb.Expando. Что мы здесь не видим. –

Смежные вопросы