12345678910111213141516171819202122232425262728293031323334 |
- _missing = object()
- class cached_property(property): # pragma: no cover
- """
- Import from:
- https://github.com/pallets/werkzeug/blob/master/werkzeug/utils.py
- """
- # implementation detail: A subclass of python's builtin property
- # decorator, we override __get__ to check for a cached value. If one
- # choses to invoke __get__ by hand the property will still work as
- # expected because the lookup logic is replicated in __get__ for
- # manual invocation.
- def __init__(self, func, name=None, doc=None):
- self.__name__ = name or func.__name__
- self.__module__ = func.__module__
- self.__doc__ = doc or func.__doc__
- self.__func__ = func
- def __set__(self, obj, value):
- obj.__dict__[self.__name__] = value
- def __get__(self, obj, type=None):
- if obj is None:
- return self
- value = obj.__dict__.get(self.__name__, _missing)
- if value is _missing:
- value = self.__func__(obj)
- obj.__dict__[self.__name__] = value
- return value
|