2014-06-29 12 views
6

ja po przykład w https://developers.google.com/storage/docs/gspythonlibrary#credentialsnie może uwierzytelnić z GCS w Pythonie

I stworzył tajny klient/parę, wybierając w dev. konsola "utwórz nowy identyfikator klienta", "zainstalowaną aplikację", "inne".

Mam następujący kod w moim skrypt Pythona:

import boto 
from gcs_oauth2_boto_plugin.oauth2_helper import SetFallbackClientIdAndSecret 
CLIENT_ID = 'my_client_id' 
CLIENT_SECRET = 'xxxfoo' 
SetFallbackClientIdAndSecret(CLIENT_ID, CLIENT_SECRET) 

uri = boto.storage_uri('foobartest2014', 'gs') 
header_values = {"x-goog-project-id": proj_id} 
uri.create_bucket(headers=header_values) 

i to nie z powodu następującego błędu:

File "/usr/local/lib/python2.7/dist-packages/boto/storage_uri.py", line 555, in create_bucket 
     conn = self.connect() 
    File "/usr/local/lib/python2.7/dist-packages/boto/storage_uri.py", line 140, in connect 
     **connection_args) 
    File "/usr/local/lib/python2.7/dist-packages/boto/gs/connection.py", line 47, in __init__ 
     suppress_consec_slashes=suppress_consec_slashes) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 190, in __init__ 
     validate_certs=validate_certs, profile_name=profile_name) 
    File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 572, in __init__ 
     host, config, self.provider, self._required_auth_capability()) 
    File "/usr/local/lib/python2.7/dist-packages/boto/auth.py", line 883, in get_auth_handler 
     'Check your credentials' % (len(names), str(names))) 
    boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 3 handlers were checked. ['OAuth2Auth', 'OAuth2ServiceAccountAuth', 'HmacAuthV1Handler'] Check your credentials 
+0

Czy myślałeś o próbie gcloud-python (https://github.com/GoogleCloudPlatform/gcloud-python)? Może być łatwiej niż przy użyciu boto –

Odpowiedz

2

Trzeba zapewnić klient/tajny pary w pliku .boto, a następnie uruchom gsutil config.

Stworzy token odświeżania, a następnie powinien działać!

Aby uzyskać więcej informacji, zobacz https://developers.google.com/storage/docs/gspythonlibrary#credentials

+1

Dlaczego musimy określić client_id i client_secret w * obu * pliku .boto i kodzie źródłowym? – frmsaul

+0

Zobacz odpowiedź @ griffin2000, boto jest przestarzałe i nie dostanie się nigdzie z Google. – brma

3

mam zmaga się z tym przez ostatnie kilka dni, okazuje się, że rzeczy boto i że gspythonlibrary są całkowicie nieaktualne.

Najnowszy przykład kodu pokazuje, jak używać/uwierzytelnienia Google Cloud Storage jest tutaj: https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/storage/api

+0

dlaczego uważasz, że jest przestarzały? nadal pojawia się tutaj: https://cloud.google.com/storage/docs/xml-api/gspythonlibrary – Roman

+1

Tak, ten dokument jest nieaktualny. Jeśli spróbujesz wykonać te instrukcje za pomocą najnowszej wersji gcloud, nie powiedzie się to całkowicie. Cały system boto, opisany tam, jest już obsługiwany (lub przynajmniej mocno odradzany) – griffin2000

+0

Dzięki @ griffin2000, marnowałem godziny patrząc na ich dokumenty i otwierając bilety na wsparcie, dopóki nie znalazłem twojego komentarza. Mam uruchomione 2 minuty później ... Nie mogę uwierzyć, że nadal hostują ZŁE/NIEPRAWDZIWE dokumenty. Żadne dokumenty nie są lepsze niż złe dokumenty. – brma