GAE:TypeError:字符映射必须返回整数,None或unicode

时间:2012-07-09 14:12:26

标签: python google-app-engine unicode oauth-2.0 dropbox

我正试图让site in a dropbox主要了解如何在appengine上使用dropbox。

python: c:\ Program Files(x86)\ Google \ google_appengine> python Python 2.7.3(默认,2012年4月10日,23:31:26)[MSC v.1500 32位(英特尔)]获胜 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,“”)

将此部分转换为unicode没有太大成功。关于如何开始使用dropbox上的dropbox的任何想法或其他指示?提前谢谢。

2 个答案:

答案 0 :(得分:3)

我还没有使用过siteinadropbox,但是这个错误的最终原因是,当代码期望它是{{key时,最后一个unicode变量是str对象。 1}}对象。我知道,这不是一个特别有用的信息。

我检查了siteinadropbox代码,并检查了key值的来源,除非有某些恶作剧,但只有当dropbox.auth.Authenticator实例的{{1}时,它才会是unicode是unicode或来自self.consumer.secret的{​​{1}}是unicode。我不会粗略地看一下这两种情况是怎么发生的。您是否恰好在创建token.secret时传递了自定义dropbox_auth_callback字典,或者您是否遵循了使用config的模式,就像Authenticator和{{Authenticator.load_config中所做的那样1}}例子?

答案 1 :(得分: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))
       ...