mirror of
https://github.com/python/cpython.git
synced 2025-11-13 15:40:05 +00:00
Convert Unicode strings to byte strings before passing them into specific
protocols. Closes bug #119822.
This commit is contained in:
parent
57657bce94
commit
1d99433a58
1 changed files with 25 additions and 14 deletions
|
|
@ -26,9 +26,9 @@ import string
|
||||||
import socket
|
import socket
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import types
|
||||||
|
|
||||||
|
__version__ = '1.14' # XXX This version is not always updated :-(
|
||||||
__version__ = '1.13' # XXX This version is not always updated :-(
|
|
||||||
|
|
||||||
MAXFTPCACHE = 10 # Trim the ftp cache beyond this size
|
MAXFTPCACHE = 10 # Trim the ftp cache beyond this size
|
||||||
|
|
||||||
|
|
@ -136,23 +136,23 @@ class URLopener:
|
||||||
# External interface
|
# External interface
|
||||||
def open(self, fullurl, data=None):
|
def open(self, fullurl, data=None):
|
||||||
"""Use URLopener().open(file) instead of open(file, 'r')."""
|
"""Use URLopener().open(file) instead of open(file, 'r')."""
|
||||||
fullurl = unwrap(fullurl)
|
fullurl = unwrap(toBytes(fullurl))
|
||||||
if self.tempcache and self.tempcache.has_key(fullurl):
|
if self.tempcache and self.tempcache.has_key(fullurl):
|
||||||
filename, headers = self.tempcache[fullurl]
|
filename, headers = self.tempcache[fullurl]
|
||||||
fp = open(filename, 'rb')
|
fp = open(filename, 'rb')
|
||||||
return addinfourl(fp, headers, fullurl)
|
return addinfourl(fp, headers, fullurl)
|
||||||
type, url = splittype(fullurl)
|
urltype, url = splittype(fullurl)
|
||||||
if not type:
|
if not urltype:
|
||||||
type = 'file'
|
urltype = 'file'
|
||||||
if self.proxies.has_key(type):
|
if self.proxies.has_key(urltype):
|
||||||
proxy = self.proxies[type]
|
proxy = self.proxies[urltype]
|
||||||
type, proxyhost = splittype(proxy)
|
urltype, proxyhost = splittype(proxy)
|
||||||
host, selector = splithost(proxyhost)
|
host, selector = splithost(proxyhost)
|
||||||
url = (host, fullurl) # Signal special case to open_*()
|
url = (host, fullurl) # Signal special case to open_*()
|
||||||
else:
|
else:
|
||||||
proxy = None
|
proxy = None
|
||||||
name = 'open_' + type
|
name = 'open_' + urltype
|
||||||
self.type = type
|
self.type = urltype
|
||||||
if '-' in name:
|
if '-' in name:
|
||||||
# replace - with _
|
# replace - with _
|
||||||
name = string.join(string.split(name, '-'), '_')
|
name = string.join(string.split(name, '-'), '_')
|
||||||
|
|
@ -183,7 +183,7 @@ class URLopener:
|
||||||
def retrieve(self, url, filename=None, reporthook=None, data=None):
|
def retrieve(self, url, filename=None, reporthook=None, data=None):
|
||||||
"""retrieve(url) returns (filename, None) for a local object
|
"""retrieve(url) returns (filename, None) for a local object
|
||||||
or (tempfilename, headers) for a remote object."""
|
or (tempfilename, headers) for a remote object."""
|
||||||
url = unwrap(url)
|
url = unwrap(toBytes(url))
|
||||||
if self.tempcache and self.tempcache.has_key(url):
|
if self.tempcache and self.tempcache.has_key(url):
|
||||||
return self.tempcache[url]
|
return self.tempcache[url]
|
||||||
type, url1 = splittype(url)
|
type, url1 = splittype(url)
|
||||||
|
|
@ -238,7 +238,7 @@ class URLopener:
|
||||||
"""Use HTTP protocol."""
|
"""Use HTTP protocol."""
|
||||||
import httplib
|
import httplib
|
||||||
user_passwd = None
|
user_passwd = None
|
||||||
if type(url) is type(""):
|
if type(url) is types.StringType:
|
||||||
host, selector = splithost(url)
|
host, selector = splithost(url)
|
||||||
if host:
|
if host:
|
||||||
user_passwd, host = splituser(host)
|
user_passwd, host = splituser(host)
|
||||||
|
|
@ -313,7 +313,7 @@ class URLopener:
|
||||||
"""Use HTTPS protocol."""
|
"""Use HTTPS protocol."""
|
||||||
import httplib
|
import httplib
|
||||||
user_passwd = None
|
user_passwd = None
|
||||||
if type(url) is type(""):
|
if type(url) in types.StringTypes:
|
||||||
host, selector = splithost(url)
|
host, selector = splithost(url)
|
||||||
if host:
|
if host:
|
||||||
user_passwd, host = splituser(host)
|
user_passwd, host = splituser(host)
|
||||||
|
|
@ -852,6 +852,17 @@ def basejoin(base, url):
|
||||||
# unquote('abc%20def') -> 'abc def'
|
# unquote('abc%20def') -> 'abc def'
|
||||||
# quote('abc def') -> 'abc%20def')
|
# quote('abc def') -> 'abc%20def')
|
||||||
|
|
||||||
|
def toBytes(url):
|
||||||
|
"""toBytes(u"URL") --> 'URL'."""
|
||||||
|
# Most URL schemes require ASCII. If that changes, the conversion
|
||||||
|
# can be relaxed
|
||||||
|
if type(url) is types.UnicodeType:
|
||||||
|
try:
|
||||||
|
url = url.encode("ASCII")
|
||||||
|
except UnicodeError:
|
||||||
|
raise UnicodeError("URL "+repr(url)+" contains non-ASCII characters")
|
||||||
|
return url
|
||||||
|
|
||||||
def unwrap(url):
|
def unwrap(url):
|
||||||
"""unwrap('<URL:type://host/path>') --> 'type://host/path'."""
|
"""unwrap('<URL:type://host/path>') --> 'type://host/path'."""
|
||||||
url = string.strip(url)
|
url = string.strip(url)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue