Show More
@@ -43,7 +43,6 b' if ispy3:' | |||
|
43 | 43 | |
|
44 | 44 | fsencode = os.fsencode |
|
45 | 45 | fsdecode = os.fsdecode |
|
46 | # A bytes version of os.name. | |
|
47 | 46 | oslinesep = os.linesep.encode('ascii') |
|
48 | 47 | osname = os.name.encode('ascii') |
|
49 | 48 | ospathsep = os.pathsep.encode('ascii') |
@@ -210,10 +209,13 b' if ispy3:' | |||
|
210 | 209 | def open(name, mode='r', buffering=-1): |
|
211 | 210 | return builtins.open(name, sysstr(mode), buffering) |
|
212 | 211 | |
|
213 | # getopt.getopt() on Python 3 deals with unicodes internally so we cannot | |
|
214 | # pass bytes there. Passing unicodes will result in unicodes as return | |
|
215 | # values which we need to convert again to bytes. | |
|
216 | 212 | def getoptb(args, shortlist, namelist): |
|
213 | """ | |
|
214 | Takes bytes arguments, converts them to unicode, pass them to | |
|
215 | getopt.getopt(), convert the returned values back to bytes and then | |
|
216 | return them for Python 3 compatibility as getopt.getopt() don't accepts | |
|
217 | bytes on Python 3. | |
|
218 | """ | |
|
217 | 219 | args = [a.decode('latin-1') for a in args] |
|
218 | 220 | shortlist = shortlist.decode('latin-1') |
|
219 | 221 | namelist = [a.decode('latin-1') for a in namelist] |
@@ -223,24 +225,30 b' if ispy3:' | |||
|
223 | 225 | args = [a.encode('latin-1') for a in args] |
|
224 | 226 | return opts, args |
|
225 | 227 | |
|
226 | # keys of keyword arguments in Python need to be strings which are unicodes | |
|
227 | # Python 3. This function takes keyword arguments, convert the keys to str. | |
|
228 | 228 | def strkwargs(dic): |
|
229 | """ | |
|
230 | Converts the keys of a python dictonary to str i.e. unicodes so that | |
|
231 | they can be passed as keyword arguments as dictonaries with bytes keys | |
|
232 | can't be passed as keyword arguments to functions on Python 3. | |
|
233 | """ | |
|
229 | 234 | dic = dict((k.decode('latin-1'), v) for k, v in dic.iteritems()) |
|
230 | 235 | return dic |
|
231 | 236 | |
|
232 | # keys of keyword arguments need to be unicode while passing into | |
|
233 | # a function. This function helps us to convert those keys back to bytes | |
|
234 | # again as we need to deal with bytes. | |
|
235 | 237 | def byteskwargs(dic): |
|
238 | """ | |
|
239 | Converts keys of python dictonaries to bytes as they were converted to | |
|
240 | str to pass that dictonary as a keyword argument on Python 3. | |
|
241 | """ | |
|
236 | 242 | dic = dict((k.encode('latin-1'), v) for k, v in dic.iteritems()) |
|
237 | 243 | return dic |
|
238 | 244 | |
|
239 | # shlex.split() accepts unicodes on Python 3. This function takes bytes | |
|
240 | # argument, convert it into unicodes, pass into shlex.split(), convert the | |
|
241 | # returned value to bytes and return that. | |
|
242 | 245 | # TODO: handle shlex.shlex(). |
|
243 | 246 | def shlexsplit(s): |
|
247 | """ | |
|
248 | Takes bytes argument, convert it to str i.e. unicodes, pass that into | |
|
249 | shlex.split(), convert the returned value to bytes and return that for | |
|
250 | Python 3 compatibility as shelx.split() don't accept bytes on Python 3. | |
|
251 | """ | |
|
244 | 252 | ret = shlex.split(s.decode('latin-1')) |
|
245 | 253 | return [a.encode('latin-1') for a in ret] |
|
246 | 254 | |
@@ -259,10 +267,12 b' else:' | |||
|
259 | 267 | exec('def raisewithtb(exc, tb):\n' |
|
260 | 268 | ' raise exc, None, tb\n') |
|
261 | 269 | |
|
262 | # Partial backport from os.py in Python 3, which only accepts bytes. | |
|
263 | # In Python 2, our paths should only ever be bytes, a unicode path | |
|
264 | # indicates a bug. | |
|
265 | 270 | def fsencode(filename): |
|
271 | """ | |
|
272 | Partial backport from os.py in Python 3, which only accepts bytes. | |
|
273 | In Python 2, our paths should only ever be bytes, a unicode path | |
|
274 | indicates a bug. | |
|
275 | """ | |
|
266 | 276 | if isinstance(filename, str): |
|
267 | 277 | return filename |
|
268 | 278 | else: |
General Comments 0
You need to be logged in to leave comments.
Login now