1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 from appengine_wrappers import db 6 from appengine_wrappers import BlobReferenceProperty 7 8 BLOB_REFERENCE_BLOBSTORE = 'BlobReferenceBlobstore' 9 10 class _Model(db.Model): 11 key_ = db.StringProperty() 12 value = BlobReferenceProperty() 13 14 class BlobReferenceStore(object): 15 """A wrapper around the datastore API that can store blob keys. 16 """ 17 def _Query(self, namespace, key): 18 return _Model.gql('WHERE key_ = :1', self._MakeKey(namespace, key)).get() 19 20 def _MakeKey(self, namespace, key): 21 return '.'.join((namespace, key)) 22 23 def Set(self, namespace, key, value): 24 _Model(key_=self._MakeKey(namespace, key), value=value).put() 25 26 def Get(self, namespace, key): 27 result = self._Query(namespace, key) 28 if not result: 29 return None 30 return result.value 31 32 def Delete(self, namespace, key): 33 result = self._Query(namespace, key) 34 if not result: 35 return None 36 blob_key = result.value 37 result.delete() 38 return blob_key 39