Как я могу использовать стандартную библиотеку Python для получения файлового объекта, молчаливо обеспечивая его актуальность из какого-либо другого места?Доступ к локальному файлу, но убедитесь, что он обновлен
Программа, над которой я работаю, нуждается в доступе к набору файлов локально; это только обычные файлы.
Но эти файлы являются локальными кешированными копиями документов, доступных на удаленных URL-адресах - каждый файл имеет канонический URL-адрес для содержимого этого файла.
(я пишу здесь о HTTP URL-адресе, но я ищу решение, которое не относится к какому-либо конкретному протоколу удаленного кокетливому.)
Я хотел бы получить API для «get_file_from_cache», что выглядит как:
file_urls = {
"/path/to/foo.txt": "http://example.org/spam/",
"other/path/bar.data": "https://example.net/beans/flonk.xml",
}
for (filename, url) in file_urls.items():
infile = get_file_from_cache(filename, canonical=url)
do_stuff_with(infile.read())
Если изменение метка время локального файла не существенно раньше, чем
Last-Modified
метки времени для документа на соответствующем URL,get_file_from_cache
просто возвращает объект файла без изменения файла.Локальный файл может устареть (его модификация метка может быть значительно старше, чем
Last-Modified
метки времени от соответствующего URL). В этом случаеget_file_from_cache
должен сначала прочитать содержимое документа в файл, а затем вернуть файл .Возможно, локальный файл еще не существует. В этом случае
get_file_from_cache
должен сначала прочитать содержимое документа с соответствующего URL-адреса, создать локальный файл, а затем вернуть объект файла.Удаленный URL-адрес может быть недоступен по какой-либо причине. В этом случае
get_file_from_cache
должен просто вернуть файл-объект, или если не может быть выполнен, поднимите ошибку.
Так что это похоже на кеш объектов HTTP. За исключением тех случаев, когда эти , как правило, связаны URL-адресами с локальными файлами, скрытая реализация , мне нужен API , который фокусируется на локальных файлах, а удаленный запрашивает скрытую деталь реализации.
Что-то вроде этого существует в библиотеке Python или как простой код с его помощью? С или без специфики HTTP и URL-адресов существует ли какой-то рецепт общего кэширования уже , реализованный со стандартной библиотекой?
Этот локальный кэш файл (игнорируя spcifics из URL-адресов и доступа к сети) кажется, точно такую вещь, которая легко ошибиться в множество способов, и поэтому они должны иметь одну очевидную реализацию доступной.
Мне повезло? Что вы посоветуете?
Посмотрите на [ETag] (https://en.wikipedia.org/wiki/HTTP_ETag) , – User
@User: Это может сработать, если сайты, которые bignose хотят получить доступ, делают правильные вещи со своими etags. OTOH, он не против, если кешированная версия немного устарела, и etags не могут с этим поделать. –