1"""Utilities for writing code that runs on Python 2 and 3""" 2import sys 3import types 4from .six import * 5__version__ = "1.0" 6 7def _add_doc(func, doc): 8 """Add documentation to a function.""" 9 func.__doc__ = doc 10 11 12class _MovedItems_addon(types.ModuleType): 13 """Lazy loading of moved objects""" 14 15_moved_attributes_addon = [ 16 17 MovedModule("builtins", "__builtin__"), 18 MovedModule("configparser", "ConfigParser"), 19 MovedModule("copyreg", "copy_reg"), 20 MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), 21 MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), 22 MovedModule("http_cookies", "Cookie", "http.cookies"), 23 MovedModule("html_entities", "htmlentitydefs", "html.entities"), 24 MovedModule("html_parser", "HTMLParser", "html.parser"), 25 MovedModule("http_client", "httplib", "http.client"), 26 MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), 27 MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), 28 MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), 29 MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), 30 MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), 31 MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), 32 MovedModule("cPickle", "cPickle", "pickle"), 33 MovedModule("queue", "Queue"), 34 MovedModule("reprlib", "repr"), 35 MovedModule("socketserver", "SocketServer"), 36 MovedModule("_thread", "thread", "_thread"), 37 MovedModule("tkinter", "Tkinter"), 38 MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), 39 MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), 40 MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), 41 MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), 42 MovedModule("tkinter_tix", "Tix", "tkinter.tix"), 43 MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), 44 MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), 45 MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), 46 MovedModule("tkinter_colorchooser", "tkColorChooser", 47 "tkinter.colorchooser"), 48 MovedModule("tkinter_commondialog", "tkCommonDialog", 49 "tkinter.commondialog"), 50 MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), 51 MovedModule("tkinter_font", "tkFont", "tkinter.font"), 52 MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), 53 MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", 54 "tkinter.simpledialog"), 55 MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), 56 MovedModule("urllib2_parse", "urllib2", "urllib.parse"), 57 MovedModule("urllib2_error", "urllib2", "urllib.error"), 58 MovedModule("urllib2_request", "urllib2", "urllib.request"), 59 MovedModule("urllib_request", "urllib", "urllib.request"), 60 MovedModule("urllib_parse", "urllib", "urllib.parse"), 61 MovedModule("urllib_error", "urllib", "urllib.error"), 62 MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), 63 MovedModule("winreg", "_winreg"), 64 MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"), 65 MovedModule("email_encoders", "email.Encoders", "email.encoders"), 66 MovedModule("sha", "sha", "hashlib"), 67 68 MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), 69 MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), 70 MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), 71 MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), 72 MovedAttribute("map", "itertools", "builtins", "imap", "map"), 73 MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), 74 MovedAttribute("reload_module", "__builtin__", "imp", "reload"), 75 MovedAttribute("reduce", "__builtin__", "functools"), 76 MovedAttribute("StringIO", "StringIO", "io"), 77 MovedAttribute("UserString", "UserString", "collections"), 78 MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), 79 MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), 80 MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), 81 82 83] 84 85for attr in _moved_attributes_addon: 86 setattr(_MovedItems_addon, attr.name, attr) 87del attr 88 89 90moves = sys.modules[__name__ + ".moves"] = _MovedItems_addon("moves") 91 92 93import io 94class xStringIO(io.BytesIO): 95 if PY3: 96 def makefile(self, x): 97 return self 98 else: 99 def makefile(self, x, y): 100 return self 101 102if PY3: 103 104 def to_bytes_latin(s): 105 return s.encode("latin-1") 106 107 108 def to_bytes_utf8(s): 109 return s.encode("utf-8") 110 111 112 def to_string_utf8(s): 113 return s.decode("utf-8") 114 115 116 def to_string_latin(s): 117 return s.decode("latin-1") 118 119 120 def to_unicode(s, enc=None): 121 return str(s) 122 123 124 def from_unicode_to_str(s,enc=''): 125 return s 126 127 128 def to_long(i): 129 return i 130 131 132 import io 133 StringIO = io.StringIO 134 BytesIO = io.BytesIO 135 136 import subprocess 137 138 139else: 140 def to_bytes_latin(s): 141 return s 142 143 144 def to_bytes_utf8(s): 145 return s 146 147 148 def to_string_utf8(s): 149 return s 150 151 152 def to_string_latin(s): 153 return s 154 155 156 def to_unicode(s, enc=None): 157 if enc: 158 return unicode(s, enc)#, "unicode_escape") 159 else: 160 return unicode(s)#, "unicode_escape") 161 162 163 def from_unicode_to_str(s,enc='utf-8'): 164 return s.encode(enc) 165 166 167 def to_long(i): 168 return long(i) 169 170 171 import cStringIO 172 StringIO = BytesIO = cStringIO.StringIO 173 import commands as subprocess 174 175 176 177_add_doc(to_bytes_utf8, """Byte literal""") 178_add_doc(to_bytes_latin, """Byte literal""") 179_add_doc(to_string_utf8, """String literal""") 180_add_doc(to_string_latin, """String literal""") 181_add_doc(to_unicode, """Text literal""") 182 183 184