Author mrts
Recipients mrts
Date 2009-04-29.13:32:11
SpamBayes Score 3.10751e-13
Marked as misclassified No
Message-id <>

Add update_query_params() for updating or adding URL query parameters to
urllib.parse and urlparse.



Previously in Python-ideas:

The consensus seems to be that this is needed, opinions on how the API
should look like vary.


The following features were requested by different people:
- ability to order parameters (by passing them in a ordered data structure)
- "plain" behaviour that would keep the existing parameters as is and
add passed in parameters, retaining duplicates
- behaviour that removes duplicated values
- dict.update()-like behaviour that would not allow duplicate keys
(updating values for existing keys)
- removal of existing parameters

in particular

See the docstring in for 

Currently, positional arguments are used to avoid name collisions in
keyword arguments that were initially devised as the default, easy way
to pass parameters. As the function signature has grown quite complex,
this looks suboptimal.

Also, the general sentiment was that the current three-valued logic for
choosing key update strategy is also suboptimal. Instead, the strategy
should be passed via a function and the strategies listed above should
be provided in the module.

Finally, removing keys is currently missing. It was proposed that
passing foo=None would remove the parameter foo. Currently, None is used
to mark parameters that do not take values, another marker is needed for
that if removal is to be marked with None.

Following on Nick Coghlan's suggestion in and
considering the preference for a strategy function, the API could look
as follows:

def add_query_params(url, params, strategy=allow_dulicates, sep='&')

I.e. keyword arguments would not be supported and the "default" use
would be as follows:

>>> add_query_params('foo', dict(bar='baz'))
Date User Action Args
2009-04-29 13:32:15mrtssetrecipients: + mrts
2009-04-29 13:32:15mrtssetmessageid: <>
2009-04-29 13:32:13mrtslinkissue5877 messages
2009-04-29 13:32:11mrtscreate