OLD | NEW |
---|---|
(Empty) | |
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 import appengine_memcache as memcache | |
6 from appengine_memcache import AppEngineMemcache | |
7 from appengine_wrappers import blobstore | |
8 from appengine_wrappers import files | |
9 | |
10 class AppEngineBlobstore(object): | |
11 """A wrapper around the blobstore API, which stores the blob keys in memcache | |
12 and in memory. The blob keys are stored in both places in case the blob key | |
13 gets flushed from memcache. | |
14 """ | |
not at google - send to devlin
2012/08/07 01:35:38
methods could do with some documentation, e.g. wha
cduvall
2012/08/08 19:27:25
Done.
| |
15 def __init__(self): | |
16 self._memcache = AppEngineMemcache('blobstore') | |
17 self._blob_keys = {} | |
not at google - send to devlin
2012/08/07 01:35:38
If the keys are only stored in volatile memory (me
cduvall
2012/08/08 19:27:25
Done.
| |
18 | |
19 def Set(self, blob, key, version): | |
not at google - send to devlin
2012/08/07 01:35:38
usually the key would be before the value in the p
cduvall
2012/08/08 19:27:25
Done.
| |
20 key = key + '.' + str(version) | |
21 filename = files.blobstore.create() | |
22 with files.open(filename, 'a') as f: | |
23 f.write(blob) | |
24 files.finalize(filename) | |
25 blob_key = files.blobstore.get_blob_key(filename) | |
26 self._blob_keys[key] = blob_key | |
27 self._memcache.Set(key, blob_key, memcache.MEMCACHE_BLOBSTORE, time=0) | |
28 | |
29 def Get(self, key, version): | |
30 key = key + '.' + str(version) | |
31 if key not in self._blob_keys: | |
32 blob_key = self._memcache.Get(key, memcache.MEMCACHE_BLOBSTORE) | |
33 if blob_key is None: | |
34 return None | |
35 self._blob_keys[key] = blob_key | |
36 else: | |
37 blob_key = self._blob_keys[key] | |
38 blob_reader = blobstore.BlobReader(blob_key) | |
39 return blob_reader.read() | |
40 | |
41 def Delete(self, key, version): | |
42 key = key + '.' + str(version) | |
43 if key not in self._blob_keys: | |
44 blob_key = self._memcache.Get(key, memcache.MEMCACHE_BLOBSTORE) | |
45 if blob_key is None: | |
46 return | |
47 else: | |
48 blob_key = self._blob_keys[key] | |
49 self._blob_keys.pop(key) | |
50 blobstore.delete(blob_key) | |
OLD | NEW |