On Thu, Dec 8, 2016 at 8:52 PM, Yuya Nishihara <y...@tcha.org> wrote: > On Thu, 8 Dec 2016 20:37:07 +0530, Pulkit Goyal wrote: >> On Thu, Dec 8, 2016 at 8:32 PM, Yuya Nishihara <y...@tcha.org> wrote: >> > On Thu, 08 Dec 2016 00:06:40 +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 85d610c83bda09dea2393c22e415dd9656f5a7f2 >> >> # Parent ced854b9dfaa7298b241ac085627b12ecb796dcd >> >> py3: utility functions to convert keys of kwargs to bytes/unicodes >> > >> >> --- a/mercurial/pycompat.py Tue Dec 06 06:36:36 2016 +0530 >> >> +++ b/mercurial/pycompat.py Wed Dec 07 21:53:03 2016 +0530 >> >> @@ -103,6 +103,22 @@ >> >> 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') if isinstance(k, bytes) else k): v >> >> + for k, v in >> >> dic.items()} >> >> + 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') if isinstance(k, str) else k): v >> >> + for k, v in >> >> dic.items()} >> >> + return dic >> > >> > I think we can assume the type of keys must be either bytes or unicode, so >> > we won't need isinstance() checks. >> >> On python 3, if passed value is bytes, then .encode() will result in >> error. So have to specific on Python 3. > > IMHO, it's a kind of programming error. Unlike pycompat.getattr(), strkwargs() > isn't a drop-in replacement for a standard function, so we can say strkwargs() > only takes a dict of bytes keys.
Okay I will remove the isinstances. I am wondering is a dict where keys will be both bytes and unicodes can exist in our codebase or not, just to make sure those cases are catched too. > >> > And no dict comprehension. The code must be parseable by Python 2.6. >> >> Yeah I remember, actually this code is under a if statement which is >> executed if sys.version >= 3. > > Dict comprehension is syntax. Runtime dispatch can't stop parsing of the > ispy3 block. Okay I will send a V3. _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel