[PATCH 3 of 4 py3 V2] pycompat: custom implementation of urllib.parse.quote()

Pulkit Goyal 7895pulkit at gmail.com
Mon Mar 13 21:48:41 EDT 2017


On 13-Mar-2017 1:09 PM, "Gregory Szorc" <gregory.szorc at gmail.com> wrote:
>
> # HG changeset patch
> # User Gregory Szorc <gregory.szorc at gmail.com>
> # Date 1489432607 25200
> #      Mon Mar 13 12:16:47 2017 -0700
> # Node ID ae4c0d8f0ca7218c8b1d259b72660c99b4c085aa
> # Parent  4dca07be3c215ee7f47ccd7473d78514968f1bb4
> pycompat: custom implementation of urllib.parse.quote()
>
> urllib.parse.quote() accepts either str or bytes and returns str.

> There exists a urllib.parse.quote_from_bytes() which only accepts
> bytes. We should probably use that to retain strong typing and
> avoid surprises.
>
> In addition, since nearly all strings in Mercurial are bytes, we
> probably don't want quote() returning unicode.
>
> So, this patch implements a custom quote() that only accepts bytes
> and returns bytes. The quoted URL should only contain URL safe
> characters which is a strict subset of ASCII. So
> `.encode('ascii', 'strict')` should be safe.
>
> diff --git a/mercurial/pycompat.py b/mercurial/pycompat.py
> --- a/mercurial/pycompat.py
> +++ b/mercurial/pycompat.py
> @@ -269,7 +269,6 @@ if not ispy3:
>  else:
>      import urllib.parse
>      urlreq._registeraliases(urllib.parse, (
> -        "quote",
>          "splitattr",
>          "splitpasswd",
>          "splitport",
> @@ -313,3 +312,12 @@ else:
>          "SimpleHTTPRequestHandler",
>          "CGIHTTPRequestHandler",
>      ))
> +
> +    # urllib.parse.quote() accepts both str and bytes, decodes bytes
> +    # (if necessary), and returns str. This is wonky. We provide a custom
> +    # implementation that only accepts bytes and emits bytes.
> +    def quote(s, safe=r'/'):
> +        s = urllib.parse.quote_from_bytes(s, safe=safe)
> +        return s.encode('ascii', 'strict')
> +
> +    urlreq.quote = quote
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20170314/d100fa4a/attachment.html>


More information about the Mercurial-devel mailing list