2

主に appengine でドロップボックスを使用する方法を理解するために、ドロップボックスでサイトを取得しようとしています。

python: c:\Program Files (x86)\Google\google_appengine>python Python 2.7.3 (デフォルト、2012 年 4 月 10 日 23:31:26) [MSC v.1500 32 ビット (Intel)] on win 32

Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\webapp\_webapp25.py", line 701, in __call__
    handler.get(*groups)
  File "C:\youiestsiteinadropbox\siteinadropbox\handlers\dropboxhandlers.py", line 38, in new_f
    f(self, *args, **kwargs)
  File "C:\youiestsiteinadropbox\siteinadropbox\handlers\dropboxhandlers.py", line 65, in get
    self.dropbox_auth_callback(self.site)
  File "C:\youiestsiteinadropbox\siteinadropbox\handlers\dropboxhandlers.py", line 118, in dropbox_auth_callback
    access_token = models.Site.dropbox_auth.obtain_access_token(token, "")
  File "C:\youiestsiteinadropbox\dropbox\auth.py", line 177, in obtain_access_token
    self.oauth_request.sign_request(self.signature_method_hmac_sha1, self.consumer, token)
  File "C:\youiestsiteinadropbox\oauth\oauth.py", line 259, in sign_request
    self.build_signature(signature_method, consumer, token))
  File "C:\youiestsiteinadropbox\oauth\oauth.py", line 263, in build_signature
    return signature_method.build_signature(self, consumer, token)
  File "C:\youiestsiteinadropbox\oauth\oauth.py", line 634, in build_signature
    hashed = hmac.new(key, raw, sha)
  File "C:\Python27\lib\hmac.py", line 133, in new
    return HMAC(key, msg, digestmod)
  File "C:\Python27\lib\hmac.py", line 72, in __init__
    self.outer.update(key.translate(trans_5C))
TypeError: character mapping must return integer, None or unicode

アプリ内で行われた最後の呼び出しは次のとおりです。

ファイル「C:\youiestsiteinadropbox\siteinadropbox\handlers\dropboxhandlers.py」、118 行目、dropbox_auth_callback access_token = models.Site.dropbox_auth.obtain_access_token(token, "")

この部分をユニコードに変換することにあまり成功していません。appengine で Dropbox を使い始める方法に関するアイデアやその他の指針はありますか? 前もって感謝します。

4

2 に答える 2

3

私はこれまでsiteinadropboxを使用したことがありませんが、このエラーの最終的な原因は、コードがオブジェクトであると想定しているときにkey、最後の変数がオブジェクトであるということです。特に役立つメッセージではありません、私は知っています。unicodestr

私はsiteinadropboxコードをチェックアウトし、そのkey値がどこから来ているかを確認しました。どこかでシェナニガンが発生していない限り、dropbox.auth.Authenticatorインスタンスself.consumer.secretがユニコードの場合、またはtoken.secretfromdropbox_auth_callbackがユニコードの場合にのみユニコードになります。どちらがどのように発生するかを大まかに調べてもわかりません。configを作成するときに、たまたまカスタムdictを渡したのですか、それとも、との例で行われているように、Authenticatorを使用するパターンに従いましたか?Authenticator.load_configsiteinadropbox/models/site.pytest/dbtools.py

于 2012-07-09T15:59:15.330 に答える
0

hmac.py を変更し、tranlate が呼び出される前にキーが unicode の場合は str オブジェクトに変換し、動作します。

    # hmac.py
       ...
    71 key = key + chr(0) * (blocksize - len(key))
    72 if type(key) == unicode:
    73     key = key.encode()
    74 self.outer.update(key.translate(trans_5C))
       ...
于 2013-05-17T07:24:18.990 に答える