diff --git a/mod_pygame/phantom_castle.py b/mod_pygame/phantom_castle.py index 5284d80..081dcae 100644 --- a/mod_pygame/phantom_castle.py +++ b/mod_pygame/phantom_castle.py @@ -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: