summaryrefslogtreecommitdiffstats
path: root/glances/globals.py
diff options
context:
space:
mode:
Diffstat (limited to 'glances/globals.py')
-rw-r--r--glances/globals.py34
1 files changed, 31 insertions, 3 deletions
diff --git a/glances/globals.py b/glances/globals.py
index 87a48817..315d0d57 100644
--- a/glances/globals.py
+++ b/glances/globals.py
@@ -25,6 +25,8 @@ import subprocess
from datetime import datetime
import re
import base64
+import functools
+import weakref
import queue
from configparser import ConfigParser, NoOptionError, NoSectionError
@@ -315,10 +317,10 @@ def json_dumps(data):
return ujson.dumps(data, ensure_ascii=False)
-def json_dumps_dictlist(data, item):
+def dictlist(data, item):
if isinstance(data, dict):
try:
- return json_dumps({item: data[item]})
+ return {item: data[item]}
except (TypeError, IndexError, KeyError):
return None
elif isinstance(data, list):
@@ -326,13 +328,21 @@ def json_dumps_dictlist(data, item):
# Source:
# http://stackoverflow.com/questions/4573875/python-get-index-of-dictionary-item-in-list
# But https://github.com/nicolargo/glances/issues/1401
- return json_dumps({item: list(map(itemgetter(item), data))})
+ return {item: list(map(itemgetter(item), data))}
except (TypeError, IndexError, KeyError):
return None
else:
return None
+def json_dumps_dictlist(data, item):
+ dl = dictlist(data, item)
+ if dl is None:
+ return None
+ else:
+ return json_dumps(dl)
+
+
def string_value_to_float(s):
"""Convert a string with a value and an unit to a float.
Example:
@@ -398,3 +408,21 @@ def folder_size(path, errno=0):
except OSError as e:
ret_err = e.errno
return ret_size, ret_err
+
+
+def weak_lru_cache(maxsize=128, typed=False):
+ """LRU Cache decorator that keeps a weak reference to self
+ Source: https://stackoverflow.com/a/55990799"""
+
+ def wrapper(func):
+ @functools.lru_cache(maxsize, typed)
+ def _func(_self, *args, **kwargs):
+ return func(_self(), *args, **kwargs)
+
+ @functools.wraps(func)
+ def inner(self, *args, **kwargs):
+ return _func(weakref.ref(self), *args, **kwargs)
+
+ return inner
+
+ return wrapper