Re: [PATCH 2 of 3] py3: utility functions to convert keys of kwargs to bytes/unicodes

2016-12-11 Thread Yuya Nishihara
On Sat, 10 Dec 2016 05:10:26 +0530, Pulkit Goyal wrote:
> # HG changeset patch
> # User Pulkit Goyal <7895pul...@gmail.com>
> # Date 1481127783 -19800
> #  Wed Dec 07 21:53:03 2016 +0530
> # Node ID 7fcea54acba98b7f1d994bd7311bb0f5ec566b65
> # Parent  4b57889d58056f95c58f2379836437a65950424c
> py3: utility functions to convert keys of kwargs to bytes/unicodes

Queued this, too.

> --- 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,20 @@
>  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 take keyword arguments, convert the keys to str
> +# if they are in bytes.

Removed "if they are in bytes."
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


[PATCH 2 of 3] py3: utility functions to convert keys of kwargs to bytes/unicodes

2016-12-09 Thread Pulkit Goyal
# HG changeset patch
# User Pulkit Goyal <7895pul...@gmail.com>
# Date 1481127783 -19800
#  Wed Dec 07 21:53:03 2016 +0530
# Node ID 7fcea54acba98b7f1d994bd7311bb0f5ec566b65
# Parent  4b57889d58056f95c58f2379836437a65950424c
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.

diff -r 4b57889d5805 -r 7fcea54acba9 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,20 @@
 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 take keyword arguments, convert the keys to str
+# if they are in bytes.
+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
+# 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 +137,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
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel