mirror of
https://github.com/python/cpython.git
synced 2024-11-29 21:05:33 +08:00
Fix handling of file inputs on Windows; passing them to urllib.urlopen()
caused the drive letter to cause urlopen() to think it was an unrecognized URL scheme. This only passes system ids to urlopen() if the file does not exist. It works on Windows & Unix. It should work everywhere else as well.
This commit is contained in:
parent
1bac645d8f
commit
0872e05851
@ -198,14 +198,16 @@ def prepare_input_source(source, base = ""):
|
||||
source = xmlreader.InputSource(source)
|
||||
source.setByteStream(f)
|
||||
|
||||
if source.getByteStream() == None:
|
||||
if source.getByteStream() is None:
|
||||
sysid = source.getSystemId()
|
||||
if urlparse.urlparse(sysid)[0] == '':
|
||||
if os.path.isfile(sysid):
|
||||
basehead = os.path.split(os.path.normpath(base))[0]
|
||||
source.setSystemId(os.path.join(basehead, sysid))
|
||||
f = open(sysid, "rb")
|
||||
else:
|
||||
source.setSystemId(urlparse.urljoin(base, sysid))
|
||||
f = urllib.urlopen(source.getSystemId())
|
||||
|
||||
source.setByteStream(urllib.urlopen(source.getSystemId()))
|
||||
source.setByteStream(f)
|
||||
|
||||
return source
|
||||
|
Loading…
Reference in New Issue
Block a user