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

Yuya Nishihara yuya at tcha.org
Fri Dec 9 05:44:40 EST 2016


On Fri, 09 Dec 2016 00:42:38 +0530, Pulkit Goyal wrote:
> # HG changeset patch
> # User Pulkit Goyal <7895pulkit at gmail.com>
> # Date 1481127783 -19800
> #      Wed Dec 07 21:53:03 2016 +0530
> # Node ID a359ab71022408a864d58baba3b365ee262560df
> # Parent  e6e1c531a879c091caeaf7597744e98bcfbb41c9
> 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 e6e1c531a879 -r a359ab710224 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
> @@ -109,6 +109,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 = {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 = {k.encode('latin-1'): v for k, v in dic.iteritems()}
> +        return dic

SyntaxError on Python 2.6. Maybe you sent old version?


More information about the Mercurial-devel mailing list