On Sun, Apr 12, 2009 at 3:23 PM, Jacob Holm <j...@improva.dk> wrote: > Hi Mart > > >>> add_query_params('http://example.com/a/b/c?a=b', b='d', foo='/bar') >> 'http://example.com/a/b/c?a=b&b=d&foo=%2Fbar < >> http://example.com/a/b/c?a=b&b=d&foo=%2Fbar>' >> >> Duplicates are discarded: >> > > Why discard duplicates? They are valid and have a well-defined meaning.
The bad thing about reasoning about query strings is that there is no comprehensive documentation about their meaning. Both RFC 1738 and RFC 3986 are rather vague in that matter. But I agree that duplicates actually have a meaning (an ordered list of identical values), so I'll remove the bits that prune them unless anyone opposes (which I doubt). >> But if a value is given, the empty key is considered a duplicate (i.e. the >> case of a&a=b is considered nonsensical): >> > > Again, it is a valid url and this will change its meaning. Why? I'm uncertain whether a&a=b has a meaning, but don't see any harm in supporting it, so I'll add the feature. >> >>> add_query_params('http://example.com/a/b/c?a', a='b', c=None) >> 'http://example.com/a/b/c?a=b&c <http://example.com/a/b/c?a=b&c>' >> >> If you need to pass in key names that are not allowed in keyword >> arguments, >> pass them via a dictionary in second argument: >> >> >>> add_query_params('foo', {"+'|äüö": 'bar'}) >> 'foo?%2B%27%7C%C3%A4%C3%BC%C3%B6=bar' >> >> Order of original parameters is retained, although similar keys are >> grouped >> together. >> > > Why the grouping? Is it a side effect of your desire to discard > duplicates? Changing the order like that changes the meaning of the url. > A concrete case where the order of field names matters is the ":records" > converter in http://pypi.python.org/pypi/zope.httpform/1.0.1 (a small > independent package extracted from the form handling code in zope). It's also related to duplicate handling, but it mostly relates to the data structure used in the initial implementation (an OrderedDict). Re-grouping is removed now and not having to deal with duplicates simplified the code considerably (using a simple list of key-value tuples now). If you change it to keep duplicates and not unnecessarily mangle the field > order I am +1, else I am -0. Thanks for your input! Changes pushed to github (see the updated behaviour there as well): http://github.com/mrts/qparams/blob/4f32670b55082f8d0ef01c33524145c3264c161a/qparams.py MS
_______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com