phc: get_assets refactor (no need to copy assets)

This commit is contained in:
Dmitry Belyaev 2024-04-02 14:09:15 +03:00
parent c788c311b1
commit b425c4d7e6

View File

@ -22,7 +22,6 @@
""" """
import os import os
import shutil
import tempfile import tempfile
import urllib.request import urllib.request
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
@ -70,29 +69,34 @@ def make_stub_image(path, name):
@contextmanager @contextmanager
def get_assets(names): def get_assets(names):
"""Получение соответствия с расположением файлов картинок """Получение соответствия с расположением файлов картинок"""
Размер картинок нужно менять поэтому они всегда сохраняются во временные файлы.
"""
assets_dir = "assets" assets_dir = "assets"
files = {} files = {}
# поиск файлов (загрузка если их нет) и создание временных tempfiles = []
for asset in names: for asset in names:
_, ext = os.path.splitext(asset) # поиск файлов
temppath = tempfile.mktemp(suffix=ext)
filepath = os.path.join(assets_dir, asset) filepath = os.path.join(assets_dir, asset)
if os.path.isfile(filepath): if os.path.isfile(filepath):
shutil.copyfile(filepath, temppath) files[asset] = filepath
else: continue
if not download_asset(asset, temppath):
make_stub_image(temppath, asset) # создание временного файла
_, ext = os.path.splitext(asset)
fd, temppath = tempfile.mkstemp(suffix=ext)
os.close(fd)
tempfiles.append(temppath)
# попытка загрузки, если не получилось то создание заглушки
if not download_asset(asset, temppath):
make_stub_image(temppath, asset)
files[asset] = temppath files[asset] = temppath
# передача управления # передача управления
yield files yield files
# очистка # очистка
for _, filename in files.items(): del files
for filename in tempfiles:
try: try:
os.remove(filename) os.remove(filename)
except FileNotFoundError: except FileNotFoundError: