blob_reference_store.py revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
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
5from appengine_wrappers import db
6from appengine_wrappers import BlobReferenceProperty
7
8BLOB_REFERENCE_BLOBSTORE = 'BlobReferenceBlobstore'
9
10class _Model(db.Model):
11  key_ = db.StringProperty()
12  value = BlobReferenceProperty()
13
14class 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