Skip to content

Commit a5d7e0e

Browse files
committed
Fix oauth2.Request.url and oauth2.Request.to_url so that query parameters from the original URL are not dropped.
1 parent 9833537 commit a5d7e0e

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

oauth2/__init__.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,7 @@ def __init__(self, method=HTTP_METHOD, url=None, parameters=None):
266266

267267
@setter
268268
def url(self, value):
269-
parts = urlparse.urlparse(value)
270-
scheme, netloc, path = parts[:3]
269+
scheme, netloc, path, params, query, fragment = urlparse.urlparse(value)
271270

272271
# Exclude default port numbers.
273272
if scheme == 'http' and netloc[-3:] == ':80':
@@ -278,7 +277,7 @@ def url(self, value):
278277
if scheme != 'http' and scheme != 'https':
279278
raise ValueError("Unsupported URL %s (%s)." % (value, scheme))
280279

281-
value = '%s://%s%s' % (scheme, netloc, path)
280+
value = urlparse.urlunparse((scheme, netloc, path, params, query, fragment))
282281
self.__dict__['url'] = value
283282

284283
@setter
@@ -316,7 +315,14 @@ def to_postdata(self):
316315

317316
def to_url(self):
318317
"""Serialize as a URL for a GET request."""
319-
return '%s?%s' % (self.url, self.to_postdata())
318+
base_url = urlparse.urlparse(self.url)
319+
query = urlparse.parse_qs(base_url.query)
320+
for k, v in self.items():
321+
query.setdefault(k, []).append(v)
322+
url = (base_url.scheme, base_url.netloc, base_url.path, base_url.params,
323+
urllib.urlencode(query, True), base_url.fragment)
324+
print url
325+
return urlparse.urlunparse(url)
320326

321327
def get_parameter(self, parameter):
322328
ret = self.get(parameter)

0 commit comments

Comments
 (0)