Преобразовать имя файла в файл :// URL

В общедоступном API WeasyPrint я принимаю имена файлов (среди других типов )для ввода HTML. Любое имя файла, которое работает со встроенным -в open(), должно работать, но мне нужно преобразовать его в URL-адрес в схеме file://, который позже будет передан в urllib.urlopen().

(Внутри все находится в форме URL. Мне нужно иметь «базовый URL» для документов, чтобы разрешать относительные ссылки URL с помощью urlparse.urljoin().)

urllib.pathname2url — это начало:

Convert the pathname path from the local syntax for a path to the form used in the path component of a URL. This does not produce a complete URL. The return value will already be quoted using the quote() function.

Акцент сделан на мне, но мне нужен полный URL. Пока это работает:

def path2url(path):
    """Return file:// URL from a filename."""
    path = os.path.abspath(path)
    if isinstance(path, unicode):
        path = path.encode('utf8')
    return 'file:' + urlparse.pathname2url(path)

UTF -8 рекомендуется RFC 3987 (IRI). Но в этом случае ( URL предназначен для urllib, в конечном итоге )возможно, мне следует использовать sys.getfilesystemencoding()?

Однако, основываясь на литературе , я должен добавлять не только file:, но и file://... за исключением случаев, когда я не должен :В Windows результаты nturl2path.pathname2url()уже начинаются с трех косых черт.

Итак, вопрос :в том, есть ли лучший способ сделать это и сделать его кроссплатформенным -?

38
задан Simon Sapin 27 July 2012 в 12:08
поделиться