Hello community,

here is the log from the commit of package python3-six for openSUSE:Factory 
checked in at 2014-09-17 17:26:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python3-six (Old)
 and      /work/SRC/openSUSE:Factory/.python3-six.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python3-six"

Changes:
--------
--- /work/SRC/openSUSE:Factory/python3-six/python3-six.changes  2014-05-09 
06:58:59.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python3-six.new/python3-six.changes     
2014-09-17 17:27:01.000000000 +0200
@@ -1,0 +2,34 @@
+Tue Sep 16 12:05:57 UTC 2014 - toddrme2...@gmail.com
+
+- update to version 1.8.0:
+  * Issue #90: Add six.moves.shlex_quote.
+  * Issue #59: Add six.moves.intern.
+  * Add six.urllib.parse.uses_(fragment|netloc|params|query|relative).
+  * Issue #88: Fix add_metaclass when the class has __slots__ containing
+  "__weakref__" or "__dict__".
+  * Issue #89: Make six use absolute imports.
+  * Issue #85: Always accept *updated* and *assigned* arguments for wraps().
+  * Issue #86: In reraise(), instantiate the exception if the second argument 
is
+  None.
+  * Pull request #45: Add six.moves.email_mime_nonmultipart.
+  * Issue #81: Add six.urllib.request.splittag mapping.
+  * Issue #80: Add six.urllib.request.splituser mapping.
+- update to 1.7.3:
+  - Issue #77: Fix import six on Python 3.4 with a custom loader.
+  - Issue #74: six.moves.xmlrpc_server should map to SimpleXMLRPCServer on 
Python
+    2 as documented not xmlrpclib.
+- update to 1.7.2:
+  - Issue #72: Fix installing on Python 2.
+  - Issue #71: Make the six.moves meta path importer handle reloading of the 
six
+  module gracefully.
+  - Pull request #30: Implement six.moves with a PEP 302 meta path hook.
+  - Pull request #32: Add six.wraps, which is like functools.wraps but always 
sets
+  the __wrapped__ attribute.
+  - Pull request #35: Improve add_metaclass, so that it doesn't end up 
inserting
+  another class into the hierarchy.
+  - Pull request #34: Add import mappings for dummy_thread.
+  - Pull request #33: Add import mappings for UserDict and UserList.
+  - Pull request #31: Select the implementations of dictionary iterator 
routines
+  at import time for a 20% speed boost.
+
+-------------------------------------------------------------------

Old:
----
  six-1.6.1.tar.gz

New:
----
  six-1.8.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python3-six.spec ++++++
--- /var/tmp/diff_new_pack.atpkYx/_old  2014-09-17 17:27:02.000000000 +0200
+++ /var/tmp/diff_new_pack.atpkYx/_new  2014-09-17 17:27:02.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python3-six
-Version:        1.6.1
+Version:        1.8.0
 Release:        0
 Url:            http://pypi.python.org/pypi/six/
 Summary:        Python 2 and 3 compatibility utilities

++++++ six-1.6.1.tar.gz -> six-1.8.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/six-1.6.1/CHANGES new/six-1.8.0/CHANGES
--- old/six-1.6.1/CHANGES       2014-03-14 04:36:39.000000000 +0100
+++ new/six-1.8.0/CHANGES       2014-09-11 23:42:45.000000000 +0200
@@ -3,6 +3,68 @@
 
 This file lists the changes in each six version.
 
