[New-bugs-announce] [issue17272] request.full_url: unexpected results on assignment
Demian Brecht
report at bugs.python.org
Fri Feb 22 06:56:42 CET 2013
New submission from Demian Brecht:
When assigning a value to an already instantiated Request object's full_url, unexpected results are found as a consequence in the attributes selector, type and fragment. Selector, type and fragment are only assigned to during instantiation. Unless you know to call Request._parse() after assignment to Request.full_url, the other attributes will not be reassigned new values.
The attached patch changes full_url to be a @property, essentially moving what was going on in the constructor into the property method(s). All tests pass.
I ran into this issue when working on an OAuth 2.0 client library when attempting to mutate an already instantiated Request object, injecting the access_token into the query params.
Sandboxed code to repro the issue below:
In [1]: from urllib.request import Request
In [2]: r = Request('https://example.com?foo=bar#baz')
# as expected
In [4]: r.__dict__
Out[4]:
{'_data': None,
'_tunnel_host': None,
'fragment': 'baz',
'full_url': 'https://example.com?foo=bar',
'headers': {},
'host': 'example.com',
'method': None,
'origin_req_host': 'example.com',
'selector': '/?foo=bar',
'type': 'https',
'unredirected_hdrs': {},
'unverifiable': False}
In [5]: r.full_url = 'https://example.com?foo=bar&access_token=token_value#baz'
# unexpected results in selector
In [6]: r.__dict__
Out[6]:
{'_data': None,
'_tunnel_host': None,
'fragment': 'baz',
'full_url': 'https://example.com?foo=bar&access_token=token_value#baz',
'headers': {},
'host': 'example.com',
'method': None,
'origin_req_host': 'example.com',
'selector': '/?foo=bar',
'type': 'https',
'unredirected_hdrs': {},
'unverifiable': False}
In [7]: Request('https://example.com?foo=bar&access_token=token_value#baz')
Out[7]: <urllib.request.Request at 0x10ef6ce90>
# these results should match that of the full_url setter
In [8]: Request('https://example.com?foo=bar&access_token=token_value#baz').__dict__
Out[8]:
{'_data': None,
'_tunnel_host': None,
'fragment': 'baz',
'full_url': 'https://example.com?foo=bar&access_token=token_value',
'headers': {},
'host': 'example.com',
'method': None,
'origin_req_host': 'example.com',
'selector': '/?foo=bar&access_token=token_value',
'type': 'https',
'unredirected_hdrs': {},
'unverifiable': False}
----------
components: Library (Lib)
files: request.patch
keywords: patch
messages: 182642
nosy: dbrecht
priority: normal
severity: normal
status: open
title: request.full_url: unexpected results on assignment
versions: Python 3.4
Added file: http://bugs.python.org/file29156/request.patch
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue17272>
_______________________________________
More information about the New-bugs-announce
mailing list