Estoy tratando de crear archivos en una carpeta de Dropbox.com desde una aplicación GAE. He realizado todos los pasos para registrar una aplicación de Dropbox e instalé el SDK de Python desde Dropbox localmente en mi máquina de desarrollo. (ver la API de dropbox.com). Todo funciona perfectamente cuando uso el script de prueba cli_client.py en Dropbox SDK en mi máquina local para acceder a Dropbox - puedo 'poner' archivos etc.Escribiendo archivos en la cuenta de Dropbox desde GAE
Ahora quiero empezar a trabajar en el entorno GAE, para que las cosas se pongan un poco complicado Alguna ayuda sería útil.
Para aquellos familiarizados con el código API de Dropbox, que tenían las siguientes cuestiones: hasta el momento
Número 1
El módulo API de Dropbox rest.py utiliza pkg_resources para obtener el CERT instalados en sitio- paquetes de una instalación de máquina local. que sustituyen
TRUSTED_CERT_FILE = pkg_resources.resource_filename(__name__, 'trusted-certs.crt')
con
TRUSTED_CERT_FILE = file('trusted-certs.crt')
y se coloca el archivo cert en mi directorio de la aplicación GAE. Quizás esto no es del todo correcto; ver mi código de error de autenticación a continuación.
Edición 2
El módulo API Dropbox session.py utiliza oauth módulo, por lo que cambió el incluyen a AppEngine oauth.
Pero se ha presentado una excepción que GAE's oauth no tiene OAuthConsumer método utilizado por el módulo de Dropbox session.py. Así que descargué Oauth 1.0 y lo agregué a mi aplicación y ahora importé esto en lugar de GAE oauth.
Número 3
módulo SSL GAE no parecen tener la propiedad CERT_REQUIRED.
Ésta es una constante, por lo que cambió
self.cert_reqs = ssl.CERT_REQUIRED
a
self.cert_reqs = 2
Esto se utiliza cuando se llama a
ssl.wrap_socket(sock, cert_reqs=self.cert_reqs, ca_certs=self.ca_certs)
falla la autenticación
Pero todavía no puedo conectar a 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')]
espero que alguien responde a esta. Mientras tanto, aunque no estoy seguro de qué es pkg_resources.resource_filename(), creo que devuelve un nombre de archivo, no un archivo abierto, mientras que file() abre el archivo nombrado y devuelve un objeto de secuencia (archivo abierto). Es posible que desee probar 'TRUSTED_CERT_FILE = 'trusted-certs.crt'' en su lugar. –
Gracias Guido - intentará que – erickCo
Guido, está en lo cierto, el tipo devuelto por 'pkg_resources.resource_filename()' es 'str'. El valor es la ruta completa al archivo certs. Así que hice el cambio como sugieres. Por desgracia, sigue siendo el mismo error. – erickCo