+1.8.0
+-----
+
+- Issue #90: Add six.moves.shlex_quote.
+
+- Issue #59: Add six.moves.intern.
+
+- Add six.urllib.parse.uses_(fragment|netloc|params|query|relative).
+
+- Issue #88: Fix add_metaclass when the class has __slots__ containing
+  "__weakref__" or "__dict__".
+
+- Issue #89: Make six use absolute imports.
+
+- Issue #85: Always accept *updated* and *assigned* arguments for wraps().
+
+- Issue #86: In reraise(), instantiate the exception if the second argument is
+  None.
+
+- Pull request #45: Add six.moves.email_mime_nonmultipart.
+
+- Issue #81: Add six.urllib.request.splittag mapping.
+
+- Issue #80: Add six.urllib.request.splituser mapping.
+
+1.7.3
+-----
+
+- Issue #77: Fix import six on Python 3.4 with a custom loader.
+
+- Issue #74: six.moves.xmlrpc_server should map to SimpleXMLRPCServer on Python
+  2 as documented not xmlrpclib.
+
+1.7.2
+-----
+
+- Issue #72: Fix installing on Python 2.
+
+1.7.1
+-----
+
+- Issue #71: Make the six.moves meta path importer handle reloading of the six
+  module gracefully.
+
+1.7.0
+-----
+
+- Pull request #30: Implement six.moves with a PEP 302 meta path hook.
+
+- Pull request #32: Add six.wraps, which is like functools.wraps but always 
sets
+  the __wrapped__ attribute.
+
+- Pull request #35: Improve add_metaclass, so that it doesn't end up inserting
+  another class into the hierarchy.
+
+- Pull request #34: Add import mappings for dummy_thread.
+
+- Pull request #33: Add import mappings for UserDict and UserList.
+
+- Pull request #31: Select the implementations of dictionary iterator routines
+  at import time for a 20% speed boost.
+
 1.6.1
 -----
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/six-1.6.1/PKG-INFO new/six-1.8.0/PKG-INFO
--- old/six-1.6.1/PKG-INFO      2014-03-14 04:39:28.000000000 +0100
+++ new/six-1.8.0/PKG-INFO      2014-09-11 23:48:41.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: six
-Version: 1.6.1
+Version: 1.8.0
 Summary: Python 2 and 3 compatibility utilities
 Home-page: http://pypi.python.org/pypi/six/
 Author: Benjamin Peterson
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/six-1.6.1/documentation/index.rst 
new/six-1.8.0/documentation/index.rst
--- old/six-1.6.1/documentation/index.rst       2014-03-14 03:56:36.000000000 
+0100
+++ new/six-1.8.0/documentation/index.rst       2014-09-11 23:32:59.000000000 
+0200
@@ -222,6 +222,13 @@
    aliased to :class:`py3:object`.)
 
 
+.. function:: wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, 
updated=functools.WRAPPER_UPDATES)
+
+   This is exactly the :func:`py3:functools.wraps` decorator, but it sets the
+   ``__wrapped__`` attribute on what it decorates as 
:func:`py3:functools.wraps`
+   does on Python versions after 3.2.
+
+
 Syntax compatibility
 >>>>>>>>>>>>>>>>>>>>
 
@@ -259,7 +266,10 @@
    Reraise an exception, possibly with a different traceback.  In the simple
    case, ``reraise(*sys.exc_info())`` with an active exception (in an except
    block) reraises the current exception with the last traceback.  A different
-   traceback can be specified with the *exc_traceback* parameter.
+   traceback can be specified with the *exc_traceback* parameter.  Note that
+   since the exception reraising is done within the :func:`reraise` function,
+   Python will attach the call frame of :func:`reraise` to whatever traceback 
is
+   raised.
 
 
 .. function:: with_metaclass(metaclass, *bases)
@@ -285,9 +295,7 @@
 .. function:: add_metaclass(metaclass)
 
    Class decorator that replaces a normally-constructed class with a
-   metaclass-constructed one.  Unlike :func:`with_metaclass`,
-   :func:`add_metaclass` does not create an intermediate base class between the
-   class being created and its bases. Example usage: ::
+   metaclass-constructed one.  Example usage: ::
 
        @add_metaclass(Meta)
        class MyClass(object):
@@ -477,8 +485,12 @@
 
+------------------------------+-------------------------------------+-------------------------------------+
 | ``dbm_gnu``                  | :func:`py2:gdbm`                    | 
:class:`py3:dbm.gnu`                |
 
+------------------------------+-------------------------------------+-------------------------------------+
+| ``_dummy_thread``            | :mod:`py2:dummy_thread`             | 
:mod:`py3:_dummy_thread`            |
++------------------------------+-------------------------------------+-------------------------------------+
 | ``email_mime_multipart``     | :mod:`py2:email.MIMEMultipart`      | 
:mod:`py3:email.mime.multipart`     |
 
