Commit 60e436c2 by Calen Pennington

Push `get` down into per-type caches

parent 407db169
...@@ -206,7 +206,13 @@ class DjangoOrmFieldCache(object): ...@@ -206,7 +206,13 @@ class DjangoOrmFieldCache(object):
Returns: A django orm object from the cache Returns: A django orm object from the cache
""" """
return self._cache.get(self._cache_key_for_kvs_key(kvs_key)) cache_key = self._cache_key_for_kvs_key(kvs_key)
if cache_key not in self._cache:
raise KeyError(kvs_key.field_name)
field_object = self._cache[cache_key]
return json.loads(field_object.value)
@contract(kvs_key=DjangoKeyValueStore.Key) @contract(kvs_key=DjangoKeyValueStore.Key)
def set(self, kvs_key, value): def set(self, kvs_key, value):
...@@ -411,6 +417,25 @@ class UserStateCache(DjangoOrmFieldCache): ...@@ -411,6 +417,25 @@ class UserStateCache(DjangoOrmFieldCache):
field_object.save() field_object.save()
@contract(kvs_key=DjangoKeyValueStore.Key) @contract(kvs_key=DjangoKeyValueStore.Key)
def get(self, kvs_key):
"""
Return the django model object specified by `kvs_key` from
the cache.
Arguments:
kvs_key (`DjangoKeyValueStore.Key`): The field value to delete
Returns: A django orm object from the cache
"""
cache_key = self._cache_key_for_kvs_key(kvs_key)
if cache_key not in self._cache:
raise KeyError(kvs_key.field_name)
field_object = self._cache[cache_key]
return json.loads(field_object.state)[kvs_key.field_name]
@contract(kvs_key=DjangoKeyValueStore.Key)
def delete(self, kvs_key): def delete(self, kvs_key):
""" """
Delete the value specified by `kvs_key`. Delete the value specified by `kvs_key`.
...@@ -793,14 +818,7 @@ class FieldDataCache(object): ...@@ -793,14 +818,7 @@ class FieldDataCache(object):
if key.scope not in self.cache: if key.scope not in self.cache:
raise KeyError(key.field_name) raise KeyError(key.field_name)
field_object = self.cache[key.scope].get(key) return self.cache[key.scope].get(key)
if field_object is None:
raise KeyError(key.field_name)
if key.scope == Scope.user_state:
return json.loads(field_object.state)[key.field_name]
else:
return json.loads(field_object.value)
@contract(kv_dict="dict(DjangoKeyValueStore_Key: *)") @contract(kv_dict="dict(DjangoKeyValueStore_Key: *)")
def set_many(self, kv_dict): def set_many(self, kv_dict):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment