From 951c19d7895d9e33792bc4e2f0842f16f773d4f4 Mon Sep 17 00:00:00 2001 From: Calen Pennington Date: Wed, 15 Apr 2015 13:23:43 -0400 Subject: [PATCH] Push `get` down into FieldDataCache, from DjangoKeyValueStore --- lms/djangoapps/courseware/model_data.py | 28 ++++++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/lms/djangoapps/courseware/model_data.py b/lms/djangoapps/courseware/model_data.py index a0d2123e88..8d6057dde7 100644 --- a/lms/djangoapps/courseware/model_data.py +++ b/lms/djangoapps/courseware/model_data.py @@ -132,14 +132,7 @@ class DjangoKeyValueStore(KeyValueStore): if key.scope not in self._allowed_scopes: raise InvalidScopeError(key) - field_object = self._field_data_cache.find(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) + return self._field_data_cache.get(key) def set(self, key, value): """ @@ -622,6 +615,25 @@ class FieldDataCache(object): scope_map[field.scope].add(field) return scope_map + @contract(key=DjangoKeyValueStore.Key) + def get(self, key): + ''' + Load the field value specified by `key`. + + Arguments: + key (`DjangoKeyValueStore.Key`): The field value to load + + Returns: The found value + Raises: KeyError if key isn't found in the cache + ''' + field_object = self.find(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) def find(self, key): '''