New GitHub issue #96381 from xmo-odoo:<br>

<hr>

<pre>
Currently, non-trivial URL manipulations require going back and forth between structured results and utility functions in order to process or manipulate the URL in non-trivial ways (other than entirely replacing one of the attributes).

[`werkzeug.urls`](https://werkzeug.palletsprojects.com/en/2.2.x/urls/) (which started as a cross-version compatibility shim) shows a few utility properties and methods:

- `join`, which performs a Resutl -> Result urljoin
- `decode_query`, which performs a `parse_qs` (-l, kind-of, as werkzeug uses multidicts)
- `ascii_host`, which return a punycode/idna-encoded domain if necessary
- `auth`, which returns the encoded userinfo

The first three are commonly useful, and require a fair amount of syntactic overhead to perform using the stdlib. The 4th would mostly be solved by making `_userinfo` public / stable and documenting it, though a purely textual version could also be useful.

One utility which I think is missing from werkzeug and would also be useful is a shortcut to set/update query string parameters directly, which IME is quite common: looking at a pretty url-heavy codebase, 20~30% of the querystring manipulations are straighforward set-and-forget (the rest is lookups, with a few odd more complicated manipulations of the query string which do need to fully decode and process the result).

As `urllib.parse` already layers a few mixins on top of the base namedtuples, I don't think this would incur significant runtime costs (the helpers could probably be added to existing mixins)
</pre>

<hr>

<a href="https://github.com/python/cpython/issues/96381">View on GitHub</a>
<p>Labels: type-feature</p>
<p>Assignee: </p>