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 (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)
The text was updated successfully, but these errors were encountered:
xmo-odoo commentedAug 29, 2022
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(which started as a cross-version compatibility shim) shows a few utility properties and methods:join, which performs a Resutl -> Result urljoindecode_query, which performs aparse_qs(-l, kind-of, as werkzeug uses multidicts)ascii_host, which return a punycode/idna-encoded domain if necessaryauth, which returns the encoded userinfoThe 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
_userinfopublic / 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.parsealready 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)The text was updated successfully, but these errors were encountered: