[PATCH] py3: have an utility function to return string
Yuya Nishihara
yuya at tcha.org
Thu Sep 15 09:36:08 EDT 2016
On Wed, 14 Sep 2016 22:45:27 +0530, Pulkit Goyal wrote:
> # HG changeset patch
> # User Pulkit Goyal <7895pulkit at gmail.com>
> # Date 1473787789 -19800
> # Tue Sep 13 22:59:49 2016 +0530
> # Node ID ec133d50af780e84a6a24825b52d433c10f9cd55
> # Parent 85bd31515225e7fdf9bd88edde054db2c74a33f8
> py3: have an utility function to return string
>
> There are cases when we need strings and can't use bytes in python 3.
> We need an utility function for these cases. I agree that this may not
> be the best possible way out. I will be happy if anybody else can suggest
> a better approach. We need this functions for os.path.join(),
We should stick to bytes for filesystem API, and translate bytes to unicode
at VFS layer as necessary.
https://www.mercurial-scm.org/wiki/WindowsUTF8Plan
(Also, we'll have to disable PEP 528 and 529 on Python 3.6, which will break
existing repositories.)
https://docs.python.org/3.6/whatsnew/3.6.html
> __slots__
__slots__ can be considered private data, so just use u''.
> and few more things.
for instance?
> +# This function converts its arguments to strings
> +# on the basis of python version. Strings in python 3
> +# are unicodes and our transformer converts everything to bytes
> +# in python 3. So we need to decode it to unicodes in
> +# py3.
> +
> +def coverttostr(word):
> + if sys.version_info[0] < 3:
> + assert isinstance(word, str), "Not a string in Python 2"
> + return word
> + # Checking word is bytes because we have the transformer, else
> + # raising error
> + assert isinstance(word, bytes), "Should be bytes because of transformer"
> + return word.decode(sys.getfilesystemencoding())
Can we assume 'word' was encoded in file-system codec?
More information about the Mercurial-devel
mailing list