Explore going the route of using Clients ?
After our last talk, there have been quite a few different ideas tossed around to make it clear and obvious which credentials and project IDs are in use during a particular API call, some of those have been....
- Changing the default values globally
- Making "Connections" a context manager (
with connection: # do something) - Creating the concept of a client
We do (1), are talking about doing (2), while the others tend to do (3) -- and comparing the code, I think (3) is the nicest.
gcloud-node:
var gcloud = require('gcloud'); var project1_storage = gcloud.storage({projectId: 'project1', keyFilename: '/path/to/key'}); var project2_storage_auto = gcloud.storage(); # Do things with the two "clients"... bucket1 = project1_storage.get_bucket('bucket-1') bucket2 = project2_storage_auto.get_bucket('bucket2')
gcloud-ruby
require 'gcloud/storage' project1_storage = Gcloud.storage "project-id-1" "/path/to/key" project2_storage_auto = Gcloud.storage # Magically figure out the project ID and credentials # Do things with the two "clients"... bucket1 = project1_storage.find_bucket "bucket-1" bucket2 = project2_storage_auto.find_bucket "bucket-2"
gcloud-python
from gcloud import storage from gcloud.credentials import get_for_service_account_json # Create two different credentials. credentials1 = get_for_service_account_json('key1.json') credentials2 = get_for_service_account_json('key2.json') # Create two different connections. connection1 = storage.Connection(credentials=credentials1) connection2 = storage.Connection(credentials=credentials2) # Get two different buckets bucket1 = storage.get_bucket('bucket-1', project='project1', connection=connection1) bucket2 = storage.get_bucket('bucket-2', project='project2', connection=connection2)
gcloud-python if we followed the client pattern:
from gcloud import storage project1_storage = storage.Client('project1', '/path/to/key') project2_storage_auto = storage.Client() # Do things with the two "clients"... bucket1 = project1_storage.get_bucket('bucket-1') bucket2 = project2_storage_auto.get_bucket('bucket-2')
Another option for gcloud-python using the client pattern:
import gcloud project1_storage = gcloud.storage('project1', '/path/to/key') project2_storage_auto = gcloud.storage() # Do things with the two "clients" bucket1 = project1_storage.get_bucket('bucket-1') bucket2 = project2_storage_auto.get_bucket('bucket-2')