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:
Fred Drake 2000-09-26 17:23:09 +00:00
parent 1bac645d8f
commit 0872e05851
1 changed files with 5 additions and 3 deletions

View File

@ -198,14 +198,16 @@ def prepare_input_source(source, base = ""):
source = xmlreader.InputSource(source) source = xmlreader.InputSource(source)
source.setByteStream(f) source.setByteStream(f)
if source.getByteStream() == None: if source.getByteStream() is None:
sysid = source.getSystemId() sysid = source.getSystemId()
if urlparse.urlparse(sysid)[0] == '': if os.path.isfile(sysid):
basehead = os.path.split(os.path.normpath(base))[0] basehead = os.path.split(os.path.normpath(base))[0]
source.setSystemId(os.path.join(basehead, sysid)) source.setSystemId(os.path.join(basehead, sysid))
f = open(sysid, "rb")
else: else:
source.setSystemId(urlparse.urljoin(base, sysid)) source.setSystemId(urlparse.urljoin(base, sysid))
f = urllib.urlopen(source.getSystemId())
source.setByteStream(urllib.urlopen(source.getSystemId())) source.setByteStream(f)
return source return source