classification
Title: Add a function for updating URL query parameters
Type: enhancement Stage: test needed
Components: Library (Lib) Versions: Python 3.5, Python 2.7
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: orsenthil Nosy List: eric.araujo, mrts, orsenthil
Priority: normal Keywords:

Created on 2009-04-29 13:32 by mrts, last changed 2019-03-15 23:18 by BreamoreBoy.

Messages (2)
msg86802 - (view) Author: Mart Sõmermaa (mrts) Date: 2009-04-29 13:32
Proposal
--------

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

Discussion
----------

Python-dev:
http://mail.python.org/pipermail/python-dev/2009-April/088675.html

Previously in Python-ideas:
http://mail.python.org/pipermail/python-ideas/2009-March/003728.html

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

Behaviour
---------

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

Implementation
--------------

http://github.com/mrts/qparams/tree/master
in particular
http://github.com/mrts/qparams/blob/bf1b29ad46f9d848d5609de6de0bfac1200da310/qparams.py

See the docstring in qparams.py 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
http://mail.python.org/pipermail/python-dev/2009-April/088866.html 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'))
'foo?bar=baz'
msg220766 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2014-06-16 21:11
This won't go anywhere without a patch, is the OP willing to provide one?
History
Date User Action Args
2019-03-15 23:18:46BreamoreBoysetnosy: - BreamoreBoy
2014-06-16 21:11:17BreamoreBoysetnosy: + BreamoreBoy

messages: + msg220766
versions: + Python 2.7, Python 3.5, - Python 3.2
2010-11-28 04:51:50eric.araujosetnosy: + eric.araujo
2010-07-10 11:49:27BreamoreBoysetassignee: orsenthil
stage: test needed

nosy: + orsenthil
versions: + Python 3.2, - Python 3.1, Python 2.7
2009-04-29 13:32:13mrtscreate