# HG changeset patch # User Yuya Nishihara <y...@tcha.org> # Date 1471146681 -32400 # Sun Aug 14 12:51:21 2016 +0900 # Node ID 82f7a2639ea514b22a2cbb2000740dce513663e2 # Parent c3639410ef41ee95ce795ac1a461889feb9f9cf5 py3: provide (del|get|has|set)attr wrappers that accepts bytes
These functions will be imported automagically by our code transformer. getattr() and setattr() are widely used in our code. We wouldn't probably want to rewrite every single call of getattr/setattr. delattr() and hasattr() aren't that important, but they are functions of the same kind. diff --git a/mercurial/pycompat.py b/mercurial/pycompat.py --- a/mercurial/pycompat.py +++ b/mercurial/pycompat.py @@ -31,8 +31,22 @@ else: if sys.version_info[0] >= 3: import builtins + import functools builtins.xrange = range + def _wrapattrfunc(f): + @functools.wraps(f) + def w(object, name, *args): + if isinstance(name, bytes): + name = name.decode(u'utf-8') + return f(object, name, *args) + return w + + delattr = _wrapattrfunc(builtins.delattr) + getattr = _wrapattrfunc(builtins.getattr) + hasattr = _wrapattrfunc(builtins.hasattr) + setattr = _wrapattrfunc(builtins.setattr) + stringio = io.StringIO empty = _queue.Empty queue = _queue.Queue _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel