[Python-checkins] cpython (merge 3.2 -> default): merge from 3.2

senthil.kumaran python-checkins at python.org
Wed Apr 13 01:26:17 CEST 2011


http://hg.python.org/cpython/rev/f54337b9a74a
changeset: 69286:f54337b9a74a
parent: 69281:69573aab3ea7
parent: 69285:2924d01e31ad
user: Senthil Kumaran <orsenthil at gmail.com>
date: Wed Apr 13 07:24:32 2011 +0800
summary:
 merge from 3.2
files:
 Lib/test/test_urllib.py | 10 ++++++++++
 Lib/test/test_urllib2.py | 15 ++++++++++++++-
 Lib/test/test_urllib2net.py | 2 +-
 Lib/urllib/request.py | 9 ++++++---
 4 files changed, 31 insertions(+), 5 deletions(-)
diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
--- a/Lib/test/test_urllib.py
+++ b/Lib/test/test_urllib.py
@@ -175,6 +175,16 @@
 finally:
 self.unfakehttp()
 
+ def test_url_fragment(self):
+ # Issue #11703: geturl() omits fragments in the original URL.
+ url = 'http://docs.python.org/library/urllib.html#OK'
+ self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello!")
+ try:
+ fp = urllib.request.urlopen(url)
+ self.assertEqual(fp.geturl(), url)
+ finally:
+ self.unfakehttp()
+
 def test_willclose(self):
 self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello!")
 try:
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -1070,6 +1070,15 @@
 o.open("http://www.example.com/")
 self.assertFalse(hh.req.has_header("Cookie"))
 
+ def test_redirect_fragment(self):
+ redirected_url = 'http://www.example.com/index.html#OK\r\n\r\n'
+ hh = MockHTTPHandler(302, 'Location: ' + redirected_url)
+ hdeh = urllib.request.HTTPDefaultErrorHandler()
+ hrh = urllib.request.HTTPRedirectHandler()
+ o = build_test_opener(hh, hdeh, hrh)
+ fp = o.open('http://www.example.com')
+ self.assertEqual(fp.geturl(), redirected_url.strip())
+
 def test_proxy(self):
 o = OpenerDirector()
 ph = urllib.request.ProxyHandler(dict(http="proxy.example.com:3128"))
@@ -1385,12 +1394,16 @@
 req = Request("<URL:http://www.python.org>")
 self.assertEqual("www.python.org", req.get_host())
 
- def test_urlwith_fragment(self):
+ def test_url_fragment(self):
 req = Request("http://www.python.org/?qs=query#fragment=true")
 self.assertEqual("/?qs=query", req.get_selector())
 req = Request("http://www.python.org/#fun=true")
 self.assertEqual("/", req.get_selector())
 
+ # Issue 11703: geturl() omits fragment in the original URL.
+ url = 'http://docs.python.org/library/urllib2.html#OK'
+ req = Request(url)
+ self.assertEqual(req.get_full_url(), url)
 
 def test_main(verbose=None):
 from test import test_urllib2
diff --git a/Lib/test/test_urllib2net.py b/Lib/test/test_urllib2net.py
--- a/Lib/test/test_urllib2net.py
+++ b/Lib/test/test_urllib2net.py
@@ -159,7 +159,7 @@
 req = urllib.request.Request(urlwith_frag)
 res = urllib.request.urlopen(req)
 self.assertEqual(res.geturl(),
- "http://docs.python.org/glossary.html")
+ "http://docs.python.org/glossary.html#glossary")
 
 def test_custom_headers(self):
 url = "http://www.example.com"
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -180,7 +180,7 @@
 origin_req_host=None, unverifiable=False):
 # unwrap('<URL:type://host/path>') --> 'type://host/path'
 self.full_url = unwrap(url)
- self.full_url, fragment = splittag(self.full_url)
+ self.full_url, self.fragment = splittag(self.full_url)
 self.data = data
 self.headers = {}
 self._tunnel_host = None
@@ -219,7 +219,10 @@
 return self.data
 
 def get_full_url(self):
- return self.full_url
+ if self.fragment:
+ return '%s#%s' % (self.full_url, self.fragment)
+ else:
+ return self.full_url
 
 def get_type(self):
 return self.type
@@ -1135,7 +1138,7 @@
 except socket.error as err:
 raise URLError(err)
 
- r.url = req.full_url
+ r.url = req.get_full_url()
 # This line replaces the .msg attribute of the HTTPResponse
 # with .headers, because urllib clients expect the response to
 # have the reason in .msg. It would be good to mark this
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /