Files
ComfyAssets-ComfyUI_PromptM…/tests/fake_trash.py
T
Vito Sansevero ad392a99a7 feat(images): review and apply Delete images as a reviewed plan job (#480)
POST /prompt_manager/images/delete/preview reviews both modes; the
maintenance apply takes {token, mode}. Library mode removes the records and
writes the removal mark; trash mode moves the file first and removes its
records only after a successful move. The workspace listing, the output scan,
the duplicate find and Tag output images skip marked files.
2026-10-29 10:03:49 -07:00

53 lines
1.5 KiB
Python

"""A fake system trash for tests (#480): renames into a folder outside every root.
``install(folder)`` replaces ``utils.trash.BACKEND`` and returns the fake;
``uninstall`` puts the real one back. ``refuse[path] = code`` refuses one
file with that code. The fake never copies or unlinks; it records each call.
The disposable browser server installs it when ``PM_TEST_FAKE_TRASH=1``, so
no test touches a real trash.
"""
import os
from utils import trash
class FakeTrash:
def __init__(self, folder):
self.folder = str(folder)
os.makedirs(self.folder, exist_ok=True)
self.refuse = {}
self.moved = [] # (source, destination)
self.calls = []
def available(self, path, roots):
self.calls.append(("available", str(path)))
return self.refuse.get(str(path))
def move(self, path, roots):
self.calls.append(("move", str(path)))
code = self.refuse.get(str(path))
if code:
raise trash.TrashRefused(code)
destination = os.path.join(
self.folder, f"{len(self.moved)}-{os.path.basename(path)}"
)
if os.path.lexists(destination):
raise trash.TrashRefused(trash.FAILED)
os.rename(path, destination)
self.moved.append((str(path), destination))
return "fake trash"
_ORIGINAL = trash.BACKEND
def install(folder):
fake = FakeTrash(folder)
trash.BACKEND = fake
return fake
def uninstall():
trash.BACKEND = _ORIGINAL