+------------------------------+-------------------------------------+-------------------------------------+
+| ``email_mime_nonmultipart``  | :mod:`py2:email.MIMENonMultipart`   | 
:mod:`py3:email.mime.nonmultipart`  |
++------------------------------+-------------------------------------+-------------------------------------+
 | ``email_mime_text``          | :mod:`py2:email.MIMEText`           | 
:mod:`py3:email.mime.text`          |
 
+------------------------------+-------------------------------------+-------------------------------------+
 | ``email_mime_base``          | :mod:`py2:email.MIMEBase`           | 
:mod:`py3:email.mime.base`          |
@@ -505,6 +517,8 @@
 
+------------------------------+-------------------------------------+-------------------------------------+
 | ``input``                    | :func:`py2:raw_input`               | 
:func:`py3:input`                   |
 
+------------------------------+-------------------------------------+-------------------------------------+
+| ``intern``                   | :func:`py2:intern`                  | 
:func:`py3:sys.intern`              |
++------------------------------+-------------------------------------+-------------------------------------+
 | ``map``                      | :func:`py2:itertools.imap`          | 
:func:`py3:map`                     |
 
+------------------------------+-------------------------------------+-------------------------------------+
 | ``queue``                    | :mod:`py2:Queue`                    | 
:mod:`py3:queue`                    |
@@ -517,6 +531,8 @@
 
+------------------------------+-------------------------------------+-------------------------------------+
 | ``reprlib``                  | :mod:`py2:repr`                     | 
:mod:`py3:reprlib`                  |
 
+------------------------------+-------------------------------------+-------------------------------------+
+| ``shlex_quote``              | :mod:`py2:pipes.quote`              | 
:mod:`py3:shlex.quote`              |
++------------------------------+-------------------------------------+-------------------------------------+
 | ``socketserver``             | :mod:`py2:SocketServer`             | 
:mod:`py3:socketserver`             |
 
+------------------------------+-------------------------------------+-------------------------------------+
 | ``_thread``                  | :mod:`py2:thread`                   | 
:mod:`py3:_thread`                  |
@@ -563,6 +579,10 @@
 
+------------------------------+-------------------------------------+-------------------------------------+
 | ``urllib_robotparser``       | :mod:`py2:robotparser`              | 
:mod:`py3:urllib.robotparser`       |
 
+------------------------------+-------------------------------------+-------------------------------------+
+| ``UserDict``                 | :class:`py2:UserDict.UserDict`      | 
:class:`py3:collections.UserDict`   |
++------------------------------+-------------------------------------+-------------------------------------+
+| ``UserList``                 | :class:`py2:UserList.UserList`      | 
:class:`py3:collections.UserList`   |
++------------------------------+-------------------------------------+-------------------------------------+
 | ``UserString``               | :class:`py2:UserString.UserString`  | 
:class:`py3:collections.UserString` |
 
+------------------------------+-------------------------------------+-------------------------------------+
 | ``winreg``                   | :mod:`py2:_winreg`                  | 
:mod:`py3:winreg`                   |
@@ -599,11 +619,18 @@
 * :func:`py2:urlparse.urlsplit`
 * :func:`py2:urlparse.urlunsplit`
 * :func:`py2:urlparse.splitquery`
+* :func:`py2:urlparse.uses_fragment`
+* :func:`py2:urlparse.uses_netloc`
+* :func:`py2:urlparse.uses_params`
+* :func:`py2:urlparse.uses_query`
+* :func:`py2:urlparse.uses_relative`
 
 and :mod:`py2:urllib`:
 
 * :func:`py2:urllib.quote`
 * :func:`py2:urllib.quote_plus`
+* :func:`py2:urllib.splittag`
+* :func:`py2:urllib.splituser`
 * :func:`py2:urllib.unquote`
 * :func:`py2:urllib.unquote_plus`
 * :func:`py2:urllib.urlencode`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/six-1.6.1/setup.cfg new/six-1.8.0/setup.cfg
--- old/six-1.6.1/setup.cfg     2014-03-14 04:39:28.000000000 +0100
+++ new/six-1.8.0/setup.cfg     2014-09-11 23:48:41.000000000 +0200
@@ -2,7 +2,7 @@
 universal = 1
 
 [egg_info]
