1b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik"""Utilities for writing code that runs on Python 2 and 3""" 2b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 3b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Copyright (c) 2010-2015 Benjamin Peterson 4b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# 5b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Permission is hereby granted, free of charge, to any person obtaining a copy 6b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# of this software and associated documentation files (the "Software"), to deal 7b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# in the Software without restriction, including without limitation the rights 8b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# copies of the Software, and to permit persons to whom the Software is 10b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# furnished to do so, subject to the following conditions: 11b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# 12b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# The above copyright notice and this permission notice shall be included in all 13b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# copies or substantial portions of the Software. 14b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# 15b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# SOFTWARE. 22b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 23b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfrom __future__ import absolute_import 24b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 25b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport functools 26b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport itertools 27b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport operator 28b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport sys 29b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport types 30b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 31b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik__author__ = "Benjamin Peterson <benjamin@python.org>" 32b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik__version__ = "1.9.0" 33b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 34b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 35b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Useful for very coarse version differentiation. 36b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikPY2 = sys.version_info[0] == 2 37b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikPY3 = sys.version_info[0] == 3 38b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 39b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikif PY3: 40b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik string_types = str, 41b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik integer_types = int, 42b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik class_types = type, 43b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik text_type = str 44b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik binary_type = bytes 45b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 46b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MAXSIZE = sys.maxsize 47b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikelse: 48b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik string_types = basestring, 49b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik integer_types = (int, long) 50b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik class_types = (type, types.ClassType) 51b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik text_type = unicode 52b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik binary_type = str 53b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 54b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if sys.platform.startswith("java"): 55b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # Jython always uses 32 bits. 56b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MAXSIZE = int((1 << 31) - 1) 57b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik else: 58b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # It's possible to have sizeof(long) != sizeof(Py_ssize_t). 59b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik class X(object): 60b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __len__(self): 61b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return 1 << 31 62b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 63b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik len(X()) 64b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik except OverflowError: 65b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # 32-bit 66b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MAXSIZE = int((1 << 31) - 1) 67b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik else: 68b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # 64-bit 69b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MAXSIZE = int((1 << 63) - 1) 70b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik del X 71b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 72b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 73b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef _add_doc(func, doc): 74b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Add documentation to a function.""" 75b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik func.__doc__ = doc 76b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 77b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 78b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef _import_module(name): 79b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Import module, returning the module after the last dot.""" 80b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik __import__(name) 81b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return sys.modules[name] 82b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 83b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 84b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass _LazyDescr(object): 85b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 86b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __init__(self, name): 87b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.name = name 88b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 89b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __get__(self, obj, tp): 90b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik result = self._resolve() 91b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik setattr(obj, self.name, result) # Invokes __set__. 92b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 93b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # This is a bit ugly, but it avoids running this again by 94b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # removing this descriptor. 95b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik delattr(obj.__class__, self.name) 96b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik except AttributeError: 97b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik pass 98b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return result 99b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 100b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 101b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass MovedModule(_LazyDescr): 102b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 103b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __init__(self, name, old, new=None): 104b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik super(MovedModule, self).__init__(name) 105b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if PY3: 106b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if new is None: 107b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik new = name 108b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.mod = new 109b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik else: 110b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.mod = old 111b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 112b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def _resolve(self): 113b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return _import_module(self.mod) 114b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 115b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __getattr__(self, attr): 116b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _module = self._resolve() 117b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik value = getattr(_module, attr) 118b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik setattr(self, attr, value) 119b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return value 120b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 121b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 122b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass _LazyModule(types.ModuleType): 123b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 124b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __init__(self, name): 125b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik super(_LazyModule, self).__init__(name) 126b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.__doc__ = self.__class__.__doc__ 127b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 128b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __dir__(self): 129b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik attrs = ["__doc__", "__name__"] 130b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik attrs += [attr.name for attr in self._moved_attributes] 131b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return attrs 132b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 133b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # Subclasses should override this 134b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _moved_attributes = [] 135b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 136b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 137b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass MovedAttribute(_LazyDescr): 138b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 139b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): 140b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik super(MovedAttribute, self).__init__(name) 141b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if PY3: 142b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if new_mod is None: 143b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik new_mod = name 144b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.mod = new_mod 145b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if new_attr is None: 146b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if old_attr is None: 147b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik new_attr = name 148b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik else: 149b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik new_attr = old_attr 150b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.attr = new_attr 151b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik else: 152b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.mod = old_mod 153b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if old_attr is None: 154b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik old_attr = name 155b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.attr = old_attr 156b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 157b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def _resolve(self): 158b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik module = _import_module(self.mod) 159b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return getattr(module, self.attr) 160b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 161b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 162b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass _SixMetaPathImporter(object): 163b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 164b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik A meta path importer to import six.moves and its submodules. 165b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 166b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik This class implements a PEP302 finder and loader. It should be compatible 167b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with Python 2.5 and all existing versions of Python3 168b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 169b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __init__(self, six_module_name): 170b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.name = six_module_name 171b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.known_modules = {} 172b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 173b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def _add_module(self, mod, *fullnames): 174b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik for fullname in fullnames: 175b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.known_modules[self.name + "." + fullname] = mod 176b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 177b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def _get_module(self, fullname): 178b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return self.known_modules[self.name + "." + fullname] 179b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 180b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def find_module(self, fullname, path=None): 181b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if fullname in self.known_modules: 182b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return self 183b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return None 184b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 185b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __get_module(self, fullname): 186b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 187b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return self.known_modules[fullname] 188b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik except KeyError: 189b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise ImportError("This loader does not know module " + fullname) 190b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 191b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def load_module(self, fullname): 192b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 193b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # in case of a reload 194b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return sys.modules[fullname] 195b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik except KeyError: 196b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik pass 197b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik mod = self.__get_module(fullname) 198b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if isinstance(mod, MovedModule): 199b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik mod = mod._resolve() 200b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik else: 201b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik mod.__loader__ = self 202b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sys.modules[fullname] = mod 203b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return mod 204b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 205b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def is_package(self, fullname): 206b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 207b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik Return true, if the named module is a package. 208b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 209b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik We need this method to get correct spec objects with 210b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik Python 3.4 (see PEP451) 211b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 212b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return hasattr(self.__get_module(fullname), "__path__") 213b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 214b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def get_code(self, fullname): 215b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Return None 216b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 217b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik Required, if is_package is implemented""" 218b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.__get_module(fullname) # eventually raises ImportError 219b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return None 220b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik get_source = get_code # same as get_code 221b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 222b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_importer = _SixMetaPathImporter(__name__) 223b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 224b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 225b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass _MovedItems(_LazyModule): 226b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Lazy loading of moved objects""" 227b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik __path__ = [] # mark as package 228b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 229b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 230b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_moved_attributes = [ 231b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), 232b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), 233b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), 234b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), 235b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("intern", "__builtin__", "sys"), 236b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("map", "itertools", "builtins", "imap", "map"), 237b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), 238b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("reload_module", "__builtin__", "imp", "reload"), 239b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("reduce", "__builtin__", "functools"), 240b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), 241b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("StringIO", "StringIO", "io"), 242b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("UserDict", "UserDict", "collections"), 243b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("UserList", "UserList", "collections"), 244b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("UserString", "UserString", "collections"), 245b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), 246b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), 247b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), 248b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 249b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("builtins", "__builtin__"), 250b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("configparser", "ConfigParser"), 251b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("copyreg", "copy_reg"), 252b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), 253b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), 254b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), 255b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("http_cookies", "Cookie", "http.cookies"), 256b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("html_entities", "htmlentitydefs", "html.entities"), 257b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("html_parser", "HTMLParser", "html.parser"), 258b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("http_client", "httplib", "http.client"), 259b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), 260b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), 261b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), 262b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), 263b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), 264b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), 265b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), 266b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("cPickle", "cPickle", "pickle"), 267b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("queue", "Queue"), 268b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("reprlib", "repr"), 269b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("socketserver", "SocketServer"), 270b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("_thread", "thread", "_thread"), 271b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter", "Tkinter"), 272b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), 273b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), 274b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), 275b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), 276b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_tix", "Tix", "tkinter.tix"), 277b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), 278b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), 279b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), 280b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_colorchooser", "tkColorChooser", 281b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "tkinter.colorchooser"), 282b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_commondialog", "tkCommonDialog", 283b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "tkinter.commondialog"), 284b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), 285b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_font", "tkFont", "tkinter.font"), 286b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), 287b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", 288b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "tkinter.simpledialog"), 289b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), 290b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), 291b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), 292b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), 293b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), 294b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), 295b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedModule("winreg", "_winreg"), 296b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik] 297b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfor attr in _moved_attributes: 298b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik setattr(_MovedItems, attr.name, attr) 299b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if isinstance(attr, MovedModule): 300b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _importer._add_module(attr, "moves." + attr.name) 301b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdel attr 302b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 303b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_MovedItems._moved_attributes = _moved_attributes 304b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 305b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikmoves = _MovedItems(__name__ + ".moves") 306b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_importer._add_module(moves, "moves") 307b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 308b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 309b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass Module_six_moves_urllib_parse(_LazyModule): 310b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Lazy loading of moved objects in six.moves.urllib_parse""" 311b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 312b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 313b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_urllib_parse_moved_attributes = [ 314b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("ParseResult", "urlparse", "urllib.parse"), 315b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("SplitResult", "urlparse", "urllib.parse"), 316b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("parse_qs", "urlparse", "urllib.parse"), 317b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), 318b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("urldefrag", "urlparse", "urllib.parse"), 319b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("urljoin", "urlparse", "urllib.parse"), 320b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("urlparse", "urlparse", "urllib.parse"), 321b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("urlsplit", "urlparse", "urllib.parse"), 322b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("urlunparse", "urlparse", "urllib.parse"), 323b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), 324b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("quote", "urllib", "urllib.parse"), 325b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("quote_plus", "urllib", "urllib.parse"), 326b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("unquote", "urllib", "urllib.parse"), 327b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("unquote_plus", "urllib", "urllib.parse"), 328b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("urlencode", "urllib", "urllib.parse"), 329b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("splitquery", "urllib", "urllib.parse"), 330b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("splittag", "urllib", "urllib.parse"), 331b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("splituser", "urllib", "urllib.parse"), 332b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), 333b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), 334b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("uses_params", "urlparse", "urllib.parse"), 335b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("uses_query", "urlparse", "urllib.parse"), 336b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("uses_relative", "urlparse", "urllib.parse"), 337b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik] 338b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfor attr in _urllib_parse_moved_attributes: 339b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik setattr(Module_six_moves_urllib_parse, attr.name, attr) 340b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdel attr 341b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 342b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikModule_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes 343b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 344b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), 345b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "moves.urllib_parse", "moves.urllib.parse") 346b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 347b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 348b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass Module_six_moves_urllib_error(_LazyModule): 349b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Lazy loading of moved objects in six.moves.urllib_error""" 350b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 351b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 352b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_urllib_error_moved_attributes = [ 353b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("URLError", "urllib2", "urllib.error"), 354b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("HTTPError", "urllib2", "urllib.error"), 355b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), 356b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik] 357b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfor attr in _urllib_error_moved_attributes: 358b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik setattr(Module_six_moves_urllib_error, attr.name, attr) 359b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdel attr 360b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 361b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikModule_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes 362b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 363b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), 364b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "moves.urllib_error", "moves.urllib.error") 365b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 366b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 367b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass Module_six_moves_urllib_request(_LazyModule): 368b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Lazy loading of moved objects in six.moves.urllib_request""" 369b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 370b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 371b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_urllib_request_moved_attributes = [ 372b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("urlopen", "urllib2", "urllib.request"), 373b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("install_opener", "urllib2", "urllib.request"), 374b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("build_opener", "urllib2", "urllib.request"), 375b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("pathname2url", "urllib", "urllib.request"), 376b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("url2pathname", "urllib", "urllib.request"), 377b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("getproxies", "urllib", "urllib.request"), 378b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("Request", "urllib2", "urllib.request"), 379b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), 380b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), 381b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), 382b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), 383b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), 384b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("BaseHandler", "urllib2", "urllib.request"), 385b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), 386b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), 387b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), 388b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), 389b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), 390b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), 391b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), 392b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), 393b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), 394b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), 395b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("FileHandler", "urllib2", "urllib.request"), 396b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("FTPHandler", "urllib2", "urllib.request"), 397b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), 398b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), 399b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), 400b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("urlretrieve", "urllib", "urllib.request"), 401b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("urlcleanup", "urllib", "urllib.request"), 402b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("URLopener", "urllib", "urllib.request"), 403b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("FancyURLopener", "urllib", "urllib.request"), 404b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("proxy_bypass", "urllib", "urllib.request"), 405b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik] 406b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfor attr in _urllib_request_moved_attributes: 407b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik setattr(Module_six_moves_urllib_request, attr.name, attr) 408b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdel attr 409b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 410b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikModule_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes 411b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 412b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), 413b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "moves.urllib_request", "moves.urllib.request") 414b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 415b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 416b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass Module_six_moves_urllib_response(_LazyModule): 417b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Lazy loading of moved objects in six.moves.urllib_response""" 418b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 419b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 420b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_urllib_response_moved_attributes = [ 421b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("addbase", "urllib", "urllib.response"), 422b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("addclosehook", "urllib", "urllib.response"), 423b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("addinfo", "urllib", "urllib.response"), 424b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("addinfourl", "urllib", "urllib.response"), 425b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik] 426b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfor attr in _urllib_response_moved_attributes: 427b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik setattr(Module_six_moves_urllib_response, attr.name, attr) 428b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdel attr 429b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 430b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikModule_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes 431b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 432b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), 433b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "moves.urllib_response", "moves.urllib.response") 434b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 435b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 436b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass Module_six_moves_urllib_robotparser(_LazyModule): 437b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Lazy loading of moved objects in six.moves.urllib_robotparser""" 438b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 439b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 440b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_urllib_robotparser_moved_attributes = [ 441b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), 442b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik] 443b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfor attr in _urllib_robotparser_moved_attributes: 444b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik setattr(Module_six_moves_urllib_robotparser, attr.name, attr) 445b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdel attr 446b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 447b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikModule_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes 448b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 449b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), 450b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "moves.urllib_robotparser", "moves.urllib.robotparser") 451b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 452b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 453b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass Module_six_moves_urllib(types.ModuleType): 454b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" 455b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik __path__ = [] # mark as package 456b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik parse = _importer._get_module("moves.urllib_parse") 457b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik error = _importer._get_module("moves.urllib_error") 458b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik request = _importer._get_module("moves.urllib_request") 459b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik response = _importer._get_module("moves.urllib_response") 460b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik robotparser = _importer._get_module("moves.urllib_robotparser") 461b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 462b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __dir__(self): 463b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return ['parse', 'error', 'request', 'response', 'robotparser'] 464b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 465b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), 466b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "moves.urllib") 467b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 468b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 469b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef add_move(move): 470b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Add an item to six.moves.""" 471b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik setattr(_MovedItems, move.name, move) 472b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 473b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 474b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef remove_move(name): 475b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Remove item from six.moves.""" 476b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 477b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik delattr(_MovedItems, name) 478b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik except AttributeError: 479b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 480b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik del moves.__dict__[name] 481b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik except KeyError: 482b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise AttributeError("no such move, %r" % (name,)) 483b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 484b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 485b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikif PY3: 486b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _meth_func = "__func__" 487b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _meth_self = "__self__" 488b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 489b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _func_closure = "__closure__" 490b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _func_code = "__code__" 491b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _func_defaults = "__defaults__" 492b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _func_globals = "__globals__" 493b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikelse: 494b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _meth_func = "im_func" 495b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _meth_self = "im_self" 496b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 497b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _func_closure = "func_closure" 498b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _func_code = "func_code" 499b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _func_defaults = "func_defaults" 500b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _func_globals = "func_globals" 501b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 502b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 503b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craiktry: 504b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik advance_iterator = next 505b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikexcept NameError: 506b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def advance_iterator(it): 507b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return it.next() 508b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craiknext = advance_iterator 509b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 510b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 511b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craiktry: 512b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik callable = callable 513b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikexcept NameError: 514b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def callable(obj): 515b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) 516b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 517b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 518b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikif PY3: 519b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def get_unbound_function(unbound): 520b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return unbound 521b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 522b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik create_bound_method = types.MethodType 523b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 524b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik Iterator = object 525b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikelse: 526b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def get_unbound_function(unbound): 527b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return unbound.im_func 528b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 529b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def create_bound_method(func, obj): 530b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return types.MethodType(func, obj, obj.__class__) 531b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 532b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik class Iterator(object): 533b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 534b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def next(self): 535b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return type(self).__next__(self) 536b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 537b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik callable = callable 538b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_add_doc(get_unbound_function, 539b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Get the function out of a possibly unbound function""") 540b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 541b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 542b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikget_method_function = operator.attrgetter(_meth_func) 543b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikget_method_self = operator.attrgetter(_meth_self) 544b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikget_function_closure = operator.attrgetter(_func_closure) 545b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikget_function_code = operator.attrgetter(_func_code) 546b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikget_function_defaults = operator.attrgetter(_func_defaults) 547b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikget_function_globals = operator.attrgetter(_func_globals) 548b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 549b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 550b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikif PY3: 551b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def iterkeys(d, **kw): 552b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return iter(d.keys(**kw)) 553b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 554b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def itervalues(d, **kw): 555b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return iter(d.values(**kw)) 556b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 557b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def iteritems(d, **kw): 558b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return iter(d.items(**kw)) 559b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 560b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def iterlists(d, **kw): 561b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return iter(d.lists(**kw)) 562b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 563b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik viewkeys = operator.methodcaller("keys") 564b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 565b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik viewvalues = operator.methodcaller("values") 566b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 567b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik viewitems = operator.methodcaller("items") 568b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikelse: 569b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def iterkeys(d, **kw): 570b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return iter(d.iterkeys(**kw)) 571b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 572b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def itervalues(d, **kw): 573b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return iter(d.itervalues(**kw)) 574b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 575b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def iteritems(d, **kw): 576b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return iter(d.iteritems(**kw)) 577b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 578b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def iterlists(d, **kw): 579b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return iter(d.iterlists(**kw)) 580b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 581b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik viewkeys = operator.methodcaller("viewkeys") 582b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 583b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik viewvalues = operator.methodcaller("viewvalues") 584b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 585b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik viewitems = operator.methodcaller("viewitems") 586b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 587b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") 588b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_add_doc(itervalues, "Return an iterator over the values of a dictionary.") 589b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_add_doc(iteritems, 590b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "Return an iterator over the (key, value) pairs of a dictionary.") 591b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_add_doc(iterlists, 592b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "Return an iterator over the (key, [values]) pairs of a dictionary.") 593b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 594b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 595b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikif PY3: 596b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def b(s): 597b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return s.encode("latin-1") 598b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def u(s): 599b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return s 600b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik unichr = chr 601b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if sys.version_info[1] <= 1: 602b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def int2byte(i): 603b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return bytes((i,)) 604b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik else: 605b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # This is about 2x faster than the implementation above on 3.2+ 606b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik int2byte = operator.methodcaller("to_bytes", 1, "big") 607b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik byte2int = operator.itemgetter(0) 608b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik indexbytes = operator.getitem 609b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik iterbytes = iter 610b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik import io 611b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik StringIO = io.StringIO 612b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik BytesIO = io.BytesIO 613b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _assertCountEqual = "assertCountEqual" 614b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _assertRaisesRegex = "assertRaisesRegex" 615b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _assertRegex = "assertRegex" 616b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikelse: 617b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def b(s): 618b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return s 619b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # Workaround for standalone backslash 620b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def u(s): 621b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") 622b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik unichr = unichr 623b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik int2byte = chr 624b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def byte2int(bs): 625b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return ord(bs[0]) 626b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def indexbytes(buf, i): 627b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return ord(buf[i]) 628b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik iterbytes = functools.partial(itertools.imap, ord) 629b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik import StringIO 630b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik StringIO = BytesIO = StringIO.StringIO 631b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _assertCountEqual = "assertItemsEqual" 632b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _assertRaisesRegex = "assertRaisesRegexp" 633b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _assertRegex = "assertRegexpMatches" 634b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_add_doc(b, """Byte literal""") 635b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_add_doc(u, """Text literal""") 636b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 637b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 638b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef assertCountEqual(self, *args, **kwargs): 639b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return getattr(self, _assertCountEqual)(*args, **kwargs) 640b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 641b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 642b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef assertRaisesRegex(self, *args, **kwargs): 643b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return getattr(self, _assertRaisesRegex)(*args, **kwargs) 644b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 645b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 646b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef assertRegex(self, *args, **kwargs): 647b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return getattr(self, _assertRegex)(*args, **kwargs) 648b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 649b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 650b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikif PY3: 651b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exec_ = getattr(moves.builtins, "exec") 652b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 653b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 654b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def reraise(tp, value, tb=None): 655b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if value is None: 656b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik value = tp() 657b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if value.__traceback__ is not tb: 658b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise value.with_traceback(tb) 659b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise value 660b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 661b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikelse: 662b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def exec_(_code_, _globs_=None, _locs_=None): 663b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Execute code in a namespace.""" 664b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if _globs_ is None: 665b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik frame = sys._getframe(1) 666b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _globs_ = frame.f_globals 667b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if _locs_ is None: 668b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _locs_ = frame.f_locals 669b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik del frame 670b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik elif _locs_ is None: 671b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _locs_ = _globs_ 672b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exec("""exec _code_ in _globs_, _locs_""") 673b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 674b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 675b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exec_("""def reraise(tp, value, tb=None): 676b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise tp, value, tb 677b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik""") 678b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 679b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 680b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikif sys.version_info[:2] == (3, 2): 681b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exec_("""def raise_from(value, from_value): 682b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if from_value is None: 683b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise value 684b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise value from from_value 685b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik""") 686b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikelif sys.version_info[:2] > (3, 2): 687b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exec_("""def raise_from(value, from_value): 688b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise value from from_value 689b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik""") 690b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikelse: 691b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def raise_from(value, from_value): 692b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise value 693b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 694b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 695b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikprint_ = getattr(moves.builtins, "print", None) 696b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikif print_ is None: 697b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def print_(*args, **kwargs): 698b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """The new-style print function for Python 2.4 and 2.5.""" 699b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik fp = kwargs.pop("file", sys.stdout) 700b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if fp is None: 701b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return 702b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def write(data): 703b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if not isinstance(data, basestring): 704b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik data = str(data) 705b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # If the file has an encoding, encode unicode with it. 706b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if (isinstance(fp, file) and 707b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik isinstance(data, unicode) and 708b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik fp.encoding is not None): 709b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik errors = getattr(fp, "errors", None) 710b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if errors is None: 711b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik errors = "strict" 712b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik data = data.encode(fp.encoding, errors) 713b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik fp.write(data) 714b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik want_unicode = False 715b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sep = kwargs.pop("sep", None) 716b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if sep is not None: 717b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if isinstance(sep, unicode): 718b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik want_unicode = True 719b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik elif not isinstance(sep, str): 720b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise TypeError("sep must be None or a string") 721b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik end = kwargs.pop("end", None) 722b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if end is not None: 723b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if isinstance(end, unicode): 724b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik want_unicode = True 725b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik elif not isinstance(end, str): 726b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise TypeError("end must be None or a string") 727b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if kwargs: 728b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise TypeError("invalid keyword arguments to print()") 729b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if not want_unicode: 730b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik for arg in args: 731b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if isinstance(arg, unicode): 732b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik want_unicode = True 733b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik break 734b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if want_unicode: 735b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik newline = unicode("\n") 736b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik space = unicode(" ") 737b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik else: 738b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik newline = "\n" 739b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik space = " " 740b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if sep is None: 741b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sep = space 742b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if end is None: 743b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik end = newline 744b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik for i, arg in enumerate(args): 745b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if i: 746b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik write(sep) 747b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik write(arg) 748b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik write(end) 749b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikif sys.version_info[:2] < (3, 3): 750b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _print = print_ 751b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def print_(*args, **kwargs): 752b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik fp = kwargs.get("file", sys.stdout) 753b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik flush = kwargs.pop("flush", False) 754b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _print(*args, **kwargs) 755b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if flush and fp is not None: 756b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik fp.flush() 757b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 758b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik_add_doc(reraise, """Reraise an exception.""") 759b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 760b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikif sys.version_info[0:2] < (3, 4): 761b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, 762b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik updated=functools.WRAPPER_UPDATES): 763b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def wrapper(f): 764b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik f = functools.wraps(wrapped, assigned, updated)(f) 765b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik f.__wrapped__ = wrapped 766b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return f 767b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return wrapper 768b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikelse: 769b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik wraps = functools.wraps 770b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 771b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef with_metaclass(meta, *bases): 772b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Create a base class with a metaclass.""" 773b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # This requires a bit of explanation: the basic idea is to make a dummy 774b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # metaclass for one level of class instantiation that replaces itself with 775b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # the actual metaclass. 776b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik class metaclass(meta): 777b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __new__(cls, name, this_bases, d): 778b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return meta(name, bases, d) 779b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return type.__new__(metaclass, 'temporary_class', (), {}) 780b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 781b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 782b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef add_metaclass(metaclass): 783b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """Class decorator for creating a class with a metaclass.""" 784b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def wrapper(cls): 785b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik orig_vars = cls.__dict__.copy() 786b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik slots = orig_vars.get('__slots__') 787b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if slots is not None: 788b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if isinstance(slots, str): 789b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik slots = [slots] 790b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik for slots_var in slots: 791b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik orig_vars.pop(slots_var) 792b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik orig_vars.pop('__dict__', None) 793b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik orig_vars.pop('__weakref__', None) 794b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return metaclass(cls.__name__, cls.__bases__, orig_vars) 795b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return wrapper 796b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 797b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 798b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef python_2_unicode_compatible(klass): 799b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 800b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik A decorator that defines __unicode__ and __str__ methods under Python 2. 801b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik Under Python 3 it does nothing. 802b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 803b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik To support Python 2 and 3 with a single code base, define a __str__ method 804b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik returning text and apply this decorator to the class. 805b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 806b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if PY2: 807b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if '__str__' not in klass.__dict__: 808b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik raise ValueError("@python_2_unicode_compatible cannot be applied " 809b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "to %s because it doesn't define __str__()." % 810b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik klass.__name__) 811b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik klass.__unicode__ = klass.__str__ 812b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik klass.__str__ = lambda self: self.__unicode__().encode('utf-8') 813b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return klass 814b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 815b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 816b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Complete the moves implementation. 817b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# This code is at the end of this module to speed up module loading. 818b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Turn this module into a package. 819b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik__path__ = [] # required for PEP 302 and PEP 451 820b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik__package__ = __name__ # see PEP 366 @ReservedAssignment 821b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikif globals().get("__spec__") is not None: 822b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable 823b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Remove other six meta path importers, since they cause problems. This can 824b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# happen if six is removed from sys.modules and then reloaded. (Setuptools does 825b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# this for some reason.) 826b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikif sys.meta_path: 827b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik for i, importer in enumerate(sys.meta_path): 828b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # Here's some real nastiness: Another "instance" of the six module might 829b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # be floating around. Therefore, we can't use isinstance() to check for 830b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # the six meta path importer, since the other six instance will have 831b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # inserted an importer with different class. 832b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if (type(importer).__name__ == "_SixMetaPathImporter" and 833b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik importer.name == __name__): 834b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik del sys.meta_path[i] 835b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik break 836b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik del i, importer 837b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Finally, add the importer to the meta path import hook. 838b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craiksys.meta_path.append(_importer) 839