For python 3.x with boolean target, len() results in TypeError, so
authorZac Medico <zmedico@gentoo.org>
Tue, 22 Sep 2009 18:54:27 +0000 (18:54 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 22 Sep 2009 18:54:27 +0000 (18:54 -0000)
make __len__ return 0 or 1 in this case.

svn path=/main/trunk/; revision=14377

pym/portage/proxy/objectproxy.py

index 00c5076d18305a03330a4021da7e3b580152eff3..6dffff7d5ed57434b297eae91d1943eedcbf8dd1 100644 (file)
@@ -45,7 +45,15 @@ class ObjectProxy(object):
                return iter(object.__getattribute__(self, '_get_target')())
 
        def __len__(self):
-               return len(object.__getattribute__(self, '_get_target')())
+               try:
+                       return len(object.__getattribute__(self, '_get_target')())
+               except TypeError:
+                       # For python 3.x with boolean target, len() results in
+                       # TypeError, so return 0 or 1.
+                       if bool(object.__getattribute__(self, '_get_target')()):
+                               return 1
+                       else:
+                               return 0
 
        def __repr__(self):
                return repr(object.__getattribute__(self, '_get_target')())