-tag_date = 0
 tag_build = 
+tag_date = 0
 tag_svn_revision = 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/six-1.6.1/six.egg-info/PKG-INFO 
new/six-1.8.0/six.egg-info/PKG-INFO
--- old/six-1.6.1/six.egg-info/PKG-INFO 2014-03-14 04:39:28.000000000 +0100
+++ new/six-1.8.0/six.egg-info/PKG-INFO 2014-09-11 23:48:40.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: six
-Version: 1.6.1
+Version: 1.8.0
 Summary: Python 2 and 3 compatibility utilities
 Home-page: http://pypi.python.org/pypi/six/
 Author: Benjamin Peterson
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/six-1.6.1/six.py new/six-1.8.0/six.py
--- old/six-1.6.1/six.py        2014-03-14 04:38:01.000000000 +0100
+++ new/six-1.8.0/six.py        2014-09-11 23:42:33.000000000 +0200
@@ -20,12 +20,15 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 # SOFTWARE.
 
+from __future__ import absolute_import
+
+import functools
 import operator
 import sys
 import types
 
 __author__ = "Benjamin Peterson <benja...@python.org>"
-__version__ = "1.6.1"
+__version__ = "1.8.0"
 
 
 # Useful for very coarse version differentiation.
@@ -83,11 +86,7 @@
         self.name = name
 
     def __get__(self, obj, tp):
-        try:
-            result = self._resolve()
-        except ImportError:
-            # See the nice big comment in MovedModule.__getattr__.
-            raise AttributeError("%s could not be imported " % self.name)
+        result = self._resolve()
         setattr(obj, self.name, result) # Invokes __set__.
         # This is a bit ugly, but it avoids running this again.
         delattr(obj.__class__, self.name)
@@ -109,22 +108,7 @@
         return _import_module(self.mod)
 
     def __getattr__(self, attr):
-        # It turns out many Python frameworks like to traverse sys.modules and
-        # try to load various attributes. This causes problems if this is a
-        # platform-specific module on the wrong platform, like _winreg on
-        # Unixes. Therefore, we silently pretend unimportable modules do not
-        # have any attributes. See issues #51, #53, #56, and #63 for the full
-        # tales of woe.
-        #
-        # First, if possible, avoid loading the module just to look at 
__file__,
-        # __name__, or __path__.
-        if (attr in ("__file__", "__name__", "__path__") and
-            self.mod not in sys.modules):
-            raise AttributeError(attr)
-        try:
-            _module = self._resolve()
-        except ImportError:
-            raise AttributeError(attr)
+        _module = self._resolve()
         value = getattr(_module, attr)
         setattr(self, attr, value)
         return value
@@ -170,9 +154,72 @@
         return getattr(module, self.attr)
 
 
+class _SixMetaPathImporter(object):
+    """
+    A meta path importer to import six.moves and its submodules.
+
+    This class implements a PEP302 finder and loader. It should be compatible
+    with Python 2.5 and all existing versions of Python3
+    """
+    def __init__(self, six_module_name):
+        self.name = six_module_name
+        self.known_modules = {}
+
+    def _add_module(self, mod, *fullnames):
+        for fullname in fullnames:
+            self.known_modules[self.name + "." + fullname] = mod
+
+    def _get_module(self, fullname):
+        return self.known_modules[self.name + "." + fullname]
+
+    def find_module(self, fullname, path=None):
+        if fullname in self.known_modules:
+            return self
+        return None
+
+    def __get_module(self, fullname):
+        try:
+            return self.known_modules[fullname]
+        except KeyError:
+            raise ImportError("This loader does not know module " + fullname)
+
+    def load_module(self, fullname):
+        try:
+            # in case of a reload
+            return sys.modules[fullname]
+        except KeyError:
+            pass
+        mod = self.__get_module(fullname)
+        if isinstance(mod, MovedModule):
+            mod = mod._resolve()
+        else:
+            mod.__loader__ = self
+        sys.modules[fullname] = mod
+        return mod
+
+    def is_package(self, fullname):
+        """
+        Return true, if the named module is a package.
+
+        We need this method to get correct spec objects with
+        Python 3.4 (see PEP451)
+        """
+        return hasattr(self.__get_module(fullname), "__path__")
+
+    def get_code(self, fullname):
+        """Return None
+
+        Required, if is_package is implemented"""
+        self.__get_module(fullname)  # eventually raises ImportError
+        return None
+    get_source = get_code  # same as get_code
+
+_importer = _SixMetaPathImporter(__name__)
+
 
 class _MovedItems(_LazyModule):
     """Lazy loading of moved objects"""
