summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--six.py11
-rw-r--r--test_six.py20
2 files changed, 29 insertions, 2 deletions
diff --git a/six.py b/six.py
index 3fe5198..1238290 100644
--- a/six.py
+++ b/six.py
@@ -81,14 +81,21 @@ class _LazyDescr(object):
def __init__(self, name):
self.name = name
+ self._cached_value = None
def __get__(self, obj, tp):
+ if self._cached_value is not None:
+ return self._cached_value
result = self._resolve()
setattr(obj, self.name, result)
- # This is a bit ugly, but it avoids running this again.
- delattr(tp, self.name)
return result
+ def __set__(self, obj, value):
+ self._cached_value = value
+
+ def __delete__(self, obj):
+ self._cached_value = None
+
class MovedModule(_LazyDescr):
diff --git a/test_six.py b/test_six.py
index 8815ee1..e6e75dd 100644
--- a/test_six.py
+++ b/test_six.py
@@ -163,6 +163,26 @@ def test_move_items_urllib_robotparser(item_name):
getattr(six.moves.urllib.robotparser, item_name)
+def test_import_moves_error_1():
+ from six.moves.urllib.parse import urljoin
+ from six import moves
+ # In 1.4.1: AttributeError: 'Module_six_moves_urllib_parse' object has no attribute 'urljoin'
+ assert moves.urllib.parse.urljoin
+
+
+def test_import_moves_error_2():
+ from six import moves
+ assert moves.urllib.parse.urljoin
+ # In 1.4.1: ImportError: cannot import name urljoin
+ from six.moves.urllib.parse import urljoin
+
+
+def test_import_moves_error_3():
+ from six.moves.urllib.parse import urljoin
+ # In 1.4.1: ImportError: cannot import name urljoin
+ from six.moves.urllib_parse import urljoin
+
+
def test_filter():
from six.moves import filter
f = filter(lambda x: x % 2, range(10))