py3: utility functions to convert keys of kwargs to bytes/unicodes
authorPulkit Goyal <7895pulkit@gmail.com>
Wed, 07 Dec 2016 21:53:03 +0530
changeset 30579 fbc3f73dc802
parent 30578 c6ce11f2ee50
child 30580 51e7c83e05ee
py3: utility functions to convert keys of kwargs to bytes/unicodes Keys of keyword arguments need to be str(unicodes) on Python 3. We have a lot of function where we pass keyword arguments. Having utility functions to help converting keys to unicodes before passing and convert back them to bytes once passed into the function will be helpful. We now have functions named pycompat.strkwargs(dic) and pycompat.byteskwargs(dic) to help us.
mercurial/pycompat.py
--- a/mercurial/pycompat.py	Tue Dec 06 06:36:36 2016 +0530
+++ b/mercurial/pycompat.py	Wed Dec 07 21:53:03 2016 +0530
@@ -101,6 +101,19 @@
         args = [a.encode('latin-1') for a in args]
         return opts, args
 
+    # keys of keyword arguments in Python need to be strings which are unicodes
+    # Python 3. This function takes keyword arguments, convert the keys to str.
+    def strkwargs(dic):
+        dic = dict((k.decode('latin-1'), v) for k, v in dic.iteritems())
+        return dic
+
+    # keys of keyword arguments need to be unicode while passing into
+    # a function. This function helps us to convert those keys back to bytes
+    # again as we need to deal with bytes.
+    def byteskwargs(dic):
+        dic = dict((k.encode('latin-1'), v) for k, v in dic.iteritems())
+        return dic
+
 else:
     def sysstr(s):
         return s
@@ -123,6 +136,12 @@
     def getoptb(args, shortlist, namelist):
         return getopt.getopt(args, shortlist, namelist)
 
+    def strkwargs(dic):
+        return dic
+
+    def byteskwargs(dic):
+        return dic
+
     osname = os.name
     ospathsep = os.pathsep
     ossep = os.sep