Próbuję tworzyć pliki w folderze Dropbox.com z aplikacji GAE. Wykonałem wszystkie kroki rejestrując aplikację Dropbox i zainstalowałem Python SDK z Dropbox lokalnie na mojej maszynie programistycznej. (patrz interfejs API dropbox.com). Wszystko działa idealnie, gdy korzystam ze skryptu testowego cli_client.py w pakiecie SDK na moim komputerze lokalnym, aby uzyskać dostęp do skrzynki referencyjnej - mogę "umieścić" pliki itp.Zapisywanie plików na koncie Dropbox z GAE
Chcę teraz rozpocząć pracę w środowisku GAE, więc rzeczy się trochę trudne. Przydałaby się pomoc.
Dla obeznanych z kodem Dropbox API, miałem następujące zagadnienia dotąd:
Issue 1
rest.py Dropbox moduł API używa pkg_resources aby uzyskać certs witryny-zainstalowane w pakiety instalacji komputera lokalnego. Wymieniłem
TRUSTED_CERT_FILE = pkg_resources.resource_filename(__name__, 'trusted-certs.crt')
z
TRUSTED_CERT_FILE = file('trusted-certs.crt')
i umieszcza plik cert w moim katalogu aplikacji GAE. Być może nie jest to w porządku; zobacz mój kod błędu uwierzytelniania poniżej.
Issue 2
session.py Dropbox moduł API używa OAuth modułu, więc zmieniłem to do AppEngine OAuth.
Ale podniósł wyjątek, że oauth GAE nie ma metody OAuthConsumer używanej przez moduł sesyjny Dropbox session.py. Więc ściągnąłem oauth 1.0 i dodałem do mojej aplikacji a teraz zaimportuję to zamiast GAEA oauth.
Issue 3
GAE moduł SSL nie wydaje się mieć CERT_REQUIRED nieruchomości.
To jest stała, więc zmieniłem
self.cert_reqs = ssl.CERT_REQUIRED
do
self.cert_reqs = 2
ten jest wykorzystywany podczas wywoływania
ssl.wrap_socket(sock, cert_reqs=self.cert_reqs, ca_certs=self.ca_certs)
Authentication Error
Ale nadal nie może połączyć się z 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')]
Mam nadzieję, że ktoś odpowiada na to. W międzyczasie, chociaż nie jestem pewien, co to jest pkg_resources.resource_filename(), myślę, że zwraca nazwę pliku, a nie otwarty plik, podczas gdy file() otwiera podany plik i zwraca obiekt strumienia (otwarty plik). Zamiast tego możesz wypróbować 'TRUSTED_CERT_FILE = 'trusted-certs.crt''. –
Dzięki Guido - spróbujmy tego, – erickCo
Guido, masz rację, typ zwracany przez 'pkg_resources.resource_filename()' to 'str'. Wartością jest pełna ścieżka do pliku certyfikatów. Więc wprowadziłem zmianę, jak sugerujesz. Niestety, wciąż ten sam błąd. – erickCo