From: Fred Drake Date: Tue, 26 Sep 2000 17:23:09 +0000 (+0000) Subject: Fix handling of file inputs on Windows; passing them to urllib.urlopen() X-Git-Tag: v2.0b2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0872e0585196a894c8c2c2dbea1a0fdd68391c90;p=thirdparty%2FPython%2Fcpython.git 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. --- diff --git a/Lib/xml/sax/saxutils.py b/Lib/xml/sax/saxutils.py index 3f130f3af590..a25b41f09637 100644 --- a/Lib/xml/sax/saxutils.py +++ b/Lib/xml/sax/saxutils.py @@ -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