summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorhut <hut@lavabit.com>2010-05-22 16:38:24 +0200
committerhut <hut@lavabit.com>2010-05-22 16:38:24 +0200
commit7f906f5f9cf77bd24ac6294c964a3fdb85988033 (patch)
tree579358bb587dffab44f3440f173c0b5dbb79344e
parentb357f51526a9a4ab276f4376f16f48af670f0664 (diff)
downloadranger-7f906f5f9cf77bd24ac6294c964a3fdb85988033.tar.gz
Added ranger.ext.lazy_property
-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