1

Google App Engine SDK v1.8.2.1 で奇妙な問題が発生しています。SDK には、プロパティ値を取得する方法に問題があるようです。エンティティは次のようになります。

class userDB(EndpointsModel):
    userID = ndb.StringProperty(required=True, indexed=True)
    name = ndb.StringProperty(required=True, indexed=True)
    update = ndb.DateTimeProperty(indexed=True)
    orgs = ndb.StructuredProperty(providers, repeated=True, indexed=True)
    system = ndb.StructuredProperty(system, repeated=True, indexed=True)
    comp = ndb.StructuredProperty(comp, repeated=True, indexed=True)

データストア ビューアから:

orgs.value (list) [u'comp', u'system']

私のcronジョブコード:

class CronRefresh(webapp2.RequestHandler):
    def get(self):  
        for user in userDB.query().fetch():
            for org in user.orgs:
                provider.addItems(user.key, org.value)

org.value をコンソール ログに出力しても問題はありませんが、それを関数に渡そうとすると、次のエラーがスローされます。

INFO     2013-07-29 17:28:30,980 module.py:595] default: "POST / HTTP/1.1" 200 594
ERROR    2013-07-29 21:28:37,374 webapp2.py:1552] '_BaseValue' object has no attribute 'value'

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 "E:\main.py", line 74, in get

    provider.addItems(user.key, org.value)

AttributeError: '_BaseValue' object has no attribute 'value'

INFO     2013-07-29 17:28:37,382 module.py:595] default: "GET /cron/refresh HTTP/1.1" 500 114
INFO     2013-07-29 17:28:49,043 module.py:595] default: "GET /cron/refresh HTTP/1.1" 200 -

しかし、cron ジョブを 2 回実行すると、うまくいきます。誰かが私が間違っていることを見ていますか? これは予想される動作ですか?

更新: provider は私が書いたインポートです。どんな助けでも大歓迎です。

UPDATE2: addItems 関数を追加しました。apple_list が適切な辞書のリストであることを確認しました。

def addItems(key, X):
user = key.get()
if X == 'apple':
    def add(item):
        newObject = apple(name=item['name'], status=item['status'], obtained=item['obtained'])
        objectList = user.query().fetch()[0].apple
        for object in objectList: 
            if (object.name == item['name'] and (object.status != item['status'] or object.obtained != item['obtained'])):
                logging.debug("If #1 Happened")
                continue
            elif (object.name == item['name'] and object.status == item['status'] and object.obtained == item['obtained']):
                logging.debug("If #2 Happened")
                continue
            else:
                logging.debug("Else Happened")
                continue

    if not user.query().fetch()[0].apple:
        for item in apple_list:
            user.apple.append(apple(name=item['name'], status=item['status'], obtained=item['obtained']))
            user.put()
    else:
        for item in apple_list:
            add(item)
4

1 に答える 1