Export des résultats en JSON
This commit is contained in:
46
nupes/cache.py
Normal file
46
nupes/cache.py
Normal file
@ -0,0 +1,46 @@
|
||||
from pathlib import Path
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
CACHE_DIR = Path(__file__).parent / 'cache'
|
||||
|
||||
|
||||
def get_file(url, filename, force_etag: str = ""):
|
||||
if not CACHE_DIR.is_dir():
|
||||
CACHE_DIR.mkdir(parents=True)
|
||||
|
||||
file_dir = CACHE_DIR / filename
|
||||
if not file_dir.is_dir():
|
||||
file_dir.mkdir(parents=True)
|
||||
|
||||
symlink_file = file_dir / 'latest'
|
||||
|
||||
etag = ""
|
||||
if symlink_file.exists():
|
||||
file = symlink_file.resolve()
|
||||
etag = file.name
|
||||
|
||||
response = requests.get(url, headers={"If-None-Match": f'"{etag}'}, allow_redirects=True)
|
||||
if response.status_code == 404:
|
||||
print(url)
|
||||
return None
|
||||
response.raise_for_status()
|
||||
if response.status_code != 304:
|
||||
if force_etag:
|
||||
etag = force_etag
|
||||
else:
|
||||
etag = response.headers.get('ETag').split('/')[-1].replace('"', '')
|
||||
|
||||
if symlink_file.exists():
|
||||
symlink_file.resolve().unlink()
|
||||
|
||||
file = file_dir / etag
|
||||
|
||||
with file.open('wb') as f:
|
||||
f.write(response.content)
|
||||
|
||||
symlink_file.unlink(missing_ok=True)
|
||||
symlink_file.symlink_to(file)
|
||||
|
||||
return symlink_file
|
Reference in New Issue
Block a user