[PyXB] Unbundle python-six

Michal Srb msrb at fedoraproject.org
Wed Jan 21 12:51:05 UTC 2015


commit d90d17de201e5abd0d2468340ad55719d435bbff
Author: Michal Srb <msrb at redhat.com>
Date:   Wed Jan 21 11:09:33 2015 +0100

    Unbundle python-six

 0001-unbundle-six.patch |  952 +++++++++++++++++++++++++++++++++++++++++++++++
 PyXB.spec               |   13 +-
 2 files changed, 964 insertions(+), 1 deletions(-)
---
diff --git a/0001-unbundle-six.patch b/0001-unbundle-six.patch
new file mode 100644
index 0000000..5518640
--- /dev/null
+++ b/0001-unbundle-six.patch
@@ -0,0 +1,952 @@
+From 2566c09b34d4a5ea98d74121fdcce7879e1c063c Mon Sep 17 00:00:00 2001
+From: Michal Srb <msrb at redhat.com>
+Date: Wed, 21 Jan 2015 12:42:11 +0100
+Subject: [PATCH] unbundle six
+
+---
+ examples/dictionary/define.py   |   2 +-
+ examples/dictionary/showdict.py |   2 +-
+ examples/geocoder/client.py     |   2 +-
+ examples/ndfd/forecast.py       |   2 +-
+ examples/ndfd/latlon.py         |   2 +-
+ examples/weather/client.py      |   2 +-
+ examples/weather/client_get.py  |   2 +-
+ maintainer/buildUnicode.py      |   2 +-
+ pyxb/namespace/archive.py       |   2 +-
+ pyxb/utils/domutils.py          |   3 +-
+ pyxb/utils/fac.py               |   3 +-
+ pyxb/utils/six.py               | 610 +---------------------------------------
+ pyxb/utils/unicode.py           |   3 +-
+ pyxb/utils/utility.py           |   5 +-
+ pyxb/xmlschema/structures.py    |   2 +-
+ scripts/pyxbwsdl                |   2 +-
+ tests/trac/test-trac-0175.py    |   2 +-
+ tests/trac/test-trac-0207.py    |   2 +-
+ tests/trac/trac-0033/tread.py   |   2 +-
+ tests/utils/test-fac.py         |   2 +-
+ 20 files changed, 30 insertions(+), 624 deletions(-)
+
+diff --git a/examples/dictionary/define.py b/examples/dictionary/define.py
+index 921da60..d689497 100644
+--- a/examples/dictionary/define.py
++++ b/examples/dictionary/define.py
+@@ -1,6 +1,6 @@
+ from __future__ import print_function
+ import dict
+-from pyxb.utils.six.moves.urllib.request import urlopen
++from six.moves.urllib.request import urlopen
+ import sys
+ from pyxb.utils import domutils
+ 
+diff --git a/examples/dictionary/showdict.py b/examples/dictionary/showdict.py
+index 6b856e1..6ac392b 100644
+--- a/examples/dictionary/showdict.py
++++ b/examples/dictionary/showdict.py
+@@ -1,6 +1,6 @@
+ from __future__ import print_function
+ import dict
+-from pyxb.utils.six.moves.urllib.request import urlopen
++from six.moves.urllib.request import urlopen
+ import pyxb.utils.domutils as domutils
+ from xml.dom import minidom
+ 
+diff --git a/examples/geocoder/client.py b/examples/geocoder/client.py
+index 355f37a..bf69e6d 100644
+--- a/examples/geocoder/client.py
++++ b/examples/geocoder/client.py
+@@ -1,6 +1,6 @@
+ from __future__ import print_function
+ import sys
+-from pyxb.utils.six.moves.urllib import request as urllib_request
++from six.moves.urllib import request as urllib_request
+ import GeoCoder
+ from pyxb import BIND
+ from pyxb.utils import domutils
+diff --git a/examples/ndfd/forecast.py b/examples/ndfd/forecast.py
+index aff5c1e..66b0c34 100644
+--- a/examples/ndfd/forecast.py
++++ b/examples/ndfd/forecast.py
+@@ -3,7 +3,7 @@ import xml.dom.minidom
+ import DWML
+ import datetime
+ import pyxb.binding.datatypes as xsd
+-from pyxb.utils.six.moves.urllib.request import urlopen
++from six.moves.urllib.request import urlopen
+ import time
+ import collections
+ import sys
+diff --git a/examples/ndfd/latlon.py b/examples/ndfd/latlon.py
+index 781638a..eaaf7c8 100644
+--- a/examples/ndfd/latlon.py
++++ b/examples/ndfd/latlon.py
+@@ -5,7 +5,7 @@ import DWML
+ import datetime
+ import pyxb
+ from pyxb.utils import domutils, six
+-from pyxb.utils.six.moves.urllib import request as urllib_request
++from six.moves.urllib import request as urllib_request
+ import pyxb.binding.datatypes as xsd
+ import pyxb.bundles.wssplat.soap11 as soapenv
+ 
+diff --git a/examples/weather/client.py b/examples/weather/client.py
+index ddddbf9..18a847c 100644
+--- a/examples/weather/client.py
++++ b/examples/weather/client.py
+@@ -1,7 +1,7 @@
+ from __future__ import print_function
+ import sys
+ import time
+-from pyxb.utils.six.moves.urllib import request as urllib_request
++from six.moves.urllib import request as urllib_request
+ import pyxb.bundles.wssplat.soap11 as soapenv
+ import weather
+ 
+diff --git a/examples/weather/client_get.py b/examples/weather/client_get.py
+index f9b37a4..c92c1cb 100644
+--- a/examples/weather/client_get.py
++++ b/examples/weather/client_get.py
+@@ -1,6 +1,6 @@
+ from __future__ import print_function
+ import time
+-from pyxb.utils.six.moves.urllib import request as urllib_request
++from six.moves.urllib import request as urllib_request
+ import weather   # Bindings generated by PyXB
+ import pyxb.utils.domutils as domutils
+ 
+diff --git a/maintainer/buildUnicode.py b/maintainer/buildUnicode.py
+index 7579845..d97f666 100644
+--- a/maintainer/buildUnicode.py
++++ b/maintainer/buildUnicode.py
+@@ -30,7 +30,7 @@ from __future__ import print_function
+ import textwrap
+ import re
+ from pyxb.utils import six
+-from pyxb.utils.six.moves import xrange
++from six.moves import xrange
+ 
+ def countCodepoints (codepoints):
+     count = 0
+diff --git a/pyxb/namespace/archive.py b/pyxb/namespace/archive.py
+index 9826d6d..134d93e 100644
+--- a/pyxb/namespace/archive.py
++++ b/pyxb/namespace/archive.py
+@@ -45,7 +45,7 @@ def GetArchivePath ():
+     return os.environ.get(PathEnvironmentVariable)
+ 
+ # Stuff required for pickling
+-from pyxb.utils.six.moves import cPickle as pickle
++from six.moves import cPickle as pickle
+ import re
+ 
+ class NamespaceArchive (object):
+diff --git a/pyxb/utils/domutils.py b/pyxb/utils/domutils.py
+index 92cc834..e6f09c5 100644
+--- a/pyxb/utils/domutils.py
++++ b/pyxb/utils/domutils.py
+@@ -15,6 +15,7 @@
+ 
+ """Functions that support activities related to the Document Object Model."""
+ 
++from __future__ import absolute_import
+ import logging
+ import xml.dom
+ 
+@@ -24,7 +25,7 @@ import pyxb.namespace.resolution
+ import pyxb.utils.saxutils
+ import pyxb.utils.saxdom
+ from pyxb.utils import six
+-from pyxb.utils.six.moves import xrange
++from six.moves import xrange
+ 
+ _log = logging.getLogger(__name__)
+ 
+diff --git a/pyxb/utils/fac.py b/pyxb/utils/fac.py
+index f350eba..4678bd1 100644
+--- a/pyxb/utils/fac.py
++++ b/pyxb/utils/fac.py
+@@ -57,11 +57,12 @@ not work: instead the subconfiguration with its counter values must be
+ retained between matches.
+ """
+ 
++from __future__ import absolute_import
+ import operator
+ import functools
+ import logging
+ from pyxb.utils import six
+-from pyxb.utils.six.moves import xrange
++from six.moves import xrange
+ 
+ log_ = logging.getLogger(__name__)
+ 
+diff --git a/pyxb/utils/six.py b/pyxb/utils/six.py
+index b6e8c3e..d9abd6e 100644
+--- a/pyxb/utils/six.py
++++ b/pyxb/utils/six.py
+@@ -20,25 +20,14 @@
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ # SOFTWARE.
+ 
+-import operator
+-import sys
+-import types
++from __future__ import absolute_import
++from six import *
+ 
+ __author__ = "Benjamin Peterson <benjamin at python.org>"
+ __version__ = "1.5.2"
+ 
+ 
+-# Useful for very coarse version differentiation.
+-PY2 = sys.version_info[0] == 2
+-PY3 = sys.version_info[0] == 3
+-
+ if PY3:
+-    string_types = str,
+-    integer_types = int,
+-    class_types = type,
+-    text_type = str
+-    binary_type = bytes
+-
+     none_type = type(None)
+     boolean_type = bool
+     float_type = float
+@@ -48,14 +37,11 @@ if PY3:
+     tuple_type = tuple
+     dictionary_type = dict
+ 
+-    MAXSIZE = sys.maxsize
++    import sys
++    import io
++    intern = sys.intern
++    file = io.IOBase
+ else:
+-    string_types = basestring,
+-    integer_types = (int, long)
+-    class_types = (type, types.ClassType)
+-    text_type = unicode
+-    binary_type = str
+-
+     import types
+     none_type = types.NoneType
+     boolean_type = types.BooleanType
+@@ -66,594 +52,10 @@ else:
+     tuple_type = types.TupleType
+     dictionary_type = types.DictionaryType
+ 
+-    if sys.platform.startswith("java"):
+-        # Jython always uses 32 bits.
+-        MAXSIZE = int((1 << 31) - 1)
+-    else:
+-        # It's possible to have sizeof(long) != sizeof(Py_ssize_t).
+-        class X(object):
+-            def __len__(self):
+-                return 1 << 31
+-        try:
+-            len(X())
+-        except OverflowError:
+-            # 32-bit
+-            MAXSIZE = int((1 << 31) - 1)
+-        else:
+-            # 64-bit
+-            MAXSIZE = int((1 << 63) - 1)
+-        del X
+-
+-
+-def _add_doc(func, doc):
+-    """Add documentation to a function."""
+-    func.__doc__ = doc
+-
+-
+-def _import_module(name):
+-    """Import module, returning the module after the last dot."""
+-    __import__(name)
+-    return sys.modules[name]
+-
+-
+-class _LazyDescr(object):
+-
+-    def __init__(self, name):
+-        self.name = name
+-
+-    def __get__(self, obj, tp):
+-        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)
+-        return result
+-
+-
+-class MovedModule(_LazyDescr):
+-
+-    def __init__(self, name, old, new=None):
+-        super(MovedModule, self).__init__(name)
+-        if PY3:
+-            if new is None:
+-                new = name
+-            self.mod = new
+-        else:
+-            self.mod = old
+-
+-    def _resolve(self):
+-        return _import_module(self.mod)
+-
+-    def __getattr__(self, attr):
+-        # Hack around the Django autoreloader. The reloader tries to get
+-        # __file__ or __name__ of every module in sys.modules. This doesn't work
+-        # well if this MovedModule is for an module that is unavailable on this
+-        # machine (like winreg on Unix systems). Thus, we pretend __file__ and
+-        # __name__ don't exist if the module hasn't been loaded yet. See issues
+-        # #51 and #53.
+-        if attr in ("__file__", "__name__") and self.mod not in sys.modules:
+-            raise AttributeError
+-        _module = self._resolve()
+-        value = getattr(_module, attr)
+-        setattr(self, attr, value)
+-        return value
+-
+-
+-class _LazyModule(types.ModuleType):
+-
+-    def __init__(self, name):
+-        super(_LazyModule, self).__init__(name)
+-        self.__doc__ = self.__class__.__doc__
+-
+-    def __dir__(self):
+-        attrs = ["__doc__", "__name__"]
+-        attrs += [attr.name for attr in self._moved_attributes]
+-        return attrs
+-
+-    # Subclasses should override this
+-    _moved_attributes = []
+-
+-
+-class MovedAttribute(_LazyDescr):
+-
+-    def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None):
+-        super(MovedAttribute, self).__init__(name)
+-        if PY3:
+-            if new_mod is None:
+-                new_mod = name
+-            self.mod = new_mod
+-            if new_attr is None:
+-                if old_attr is None:
+-                    new_attr = name
+-                else:
+-                    new_attr = old_attr
+-            self.attr = new_attr
+-        else:
+-            self.mod = old_mod
+-            if old_attr is None:
+-                old_attr = name
+-            self.attr = old_attr
+-
+-    def _resolve(self):
+-        module = _import_module(self.mod)
+-        return getattr(module, self.attr)
+-
+-
+-
+-class _MovedItems(_LazyModule):
+-    """Lazy loading of moved objects"""
+-
+-
+-_moved_attributes = [
+-    MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"),
+-    MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"),
+-    MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"),
+-    MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"),
+-    MovedAttribute("map", "itertools", "builtins", "imap", "map"),
+-    MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"),
+-    MovedAttribute("reload_module", "__builtin__", "imp", "reload"),
+-    MovedAttribute("reduce", "__builtin__", "functools"),
+-    MovedAttribute("StringIO", "StringIO", "io"),
+-    MovedAttribute("UserString", "UserString", "collections"),
+-    MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"),
+-    MovedAttribute("zip", "itertools", "builtins", "izip", "zip"),
+-    MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"),
+-
+-    MovedModule("builtins", "__builtin__"),
+-    MovedModule("configparser", "ConfigParser"),
+-    MovedModule("copyreg", "copy_reg"),
+-    MovedModule("dbm_gnu", "gdbm", "dbm.gnu"),
+-    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_text", "email.MIMEText", "email.mime.text"),
+-    MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"),
+-    MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"),
+-    MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"),
+-    MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"),
+-    MovedModule("cPickle", "cPickle", "pickle"),
+-    MovedModule("queue", "Queue"),
+-    MovedModule("reprlib", "repr"),
+-    MovedModule("socketserver", "SocketServer"),
+-    MovedModule("_thread", "thread", "_thread"),
+-    MovedModule("tkinter", "Tkinter"),
+-    MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"),
+-    MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"),
+-    MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"),
+-    MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"),
+-    MovedModule("tkinter_tix", "Tix", "tkinter.tix"),
+-    MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"),
+-    MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"),
+-    MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"),
+-    MovedModule("tkinter_colorchooser", "tkColorChooser",
+-                "tkinter.colorchooser"),
+-    MovedModule("tkinter_commondialog", "tkCommonDialog",
+-                "tkinter.commondialog"),
+-    MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"),
+-    MovedModule("tkinter_font", "tkFont", "tkinter.font"),
+-    MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"),
+-    MovedModule("tkinter_tksimpledialog", "tkSimpleDialog",
+-                "tkinter.simpledialog"),
+-    MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"),
+-    MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"),
+-    MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"),
+-    MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"),
+-    MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"),
+-    MovedModule("winreg", "_winreg"),
+-]
+-for attr in _moved_attributes:
+-    setattr(_MovedItems, attr.name, attr)
+-    if isinstance(attr, MovedModule):
+-        sys.modules[__name__ + ".moves." + attr.name] = attr
+-del attr
+-
+-_MovedItems._moved_attributes = _moved_attributes
+-
+-moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves")
+-
+-
+-class Module_six_moves_urllib_parse(_LazyModule):
+-    """Lazy loading of moved objects in six.moves.urllib_parse"""
+-
+-
+-_urllib_parse_moved_attributes = [
+-    MovedAttribute("ParseResult", "urlparse", "urllib.parse"),
+-    MovedAttribute("parse_qs", "urlparse", "urllib.parse"),
+-    MovedAttribute("parse_qsl", "urlparse", "urllib.parse"),
+-    MovedAttribute("urldefrag", "urlparse", "urllib.parse"),
+-    MovedAttribute("urljoin", "urlparse", "urllib.parse"),
+-    MovedAttribute("urlparse", "urlparse", "urllib.parse"),
+-    MovedAttribute("urlsplit", "urlparse", "urllib.parse"),
+-    MovedAttribute("urlunparse", "urlparse", "urllib.parse"),
+-    MovedAttribute("urlunsplit", "urlparse", "urllib.parse"),
+-    MovedAttribute("quote", "urllib", "urllib.parse"),
+-    MovedAttribute("quote_plus", "urllib", "urllib.parse"),
+-    MovedAttribute("unquote", "urllib", "urllib.parse"),
+-    MovedAttribute("unquote_plus", "urllib", "urllib.parse"),
+-    MovedAttribute("urlencode", "urllib", "urllib.parse"),
+-]
+-for attr in _urllib_parse_moved_attributes:
+-    setattr(Module_six_moves_urllib_parse, attr.name, attr)
+-del attr
+-
+-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")
+-
+-
+-class Module_six_moves_urllib_error(_LazyModule):
+-    """Lazy loading of moved objects in six.moves.urllib_error"""
+-
+-
+-_urllib_error_moved_attributes = [
+-    MovedAttribute("URLError", "urllib2", "urllib.error"),
+-    MovedAttribute("HTTPError", "urllib2", "urllib.error"),
+-    MovedAttribute("ContentTooShortError", "urllib", "urllib.error"),
+-]
+-for attr in _urllib_error_moved_attributes:
+-    setattr(Module_six_moves_urllib_error, attr.name, attr)
+-del attr
+-
+-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")
+-
+-
+-class Module_six_moves_urllib_request(_LazyModule):
+-    """Lazy loading of moved objects in six.moves.urllib_request"""
+-
+-
+-_urllib_request_moved_attributes = [
+-    MovedAttribute("urlopen", "urllib2", "urllib.request"),
+-    MovedAttribute("install_opener", "urllib2", "urllib.request"),
+-    MovedAttribute("build_opener", "urllib2", "urllib.request"),
+-    MovedAttribute("pathname2url", "urllib", "urllib.request"),
+-    MovedAttribute("url2pathname", "urllib", "urllib.request"),
+-    MovedAttribute("getproxies", "urllib", "urllib.request"),
+-    MovedAttribute("Request", "urllib2", "urllib.request"),
+-    MovedAttribute("OpenerDirector", "urllib2", "urllib.request"),
+-    MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"),
+-    MovedAttribute("ProxyHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("BaseHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"),
+-    MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"),
+-    MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("HTTPHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("FileHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("FTPHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("UnknownHandler", "urllib2", "urllib.request"),
+-    MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"),
+-    MovedAttribute("urlretrieve", "urllib", "urllib.request"),
+-    MovedAttribute("urlcleanup", "urllib", "urllib.request"),
+-    MovedAttribute("URLopener", "urllib", "urllib.request"),
+-    MovedAttribute("FancyURLopener", "urllib", "urllib.request"),
+-    MovedAttribute("proxy_bypass", "urllib", "urllib.request"),
+-]
+-for attr in _urllib_request_moved_attributes:
+-    setattr(Module_six_moves_urllib_request, attr.name, attr)
+-del attr
+-
+-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")
+-
+-
+-class Module_six_moves_urllib_response(_LazyModule):
+-    """Lazy loading of moved objects in six.moves.urllib_response"""
+-
+-
+-_urllib_response_moved_attributes = [
+-    MovedAttribute("addbase", "urllib", "urllib.response"),
+-    MovedAttribute("addclosehook", "urllib", "urllib.response"),
+-    MovedAttribute("addinfo", "urllib", "urllib.response"),
+-    MovedAttribute("addinfourl", "urllib", "urllib.response"),
+-]
+-for attr in _urllib_response_moved_attributes:
+-    setattr(Module_six_moves_urllib_response, attr.name, attr)
+-del attr
+-
+-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")
+-
+-
+-class Module_six_moves_urllib_robotparser(_LazyModule):
+-    """Lazy loading of moved objects in six.moves.urllib_robotparser"""
+-
+-
+-_urllib_robotparser_moved_attributes = [
+-    MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"),
+-]
+-for attr in _urllib_robotparser_moved_attributes:
+-    setattr(Module_six_moves_urllib_robotparser, attr.name, attr)
+-del attr
+-
+-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")
+-
+-
+-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"]
+-
+-    def __dir__(self):
+-        return ['parse', 'error', 'request', 'response', 'robotparser']
+-
+-
+-sys.modules[__name__ + ".moves.urllib"] = Module_six_moves_urllib(__name__ + ".moves.urllib")
+-
+-
+-def add_move(move):
+-    """Add an item to six.moves."""
+-    setattr(_MovedItems, move.name, move)
+-
+-
+-def remove_move(name):
+-    """Remove item from six.moves."""
+-    try:
+-        delattr(_MovedItems, name)
+-    except AttributeError:
+-        try:
+-            del moves.__dict__[name]
+-        except KeyError:
+-            raise AttributeError("no such move, %r" % (name,))
+-
+-
+-if PY3:
+-    _meth_func = "__func__"
+-    _meth_self = "__self__"
+-
+-    _func_closure = "__closure__"
+-    _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"
+-
+-    _func_closure = "func_closure"
+-    _func_code = "func_code"
+-    _func_defaults = "func_defaults"
+-    _func_globals = "func_globals"
+-
+-    _iterkeys = "iterkeys"
+-    _itervalues = "itervalues"
+-    _iteritems = "iteritems"
+-    _iterlists = "iterlists"
+-
+-
+-try:
+-    advance_iterator = next
+-except NameError:
+-    def advance_iterator(it):
+-        return it.next()
+-next = advance_iterator
+-
+-
+-try:
+-    callable = callable
+-except NameError:
+-    def callable(obj):
+-        return any("__call__" in klass.__dict__ for klass in type(obj).__mro__)
+-
+-
+-if PY3:
+-    def get_unbound_function(unbound):
+-        return unbound
+-
+-    create_bound_method = types.MethodType
+-
+-    Iterator = object
+-else:
+-    def get_unbound_function(unbound):
+-        return unbound.im_func
+-
+-    def create_bound_method(func, obj):
+-        return types.MethodType(func, obj, obj.__class__)
+-
+-    class Iterator(object):
+-
+-        def next(self):
+-            return type(self).__next__(self)
+-
+-    callable = callable
+-_add_doc(get_unbound_function,
+-         """Get the function out of a possibly unbound function""")
+-
+-
+-get_method_function = operator.attrgetter(_meth_func)
+-get_method_self = operator.attrgetter(_meth_self)
+-get_function_closure = operator.attrgetter(_func_closure)
+-get_function_code = operator.attrgetter(_func_code)
+-get_function_defaults = operator.attrgetter(_func_defaults)
+-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 b(s):
+-        return s.encode("latin-1")
+-    def u(s):
+-        return s
+-    unichr = chr
+-    if sys.version_info[1] <= 1:
+-        def int2byte(i):
+-            return bytes((i,))
+-    else:
+-        # This is about 2x faster than the implementation above on 3.2+
+-        int2byte = operator.methodcaller("to_bytes", 1, "big")
+-    byte2int = operator.itemgetter(0)
+-    indexbytes = operator.getitem
+-    iterbytes = iter
+-    import io
+-    StringIO = io.StringIO
+-    BytesIO = io.BytesIO
+-    intern = sys.intern
+-    file = io.IOBase
+-else:
+-    def b(s):
+-        return s
+-    # Workaround for standalone backslash
+-    def u(s):
+-        return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape")
+-    unichr = unichr
+-    int2byte = chr
+-    def byte2int(bs):
+-        return ord(bs[0])
+-    def indexbytes(buf, i):
+-        return ord(buf[i])
+-    def iterbytes(buf):
+-        return (ord(byte) for byte in buf)
+-    import StringIO
+-    StringIO = BytesIO = StringIO.StringIO
+     import __builtin__
+     intern = __builtin__.intern
+     file = __builtin__.file
+-_add_doc(b, """Byte literal""")
+-_add_doc(u, """Text literal""")
+-
+-
+-if PY3:
+-    exec_ = getattr(moves.builtins, "exec")
+-
+-
+-    def reraise(tp, value, tb=None):
+-        if value.__traceback__ is not tb:
+-            raise value.with_traceback(tb)
+-        raise value
+-
+-else:
+-    def exec_(_code_, _globs_=None, _locs_=None):
+-        """Execute code in a namespace."""
+-        if _globs_ is None:
+-            frame = sys._getframe(1)
+-            _globs_ = frame.f_globals
+-            if _locs_ is None:
+-                _locs_ = frame.f_locals
+-            del frame
+-        elif _locs_ is None:
+-            _locs_ = _globs_
+-        exec("""exec _code_ in _globs_, _locs_""")
+-
+-
+-    exec_("""def reraise(tp, value, tb=None):
+-    raise tp, value, tb
+-""")
+-
+-
+-print_ = getattr(moves.builtins, "print", None)
+-if print_ is None:
+-    def print_(*args, **kwargs):
+-        """The new-style print function for Python 2.4 and 2.5."""
+-        fp = kwargs.pop("file", sys.stdout)
+-        if fp is None:
+-            return
+-        def write(data):
+-            if not isinstance(data, basestring):
+-                data = str(data)
+-            # If the file has an encoding, encode unicode with it.
+-            if (isinstance(fp, file) and
+-                isinstance(data, unicode) and
+-                fp.encoding is not None):
+-                errors = getattr(fp, "errors", None)
+-                if errors is None:
+-                    errors = "strict"
+-                data = data.encode(fp.encoding, errors)
+-            fp.write(data)
+-        want_unicode = False
+-        sep = kwargs.pop("sep", None)
+-        if sep is not None:
+-            if isinstance(sep, unicode):
+-                want_unicode = True
+-            elif not isinstance(sep, str):
+-                raise TypeError("sep must be None or a string")
+-        end = kwargs.pop("end", None)
+-        if end is not None:
+-            if isinstance(end, unicode):
+-                want_unicode = True
+-            elif not isinstance(end, str):
+-                raise TypeError("end must be None or a string")
+-        if kwargs:
+-            raise TypeError("invalid keyword arguments to print()")
+-        if not want_unicode:
+-            for arg in args:
+-                if isinstance(arg, unicode):
+-                    want_unicode = True
+-                    break
+-        if want_unicode:
+-            newline = unicode("\n")
+-            space = unicode(" ")
+-        else:
+-            newline = "\n"
+-            space = " "
+-        if sep is None:
+-            sep = space
+-        if end is None:
+-            end = newline
+-        for i, arg in enumerate(args):
+-            if i:
+-                write(sep)
+-            write(arg)
+-        write(end)
+-
+-_add_doc(reraise, """Reraise an exception.""")
+-
+-
+-def with_metaclass(meta, *bases):
+-    """Create a base class with a metaclass."""
+-    return meta("NewBase", bases, {})
+ 
+-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)
+-        return metaclass(cls.__name__, cls.__bases__, orig_vars)
+-    return wrapper
+ 
+ def unicode_convertible (clazz):
+     if not PY3:
+diff --git a/pyxb/utils/unicode.py b/pyxb/utils/unicode.py
+index e4d98ae..a3dc33f 100644
+--- a/pyxb/utils/unicode.py
++++ b/pyxb/utils/unicode.py
+@@ -32,11 +32,12 @@ and refers to U{Unicode Standard Annex #27: Unicode 3.1
+ <http://www.unicode.org/unicode/reports/tr27/>}.
+ """
+ 
++from __future__ import absolute_import
+ import re
+ import logging
+ import pyxb.utils.utility
+ from pyxb.utils import six
+-from pyxb.utils.six.moves import xrange
++from six.moves import xrange
+ 
+ _log = logging.getLogger(__name__)
+ 
+diff --git a/pyxb/utils/utility.py b/pyxb/utils/utility.py
+index feaa014..d621fa7 100644
+--- a/pyxb/utils/utility.py
++++ b/pyxb/utils/utility.py
+@@ -15,11 +15,12 @@
+ 
+ """Utility functions and classes."""
+ 
++from __future__ import absolute_import
+ import re
+ import os
+ import errno
+ import pyxb
+-from pyxb.utils.six.moves.urllib import parse as urlparse
++from six.moves.urllib import parse as urlparse
+ import time
+ import datetime
+ import logging
+@@ -715,7 +716,7 @@ def DataFromURI (uri, archive_directory=None):
+     If the uri does not include a scheme (e.g., C{http:}), it is
+     assumed to be a file path on the local system."""
+ 
+-    from pyxb.utils.six.moves.urllib.request import urlopen
++    from six.moves.urllib.request import urlopen
+     stream = None
+     exc = None
+     # Only something that has a colon is a non-file URI.  Some things
+diff --git a/pyxb/xmlschema/structures.py b/pyxb/xmlschema/structures.py
+index abc62f0..24cbd3c 100644
+--- a/pyxb/xmlschema/structures.py
++++ b/pyxb/xmlschema/structures.py
+@@ -36,7 +36,7 @@ import re
+ import logging
+ from xml.dom import Node
+ import copy
+-from pyxb.utils.six.moves.urllib import parse as urlparse
++from six.moves.urllib import parse as urlparse
+ import os.path
+ 
+ import pyxb
+diff --git a/scripts/pyxbwsdl b/scripts/pyxbwsdl
+index 0249e59..f74ecc3 100755
+--- a/scripts/pyxbwsdl
++++ b/scripts/pyxbwsdl
+@@ -9,7 +9,7 @@
+ from __future__ import print_function
+ import sys
+ import xml.dom.minidom
+-from pyxb.utils.six.moves.urllib.request import urlopen
++from six.moves.urllib.request import urlopen
+ import logging
+ 
+ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
+diff --git a/tests/trac/test-trac-0175.py b/tests/trac/test-trac-0175.py
+index 192d442..ed5900f 100644
+--- a/tests/trac/test-trac-0175.py
++++ b/tests/trac/test-trac-0175.py
+@@ -8,7 +8,7 @@ import pyxb.utils.domutils
+ import operator
+ import functools
+ from xml.dom import Node
+-from pyxb.utils.six.moves import xrange
++from six.moves import xrange
+ 
+ import os.path
+ xsd='''<?xml version="1.0" encoding="UTF-8"?>
+diff --git a/tests/trac/test-trac-0207.py b/tests/trac/test-trac-0207.py
+index a7dbcb2..e08297a 100644
+--- a/tests/trac/test-trac-0207.py
++++ b/tests/trac/test-trac-0207.py
+@@ -6,7 +6,7 @@ _log = logging.getLogger(__name__)
+ import pyxb
+ import pyxb.utils.utility
+ import pyxb.binding.datatypes as xsd
+-from pyxb.utils.six.moves import cPickle as pickle
++from six.moves import cPickle as pickle
+ 
+ import unittest
+ 
+diff --git a/tests/trac/trac-0033/tread.py b/tests/trac/trac-0033/tread.py
+index daad306..f4a417f 100644
+--- a/tests/trac/trac-0033/tread.py
++++ b/tests/trac/trac-0033/tread.py
+@@ -7,7 +7,7 @@ _log = logging.getLogger(__name__)
+ import time
+ import pyxb.binding.generate
+ import pyxb.utils.domutils
+-from pyxb.utils.six.moves import xrange
++from six.moves import xrange
+ 
+ max_reps = 20
+ 
+diff --git a/tests/utils/test-fac.py b/tests/utils/test-fac.py
+index a908ca3..4f131e4 100644
+--- a/tests/utils/test-fac.py
++++ b/tests/utils/test-fac.py
+@@ -2,7 +2,7 @@ import unittest
+ import sys
+ from pyxb.utils.fac import *
+ from pyxb.utils import six
+-from pyxb.utils.six.moves import xrange
++from six.moves import xrange
+ 
+ class TestFAC (unittest.TestCase):
+     a = Symbol('a')
+-- 
+2.1.0
+
diff --git a/PyXB.spec b/PyXB.spec
index 6f4d83b..ab32a3f 100644
--- a/PyXB.spec
+++ b/PyXB.spec
@@ -8,17 +8,22 @@
 
 Name:           PyXB
 Version:        1.2.4
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        Python XML Schema Bindings
 License:        Apache
 URL:            http://pyxb.sourceforge.net/
 Source0:        https://github.com/pabigot/pyxb/archive/%{name}-%{version}.tar.gz
+Patch0:         0001-unbundle-six.patch
+
 BuildArch:      noarch
 
 BuildArch:      noarch
 BuildRequires:  python2-devel
+BuildRequires:  python-six
+Requires:       python-six
 %if 0%{?with_python3}
 BuildRequires:  python3-devel
+BuildRequires:  python3-six
 %endif # if with_python3
 
 %description
@@ -35,6 +40,7 @@ This package contains documentation and examples for PyXB.
 %if 0%{?with_python3}
 %package -n python3-PyXB
 Summary:        Python XML Schema Bindings
+Requires:       python3-six
 
 %description -n python3-PyXB
 PyXB (“pixbee”) is a pure Python package that generates Python source
@@ -52,6 +58,8 @@ This package contains documentation and examples for PyXB.
 %prep
 %setup -q -n pyxb-%{name}-%{version}
 
+%patch0 -p1
+
 %if 0%{?with_python3}
 rm -rf %{py3dir}
 cp -a . %{py3dir}
@@ -116,6 +124,9 @@ rm -rf %{buildroot}
 
 
 %changelog
+* Tue Jan 20 2015 Michal Srb <msrb at redhat.com> - 1.2.4-2
+- Unbundle python-six
+
 * Mon Oct 20 2014 Michal Srb <msrb at redhat.com> - 1.2.4-1
 - Update to official upstream version 1.2.4
 


More information about the scm-commits mailing list