summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--ranger/ext/lazy_property.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/ranger/ext/lazy_property.py b/ranger/ext/lazy_property.py
new file mode 100644
index 00000000..6f894179
--- /dev/null
+++ b/ranger/ext/lazy_property.py
@@ -0,0 +1,25 @@
+# From http://blog.pythonisito.com/2008/08/lazy-descriptors.html
+
+class lazy_property(object):
+	"""
+	A @property-like decorator with lazy evaluation
+
+	Example:
+	class Foo:
+		@lazy_property
+			def bar(self):
+				result = [...]
+				return result
+	"""
+
+	def __init__(self, method):
+		self._method = method
+		self.__name__ = method.__name__
+		self.__doc__ = method.__doc__
+
+	def __get__(self, obj, cls=None):
+		if obj is None:  # to fix issues with pydoc
+			return None
+		result = self._method(obj)
+		obj.__dict__[self.__name__] = result
+		return result