Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

BlobInfo object from a BlobKey created using blobstore.create_gs_key

I am converting code away from the deprecated files api.

I have the following code that works fine in the SDK server but fails in production. Is what I am doing even correct? If yes what could be wrong, any ideas how to troubleshoot it?

# Code earlier writes the file bs_file_name. This works fine because I can see the file
# in the Cloud Console.
bk = blobstore.create_gs_key( "/gs" + bs_file_name)
assert(bk)
if not isinstance(bk,blobstore.BlobKey):
    bk = blobstore.BlobKey(bk)
assert isinstance(bk,blobstore.BlobKey)
# next line fails here in production only
assert(blobstore.get(bk))  # <----------- blobstore.get(bk) returns None 
like image 919
gae123 Avatar asked Mar 22 '23 02:03

gae123


2 Answers

Unfortunately, as per the documentation, you can't get a BlobInfo object for GCS files.

https://developers.google.com/appengine/docs/python/blobstore/#Python_Using_the_Blobstore_API_with_Google_Cloud_Storage

Note: Once you obtain a blobKey for the GCS object, you can pass it around, serialize it, and otherwise use it interchangeably anywhere you can use a blobKey for objects stored in Blobstore. This allows for usage where an app stores some data in blobstore and some in GCS, but treats the data otherwise identically by the rest of the app. (However, BlobInfo objects are currently not available for GCS objects.)

like image 123
Mitch ミッチ Avatar answered Apr 10 '23 09:04

Mitch ミッチ


I encountered this exact same issue today and it feels very much like a bug within the blobstore api when using google cloud storage.

Rather than leveraging the blobstore api I made use of the google cloud storage client library. The library can be downloaded here: https://developers.google.com/appengine/docs/python/googlecloudstorageclient/download

To access a file on GCS:

import cloudstorage as gcs

with gcs.open(GCSFileName) as f:
    blob_content = f.read()
    print blob_content
like image 34
Jesse Avatar answered Apr 10 '23 10:04

Jesse