+    __path__ = []  # mark as package
 
 
 _moved_attributes = [
@@ -180,11 +227,15 @@
     MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"),
     MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", 
"filterfalse"),
     MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"),
+    MovedAttribute("intern", "__builtin__", "sys"),
     MovedAttribute("map", "itertools", "builtins", "imap", "map"),
     MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"),
     MovedAttribute("reload_module", "__builtin__", "imp", "reload"),
     MovedAttribute("reduce", "__builtin__", "functools"),
+    MovedAttribute("shlex_quote", "pipes", "shlex", "quote"),
     MovedAttribute("StringIO", "StringIO", "io"),
+    MovedAttribute("UserDict", "UserDict", "collections"),
+    MovedAttribute("UserList", "UserList", "collections"),
     MovedAttribute("UserString", "UserString", "collections"),
     MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"),
     MovedAttribute("zip", "itertools", "builtins", "izip", "zip"),
@@ -194,12 +245,14 @@
     MovedModule("configparser", "ConfigParser"),
     MovedModule("copyreg", "copy_reg"),
     MovedModule("dbm_gnu", "gdbm", "dbm.gnu"),
+    MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"),
     MovedModule("http_cookiejar", "cookielib", "http.cookiejar"),
     MovedModule("http_cookies", "Cookie", "http.cookies"),
     MovedModule("html_entities", "htmlentitydefs", "html.entities"),
     MovedModule("html_parser", "HTMLParser", "html.parser"),
     MovedModule("http_client", "httplib", "http.client"),
     MovedModule("email_mime_multipart", "email.MIMEMultipart", 
"email.mime.multipart"),
+    MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", 
"email.mime.nonmultipart"),
     MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"),
     MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"),
     MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"),
@@ -233,18 +286,19 @@
     MovedModule("urllib", __name__ + ".moves.urllib", __name__ + 
".moves.urllib"),
     MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"),
     MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"),
-    MovedModule("xmlrpc_server", "xmlrpclib", "xmlrpc.server"),
+    MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"),
     MovedModule("winreg", "_winreg"),
 ]
 for attr in _moved_attributes:
     setattr(_MovedItems, attr.name, attr)
     if isinstance(attr, MovedModule):
-        sys.modules[__name__ + ".moves." + attr.name] = attr
+        _importer._add_module(attr, "moves." + attr.name)
 del attr
 
 _MovedItems._moved_attributes = _moved_attributes
 
-moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves")
+moves = _MovedItems(__name__ + ".moves")
+_importer._add_module(moves, "moves")
 
 
 class Module_six_moves_urllib_parse(_LazyModule):
@@ -268,6 +322,13 @@
     MovedAttribute("unquote_plus", "urllib", "urllib.parse"),
     MovedAttribute("urlencode", "urllib", "urllib.parse"),
     MovedAttribute("splitquery", "urllib", "urllib.parse"),
+    MovedAttribute("splittag", "urllib", "urllib.parse"),
+    MovedAttribute("splituser", "urllib", "urllib.parse"),
+    MovedAttribute("uses_fragment", "urlparse", "urllib.parse"),
+    MovedAttribute("uses_netloc", "urlparse", "urllib.parse"),
+    MovedAttribute("uses_params", "urlparse", "urllib.parse"),
+    MovedAttribute("uses_query", "urlparse", "urllib.parse"),
+    MovedAttribute("uses_relative", "urlparse", "urllib.parse"),
 ]
 for attr in _urllib_parse_moved_attributes:
     setattr(Module_six_moves_urllib_parse, attr.name, attr)
@@ -275,7 +336,8 @@
 
 Module_six_moves_urllib_parse._moved_attributes = 
_urllib_parse_moved_attributes
 
