cygprofile: increase timeouts to allow showing web contents
[chromium-blink-merge.git] / chrome / common / extensions / docs / server2 / appengine_blobstore.py
bloba7a7f824e079078bd9bbe6108eb838913aa80d8a
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.
5 import blob_reference_store as datastore
6 from blob_reference_store import BlobReferenceStore
7 from appengine_wrappers import blobstore
8 from appengine_wrappers import files
10 BLOBSTORE_GITHUB = 'BlobstoreGithub'
12 # TODO(kalman): Re-write this class.
13 # - It uses BlobReader which is a synchronous method. We should be creating
14 # multiple async fetches, one for each partition, then exposing a Future
15 # interface which stitches them together.
16 # - It's very hard to reuse.
18 class AppEngineBlobstore(object):
19 """A wrapper around the blobstore API, which stores the blob keys in
20 datastore.
21 """
22 def __init__(self):
23 self._datastore = BlobReferenceStore()
25 def Set(self, key, blob, namespace):
26 """Add a blob to the blobstore. |version| is used as part of the key so
27 multiple blobs with the same name can be differentiated.
28 """
29 key = namespace + '.' + key
30 filename = files.blobstore.create()
31 with files.open(filename, 'a') as f:
32 f.write(blob)
33 files.finalize(filename)
34 blob_key = files.blobstore.get_blob_key(filename)
35 self._datastore.Set(datastore.BLOB_REFERENCE_BLOBSTORE, key, blob_key)
37 def Get(self, key, namespace):
38 """Get a blob with version |version|.
39 """
40 key = namespace + '.' + key
41 blob_key = self._datastore.Get(datastore.BLOB_REFERENCE_BLOBSTORE, key)
42 if blob_key is None:
43 return None
44 blob_reader = blobstore.BlobReader(blob_key)
45 return blob_reader.read()
47 def Delete(self, key, namespace):
48 """Delete the blob with version |version| if it is found.
49 """
50 key = namespace + '.' + key
51 blob_key = self._datastore.Delete(datastore.BLOB_REFERENCE_BLOBSTORE, key)
52 if blob_key is None:
53 return
54 blob_key.delete()