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