-sys.modules[__name__ + ".moves.urllib_parse"] = sys.modules[__name__ + 
".moves.urllib.parse"] = Module_six_moves_urllib_parse(__name__ + 
".moves.urllib_parse")
+_importer._add_module(Module_six_moves_urllib_parse(__name__ + 
".moves.urllib_parse"),
+                      "moves.urllib_parse", "moves.urllib.parse")
 
 
 class Module_six_moves_urllib_error(_LazyModule):
@@ -293,7 +355,8 @@
 
 Module_six_moves_urllib_error._moved_attributes = 
_urllib_error_moved_attributes
 
-sys.modules[__name__ + ".moves.urllib_error"] = sys.modules[__name__ + 
".moves.urllib.error"] = Module_six_moves_urllib_error(__name__ + 
".moves.urllib.error")
+_importer._add_module(Module_six_moves_urllib_error(__name__ + 
".moves.urllib.error"),
+                      "moves.urllib_error", "moves.urllib.error")
 
 
 class Module_six_moves_urllib_request(_LazyModule):
@@ -341,7 +404,8 @@
 
 Module_six_moves_urllib_request._moved_attributes = 
_urllib_request_moved_attributes
 
-sys.modules[__name__ + ".moves.urllib_request"] = sys.modules[__name__ + 
".moves.urllib.request"] = Module_six_moves_urllib_request(__name__ + 
".moves.urllib.request")
+_importer._add_module(Module_six_moves_urllib_request(__name__ + 
".moves.urllib.request"),
+                      "moves.urllib_request", "moves.urllib.request")
 
 
 class Module_six_moves_urllib_response(_LazyModule):
@@ -360,7 +424,8 @@
 
 Module_six_moves_urllib_response._moved_attributes = 
_urllib_response_moved_attributes
 
-sys.modules[__name__ + ".moves.urllib_response"] = sys.modules[__name__ + 
".moves.urllib.response"] = Module_six_moves_urllib_response(__name__ + 
".moves.urllib.response")
+_importer._add_module(Module_six_moves_urllib_response(__name__ + 
".moves.urllib.response"),
+                      "moves.urllib_response", "moves.urllib.response")
 
 
 class Module_six_moves_urllib_robotparser(_LazyModule):
@@ -376,22 +441,24 @@
 
 Module_six_moves_urllib_robotparser._moved_attributes = 
_urllib_robotparser_moved_attributes
 
-sys.modules[__name__ + ".moves.urllib_robotparser"] = sys.modules[__name__ + 
".moves.urllib.robotparser"] = Module_six_moves_urllib_robotparser(__name__ + 
".moves.urllib.robotparser")
+_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + 
".moves.urllib.robotparser"),
+                      "moves.urllib_robotparser", "moves.urllib.robotparser")
 
 
 class Module_six_moves_urllib(types.ModuleType):
     """Create a six.moves.urllib namespace that resembles the Python 3 
namespace"""
-    parse = sys.modules[__name__ + ".moves.urllib_parse"]
-    error = sys.modules[__name__ + ".moves.urllib_error"]
-    request = sys.modules[__name__ + ".moves.urllib_request"]
-    response = sys.modules[__name__ + ".moves.urllib_response"]
-    robotparser = sys.modules[__name__ + ".moves.urllib_robotparser"]
+    __path__ = []  # mark as package
+    parse = _importer._get_module("moves.urllib_parse")
+    error = _importer._get_module("moves.urllib_error")
+    request = _importer._get_module("moves.urllib_request")
+    response = _importer._get_module("moves.urllib_response")
+    robotparser = _importer._get_module("moves.urllib_robotparser")
 
     def __dir__(self):
         return ['parse', 'error', 'request', 'response', 'robotparser']
 
-
-sys.modules[__name__ + ".moves.urllib"] = Module_six_moves_urllib(__name__ + 
".moves.urllib")
+_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"),
+                      "moves.urllib")
 
 
 def add_move(move):
@@ -418,11 +485,6 @@
     _func_code = "__code__"
     _func_defaults = "__defaults__"
     _func_globals = "__globals__"
