27 lines
816 B
Python
27 lines
816 B
Python
|
NOT_PROVIDED = object()
|
||
|
|
||
|
|
||
|
class FieldCacheMixin:
|
||
|
"""Provide an API for working with the model's fields value cache."""
|
||
|
|
||
|
def get_cache_name(self):
|
||
|
raise NotImplementedError
|
||
|
|
||
|
def get_cached_value(self, instance, default=NOT_PROVIDED):
|
||
|
cache_name = self.get_cache_name()
|
||
|
try:
|
||
|
return instance._state.fields_cache[cache_name]
|
||
|
except KeyError:
|
||
|
if default is NOT_PROVIDED:
|
||
|
raise
|
||
|
return default
|
||
|
|
||
|
def is_cached(self, instance):
|
||
|
return self.get_cache_name() in instance._state.fields_cache
|
||
|
|
||
|
def set_cached_value(self, instance, value):
|
||
|
instance._state.fields_cache[self.get_cache_name()] = value
|
||
|
|
||
|
def delete_cached_value(self, instance):
|
||
|
del instance._state.fields_cache[self.get_cache_name()]
|