Я пытаюсь создать файлы в папке Dropbox.com из приложения GAE. Я сделал все шаги, чтобы зарегистрировать приложение Dropbox и установил Python SDK из Dropbox локально на моей машине разработки. (см. API Dropbox.com). Все это отлично работает, когда я использую тест cli_client.py script в SDK Dropbox на моем локальном компьютере для доступа к Dropbox - может "поместить" файлы и т.д.
Теперь я хочу начать работать в среде GAE, поэтому все становится немного сложнее. Некоторая помощь будет полезна.
Для тех, кто знаком с кодом API Dropbox, до сих пор у меня были следующие проблемы:
Проблема 1
Модуль rest.py Dropbox API использует pkg_resources для получения сертификатов, установленных в пакетах сайтов локальной установки компьютера. Я заменил
TRUSTED_CERT_FILE = pkg_resources.resource_filename(__name__, 'trusted-certs.crt')
с
TRUSTED_CERT_FILE = file('trusted-certs.crt')
и поместил файл сертификата в мою папку приложений GAE. Возможно, это не совсем правильно; см. мой код ошибки аутентификации ниже.
Проблема 2
В модуле API-интерфейса Dropbox API используется модуль oauth, поэтому я изменил include для appengine oauth.
Но возникло исключение, что GAE oauth не имеет метода OAuthConsumer, используемого модулем Dropbox session.py. Поэтому я загрузил oauth 1.0 и добавил в свое приложение теперь импортировать это вместо GAE oauth.
Проблема 3
Модуль GAE ssl не имеет свойства CERT_REQUIRED.
Это константа, поэтому я изменил
self.cert_reqs = ssl.CERT_REQUIRED
to
self.cert_reqs = 2
Это используется при вызове
ssl.wrap_socket(sock, cert_reqs=self.cert_reqs, ca_certs=self.ca_certs)
Ошибка аутентификации
Но я до сих пор не могу подключиться к Dropbox:
Status: 401
Reason: Unauthorized
Body: {"error": "Authentication failed"}
Headers: [('date', 'Sun, 19 Feb 2012 15:11:12 GMT'), ('transfer-encoding', 'chunked'), ('connection', 'keep-alive'), ('content-type', 'application/json'), ('server', 'dbws')]