-
-    _iterkeys = "keys"
-    _itervalues = "values"
-    _iteritems = "items"
-    _iterlists = "lists"
 else:
     _meth_func = "im_func"
     _meth_self = "im_self"
@@ -432,11 +494,6 @@
     _func_defaults = "func_defaults"
     _func_globals = "func_globals"
 
-    _iterkeys = "iterkeys"
-    _itervalues = "itervalues"
-    _iteritems = "iteritems"
-    _iterlists = "iterlists"
-
 
 try:
     advance_iterator = next
@@ -485,21 +542,37 @@
 get_function_globals = operator.attrgetter(_func_globals)
 
 
-def iterkeys(d, **kw):
-    """Return an iterator over the keys of a dictionary."""
-    return iter(getattr(d, _iterkeys)(**kw))
-
-def itervalues(d, **kw):
-    """Return an iterator over the values of a dictionary."""
-    return iter(getattr(d, _itervalues)(**kw))
-
-def iteritems(d, **kw):
-    """Return an iterator over the (key, value) pairs of a dictionary."""
-    return iter(getattr(d, _iteritems)(**kw))
-
-def iterlists(d, **kw):
-    """Return an iterator over the (key, [values]) pairs of a dictionary."""
-    return iter(getattr(d, _iterlists)(**kw))
+if PY3:
+    def iterkeys(d, **kw):
+        return iter(d.keys(**kw))
+
+    def itervalues(d, **kw):
+        return iter(d.values(**kw))
+
+    def iteritems(d, **kw):
+        return iter(d.items(**kw))
+
+    def iterlists(d, **kw):
+        return iter(d.lists(**kw))
+else:
+    def iterkeys(d, **kw):
+        return iter(d.iterkeys(**kw))
+
+    def itervalues(d, **kw):
+        return iter(d.itervalues(**kw))
+
+    def iteritems(d, **kw):
+        return iter(d.iteritems(**kw))
+
+    def iterlists(d, **kw):
+        return iter(d.iterlists(**kw))
+
+_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.")
+_add_doc(itervalues, "Return an iterator over the values of a dictionary.")
+_add_doc(iteritems,
+         "Return an iterator over the (key, value) pairs of a dictionary.")
+_add_doc(iterlists,
+         "Return an iterator over the (key, [values]) pairs of a dictionary.")
 
 
 if PY3:
@@ -545,6 +618,8 @@
 
 
     def reraise(tp, value, tb=None):
+        if value is None:
+            value = tp()
         if value.__traceback__ is not tb:
             raise value.with_traceback(tb)
         raise value
@@ -625,22 +700,63 @@
 
 _add_doc(reraise, """Reraise an exception.""")
 
+if sys.version_info[0:2] < (3, 4):
+    def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS,
+              updated=functools.WRAPPER_UPDATES):
+        def wrapper(f):
+            f = functools.wraps(wrapped)(f)
+            f.__wrapped__ = wrapped
+            return f
+        return wrapper
+else:
+    wraps = functools.wraps
 
 def with_metaclass(meta, *bases):
     """Create a base class with a metaclass."""
-    return meta("NewBase", bases, {})
+    # This requires a bit of explanation: the basic idea is to make a dummy
+    # metaclass for one level of class instantiation that replaces itself with
+    # the actual metaclass.
+    class metaclass(meta):
+        def __new__(cls, name, this_bases, d):
+            return meta(name, bases, d)
+    return type.__new__(metaclass, 'temporary_class', (), {})
+
 
 def add_metaclass(metaclass):
     """Class decorator for creating a class with a metaclass."""
     def wrapper(cls):
         orig_vars = cls.__dict__.copy()
-        orig_vars.pop('__dict__', None)
-        orig_vars.pop('__weakref__', None)
         slots = orig_vars.get('__slots__')
         if slots is not None:
             if isinstance(slots, str):
                 slots = [slots]
             for slots_var in slots:
                 orig_vars.pop(slots_var)
+        orig_vars.pop('__dict__', None)
+        orig_vars.pop('__weakref__', None)
         return metaclass(cls.__name__, cls.__bases__, orig_vars)
     return wrapper
