summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralexanderlukanin13 <alexander.lukanin.13@gmail.com>2013-11-07 12:37:58 +0600
committeralexanderlukanin13 <alexander.lukanin.13@gmail.com>2013-11-07 12:37:58 +0600
commitd4ef06a1d8f8ba96d702482979b57a73bca4c578 (patch)
tree73f68dda13b078500b928c302b035a6b0ba50e71
parentc2312c1c26a9c68d4c7dad96eba5b39695adbd3f (diff)
downloadsix-d4ef06a1d8f8ba96d702482979b57a73bca4c578.tar.gz
moves import bug fixed
-rw-r--r--.hgignore1
-rw-r--r--six.py11
-rw-r--r--test_six.py20
3 files changed, 30 insertions, 2 deletions
diff --git a/.hgignore b/.hgignore
index 2a22acf..daf4562 100644
--- a/.hgignore
+++ b/.hgignore
@@ -3,4 +3,5 @@ syntax: glob
dist
MANIFEST
documentation/_build
+.idea
.tox
diff --git a/six.py b/six.py
index 176196c..97a7312 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 efeb33e..ec4d468 100644
--- a/test_six.py
+++ b/test_six.py
@@ -140,6 +140,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))