297 return u'%s%s?%s' % (base_url, path, self.build_url_params(**kwargs)) |
297 return u'%s%s?%s' % (base_url, path, self.build_url_params(**kwargs)) |
298 |
298 |
299 def build_url_params(self, **kwargs): |
299 def build_url_params(self, **kwargs): |
300 """return encoded params to incorporate them in a URL""" |
300 """return encoded params to incorporate them in a URL""" |
301 args = [] |
301 args = [] |
302 for param, values in kwargs.iteritems(): |
302 for param, values in kwargs.items(): |
303 if not isinstance(values, (list, tuple)): |
303 if not isinstance(values, (list, tuple)): |
304 values = (values,) |
304 values = (values,) |
305 for value in values: |
305 for value in values: |
306 assert value is not None |
306 assert value is not None |
307 args.append(u'%s=%s' % (param, self.url_quote(value))) |
307 args.append(u'%s=%s' % (param, self.url_quote(value))) |
350 if isinstance(url, unicode): |
350 if isinstance(url, unicode): |
351 url = url.encode(self.encoding) |
351 url = url.encode(self.encoding) |
352 schema, netloc, path, query, fragment = urlsplit(url) |
352 schema, netloc, path, query, fragment = urlsplit(url) |
353 query = parse_qs(query) |
353 query = parse_qs(query) |
354 # sort for testing predictability |
354 # sort for testing predictability |
355 for key, val in sorted(newparams.iteritems()): |
355 for key, val in sorted(newparams.items()): |
356 query[key] = (self.url_quote(val),) |
356 query[key] = (self.url_quote(val),) |
357 query = '&'.join(u'%s=%s' % (param, value) |
357 query = '&'.join(u'%s=%s' % (param, value) |
358 for param, values in sorted(query.items()) |
358 for param, values in sorted(query.items()) |
359 for value in values) |
359 for value in values) |
360 return urlunsplit((schema, netloc, path, query, fragment)) |
360 return urlunsplit((schema, netloc, path, query, fragment)) |