+
+# Complete the moves implementation.
+# This code is at the end of this module to speed up module loading.
+# Turn this module into a package.
+__path__ = []  # required for PEP 302 and PEP 451
+__package__ = __name__  # see PEP 366 @ReservedAssignment
+if globals().get("__spec__") is not None:
+    __spec__.submodule_search_locations = []  # PEP 451 @UndefinedVariable
+# Remove other six meta path importers, since they cause problems. This can
+# happen if six is removed from sys.modules and then reloaded. (Setuptools does
+# this for some reason.)
+if sys.meta_path:
+    for i, importer in enumerate(sys.meta_path):
+        # Here's some real nastiness: Another "instance" of the six module 
might
+        # be floating around. Therefore, we can't use isinstance() to check for
+        # the six meta path importer, since the other six instance will have
+        # inserted an importer with different class.
+        if (type(importer).__name__ == "_SixMetaPathImporter" and
+            importer.name == __name__):
+            del sys.meta_path[i]
+            break
+    del i, importer
+# Finally, add the importer to the meta path import hook.
+sys.meta_path.append(_importer)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/six-1.6.1/test_six.py new/six-1.8.0/test_six.py
--- old/six-1.6.1/test_six.py   2014-03-14 04:30:44.000000000 +0100
+++ new/six-1.8.0/test_six.py   2014-08-18 06:25:25.000000000 +0200
@@ -353,6 +353,14 @@
 
 
 def test_dictionary_iterators(monkeypatch):
+    def stock_method_name(iterwhat):
+        """Given a method suffix like "lists" or "values", return the name
+        of the dict method that delivers those on the version of Python
+        we're running in."""
+        if six.PY3:
+            return iterwhat
+        return 'iter' + iterwhat
+
     class MyDict(dict):
         if not six.PY3:
             def lists(self, **kw):
@@ -361,7 +369,8 @@
             return iter([1, 2, 3])
     f = MyDict.iterlists
     del MyDict.iterlists
-    setattr(MyDict, six._iterlists, f)
+    setattr(MyDict, stock_method_name('lists'), f)
+
     d = MyDict(zip(range(10), reversed(range(10))))
     for name in "keys", "values", "items", "lists":
         meth = getattr(six, "iter" + name)
@@ -373,8 +382,8 @@
         def with_kw(*args, **kw):
             record.append(kw["kw"])
             return old(*args)
-        old = getattr(MyDict, getattr(six, "_iter" + name))
-        monkeypatch.setattr(MyDict, getattr(six, "_iter" + name), with_kw)
+        old = getattr(MyDict, stock_method_name(name))
+        monkeypatch.setattr(MyDict, stock_method_name(name), with_kw)
         meth(d, kw=42)
         assert record == [42]
         monkeypatch.undo()
@@ -551,6 +560,14 @@
         assert tp2 is Exception
         assert value2 is e
         assert get_next(tb3) is tb2
+    try:
+        six.reraise(tp, None, tb)
+    except Exception:
+        tp2, value2, tb2 = sys.exc_info()
+        assert tp2 is Exception
+        assert value2 is not val
+        assert isinstance(value2, Exception)
+        assert tb is get_next(tb2)
 
 
 def test_print_():
@@ -625,6 +642,25 @@
     assert type(X) is Meta
     assert issubclass(X, Base)
     assert issubclass(X, Base2)
+    assert X.__mro__ == (X, Base, Base2, object)
+
+
+def test_wraps():
+    def f(g):
+        @six.wraps(g)
+        def w():
+            return 42
+        return w
+    def k():
+        pass
+    original_k = k
+    k = f(f(k))
+    assert hasattr(k, '__wrapped__')
+    k = k.__wrapped__
+    assert hasattr(k, '__wrapped__')
+    k = k.__wrapped__
+    assert k is original_k
+    assert not hasattr(k, '__wrapped__')
 
 
 def test_add_metaclass():
@@ -694,3 +730,7 @@
     py.test.raises(AttributeError, setattr, instance, "a", "baz")
     py.test.raises(AttributeError, setattr, instance, "b", "baz")
 
+    class MySlotsWeakref(object):
+        __slots__ = "__weakref__",
+    MySlotsWeakref = six.add_metaclass(Meta)(MySlotsWeakref)
+    assert type(MySlotsWeakref) is Meta

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to