Chromium Code Reviews| Index: appengine/isolate/model.py |
| diff --git a/appengine/isolate/model.py b/appengine/isolate/model.py |
| index 123d6ba436dfb578408bffbfcd977ca2c30b4632..b6b66f18e3bb34b9d4efee3fd628b9aefed43543 100644 |
| --- a/appengine/isolate/model.py |
| +++ b/appengine/isolate/model.py |
| @@ -134,6 +134,23 @@ def entry_key_from_id(key_id): |
| ContentEntry, key_id, |
| parent=datastore_utils.shard_key(hash_key, N, 'ContentShard')) |
|
M-A Ruel
2016/04/14 14:05:06
2 lines between file level symbols
kjlubick
2016/04/14 14:57:37
Done.
|
| +def get_content(namespace, hash_key): |
| + """Returns the content from either memcache or datastore. |
|
M-A Ruel
2016/04/14 14:05:06
Add a note that it doesn't return content from GCS
kjlubick
2016/04/14 14:57:37
Done.
|
| + |
| + Raises LookupError if the content cannot be found. |
| + Raises ValueError if the hash_key is invalid.""" |
|
M-A Ruel
2016/04/14 14:05:06
""" on a separate line
kjlubick
2016/04/14 14:57:37
Done.
|
| + memcache_entry = memcache.get(hash_key, namespace='table_%s' % namespace) |
| + if memcache_entry is not None: |
| + return memcache_entry |
| + else: |
| + # Raises ValueError |
| + key = get_entry_key(namespace, hash_key) |
| + entity = key.get() |
| + if entity is None: |
| + raise LookupError("namespace %s, key %s does not refer to anything" % |
| + (namespace, hash_key)) |
| + return entity.content |
| + |
| def expiration_jitter(now, expiration): |
| """Returns expiration/next_tag pair to set in a ContentEntry.""" |