[Python-Dev] [Python-ideas] Proposed addtion to urllib.parse in 3.1 (and urlparse in 2.7) (original) (raw)

Steven Bethard steven.bethard at gmail.com
Mon Apr 13 19:23:45 CEST 2009


On Mon, Apr 13, 2009 at 2:29 AM, Mart Sõmermaa <mrts.pydev at gmail.com> wrote:

On Mon, Apr 13, 2009 at 12:56 AM, Antoine Pitrou <solipsis at pitrou.net> wrote:

Mart Sõmermaa <mrts.pydev gmail.com> writes: > > Proposal: add addqueryparams() for appending query parameters to an > URL to urllib.parse and urlparse. Is there anything to /remove/ a query parameter? I'd say this is outside the scope of addqueryparams(). As for the duplicate handling, I've implemented a threefold strategy that should address all use cases raised before:  def addqueryparams(*args, **kwargs): """ addqueryparms(url, [allowdups, [argsdict, [separator]]], **kwargs) Appends query parameters to an URL and returns the result. :param url: the URL to update, a string. :param allowdups: if * True: plainly append new parameters, allowing all duplicates (default), * False: disallow duplicates in values and regroup keys so that different values for the same key are adjacent, * None: disallow duplicates in keys -- each key can have a single value and later values override the value (like dict.update()).

Unnamed flag parameters are unfriendly to the reader. If I see something like:

add_query_params(url, True, dict(a=b, c=d))

I can pretty much guess what the first and third arguments are, but I have no clue for the second. Even if I have read the documentation before, I may not remember whether the middle argument is "allow_dups" or "keep_dups".

Steve

:param argsdict: optional dictionary of parameters, default is {}. :param separator: either ';' or '&', the separator between key-value pairs, default is '&'. :param kwargs: parameters as keyword arguments.

:return: original URL with updated query parameters or the original URL unchanged if no parameters given. """ The commit is http://github.com/mrts/qparams/blob/b9bdbec46bf919d142ff63e6b2b822b5d57b6f89/qparams.py extensive description of the behaviour is in the doctests.



More information about the Python-Dev mailing list