diff -r 5a14e0a85e3b Lib/test/test_urllib2.py --- a/Lib/test/test_urllib2.py Tue Apr 23 15:46:24 2013 -0700 +++ b/Lib/test/test_urllib2.py Tue Apr 23 15:53:10 2013 -0700 @@ -11,6 +11,7 @@ # The proxy bypass method imported below has logic specific to the OSX # proxy config data structure but is testable on all platforms. from urllib.request import Request, OpenerDirector, _proxy_bypass_macosx_sysconf +from urllib.parse import urlparse import urllib.error # XXX @@ -919,7 +920,13 @@ r = Request('http://example.com') for url in urls: r.full_url = url + parsed = urlparse(url) + self.assertEqual(r.get_full_url(), url) + # splittag and urlparse are inconsistent: splittag will set the + # fragment to None, while urlparse will set it to an empty string. + self.assertEqual(r.fragment or '', parsed.fragment) + self.assertEqual(urlparse(r.get_full_url()).query, parsed.query) def test_full_url_deleter(self): r = Request('http://www.example.com') diff -r 5a14e0a85e3b Lib/urllib/request.py --- a/Lib/urllib/request.py Tue Apr 23 15:46:24 2013 -0700 +++ b/Lib/urllib/request.py Tue Apr 23 15:53:10 2013 -0700 @@ -275,6 +275,8 @@ @property def full_url(self): + if self.fragment: + return '{}#{}'.format(self._full_url, self.fragment) return self._full_url @full_url.setter @@ -326,8 +328,6 @@ return "GET" def get_full_url(self): - if self.fragment: - return '{}#{}'.format(self.full_url, self.fragment) return self.full_url def set_proxy(self, host, type):