[reportlab-users] open_for_read and Window file paths

Robin Becker reportlab-users@reportlab.com
Thu, 03 Jun 2004 08:59:56 +0100

Eric Johnson wrote:
> In the 2nd June CVS release there seems to be a bug in the
> open_for_read utility in lib/utils.py
> The code parses a potential filename using urlparse.
> If the "scheme" field is non-empty then it attempts
> to open filename using urlopen.
> Any exceptions are trapped and then the "path" field
> is opened using open_for_read_by_name method.
> Unfortunately, this fails with Windows type paths since the drive
> name is interpreted as a scheme and then the urlopen raises an
> exception because it does not recognise the url type.
> This would be ok except the open_for_read_by_name is given the path
> field without the drive!
> I ran into this problem when trying to use the Comic TTF font in
> C:/WIN98/Fonts.
> urlopen doesn't like 'c' as a url type
> and then the code tries to open "\\Win98\\fonts\\comic.ttf" which
> fails because my current drive was d: not c:
> To fix this it would seem best to compare the "scheme" against a list
> of values rather than just assuming a non-empty value is valid.
> Hope this all makes sense.
> Eric

too much sense. This is a running sore. Theoretically we should be only 
be using file: for local files, but that's probably too much of a pain 
for most people.

When urlopen fails we should certainly fall back to using the full name.
Can anyone think of a reliable rule for legal schemes that we should allow?
Robin Becker