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