bvk
bvk

Reputation: 395

Google cloud storage client with remote api on local client

I'm trying to use the google remote api on my app engine project to upload local files to my app's default cloud storage bucket.

I have configured my app.yaml to have remote api on. I'm able to access my bucket and upload/access files from it. I run my local python console and try to write to the bucket with the following code:

from google.appengine.ext.remote_api import remote_api_stub
from google.appengine.api import app_identity
import cloudstorage

def auth_func():
  return ('[email protected]', '*******')

remote_api_stub.ConfigureRemoteApi('my-app-id', '/_ah/remote_api', auth_func,'my-app-id.appspot.com')
filename = "/"+app_identity.get_default_gcs_bucket_name()+ "/myfile.txt"
gcs_file = cloudstorage.open(filename,'w',content_type='text/plain',options={'x-goog-meta-foo': 'foo','x-goog-meta-bar': 'bar'})

I see the following reponse:

WARNING:root:suspended generator urlfetch(context.py:1214) raised DownloadError(Unable to fetch URL: http://None/_ah/gcs/my-app-id.appspot.com/myfile.txt)

Notice the

http://None/_ah/gcs.....  

I don't think None should be part of the url. Is there an issue with the GoogleAppEngineCloudStorageClient, v1.9.0.0? I'm also using Google App Engine 1.9.1.

Any ideas?

Upvotes: 2

Views: 626

Answers (2)

Mykola
Mykola

Reputation: 31

Google Cloud Storage client does not respect remote_api_stub and considers you are running script locally

os.environ['SERVER_SOFTWARE'] = 'Development (remote_api)/1.0'

or even

os.environ['SERVER_SOFTWARE'] = ''

will help.

The function, checking your environment from common.py

def local_run():
  """Whether we should hit GCS dev appserver stub."""
  server_software = os.environ.get('SERVER_SOFTWARE')
  if server_software is None:
    return True
  if 'remote_api' in server_software:
    return False
  if server_software.startswith(('Development', 'testutil')):
    return True
  return False

Upvotes: 2

David
David

Reputation: 5519

If I understand correctly, you want to upload a local text file to a specific bucket. I do not think what you're doing will work.

The alternative would be to ditch the RemoteAPI and upload it using the Cloud Storage API.

Upvotes: 0

Related Questions