diff options
| author | Giampaolo Rodola' <g.rodola@gmail.com> | 2013-12-07 20:33:16 +0100 |
|---|---|---|
| committer | Giampaolo Rodola' <g.rodola@gmail.com> | 2013-12-07 20:33:16 +0100 |
| commit | c234084a8792a33cf3a180ab816d54e24f9b010f (patch) | |
| tree | 8539c2be7d86c4f2088e78eaaecff3f9d9853a08 /psutil/_common.py | |
| parent | 5f29c2a443a24c3a0db555c0e3a836a38db86e59 (diff) | |
| download | psutil-c234084a8792a33cf3a180ab816d54e24f9b010f.tar.gz | |
fix issue 454: cached properties should be read-only
Diffstat (limited to 'psutil/_common.py')
| -rw-r--r-- | psutil/_common.py | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/psutil/_common.py b/psutil/_common.py index d041edd5..7a8fc24f 100644 --- a/psutil/_common.py +++ b/psutil/_common.py @@ -75,18 +75,20 @@ def memoize(f): return memf -class cached_property(object): +# http://code.activestate.com/recipes/576563-cached-property/ +def cached_property(fun): """A memoize decorator for class properties.""" - enabled = True - - def __init__(self, func): - self.func = func - - def __get__(self, instance, type): - ret = self.func(instance) - if self.enabled: - instance.__dict__[self.func.__name__] = ret + @wraps(fun) + def get(self): + try: + return self._cache[fun] + except AttributeError: + self._cache = {} + except KeyError: + pass + ret = self._cache[fun] = fun(self) return ret + return property(get) # http://goo.gl/jYLvf |
