POST /review/items/{id}/link needs a capture of the item's bytes. A capture is refused for a path in a trash folder, and a capture taken earlier stops working when its file moves to a trash folder or its folder becomes a link to one, so no code change is needed. The decision route takes the same path, so it moves to the same audit group.
213 lines
9.6 KiB
Python
213 lines
9.6 KiB
Python
"""Every /prompt_manager route and how it treats a file in a trash folder (#543).
|
|
|
|
``tests/test_trash_gate_routes.py`` fails when a route is missing here, so a new
|
|
route has to choose a group. ``FILE_READER_CALLS`` is the same idea for code that
|
|
opens files in ``py/api``.
|
|
"""
|
|
|
|
FILE_READER_CALLS = ("FileResponse(", "Image.open(", "os.open(", "read_bytes(")
|
|
|
|
KNOWN_FILE_READERS = frozenset(
|
|
{
|
|
"history_current.py:os.open(",
|
|
"images.py:FileResponse(",
|
|
"images.py:Image.open(",
|
|
"images.py:os.open(",
|
|
"__init__.py:Image.open(",
|
|
"logging_routes.py:os.open(",
|
|
"thumbnail_auto.py:FileResponse(",
|
|
"thumbnail_encode.py:Image.open(",
|
|
}
|
|
)
|
|
|
|
ROUTE_AUDIT = {
|
|
"gate: _media_access_error, resolved": (
|
|
"GET /prompt_manager/images/{image_id}/file",
|
|
"GET /prompt_manager/images/inspect/{image_path}",
|
|
"POST /prompt_manager/images/reveal",
|
|
"POST /prompt_manager/images/link",
|
|
"POST /prompt_manager/images/rescope",
|
|
"GET /prompt_manager/library/{positive_id}/images",
|
|
"GET /prompt_manager/library/{positive_id}",
|
|
"GET /prompt_manager/library",
|
|
),
|
|
"in_trash_below_roots, resolved": (
|
|
"GET /prompt_manager/images/serve/{filepath}",
|
|
"POST /prompt_manager/autotag/single",
|
|
"POST /prompt_manager/autotag/apply",
|
|
"GET /prompt_manager/history/runs/{run_id}/outputs",
|
|
"GET /prompt_manager/history/runs/{run_id}/output/current/media",
|
|
"GET /prompt_manager/history/runs/{run_id}/output/current/thumbnail",
|
|
"GET /prompt_manager/history/runs/{run_id}/output/current/inspection",
|
|
"POST /prompt_manager/delete_duplicate_images",
|
|
),
|
|
"media_target by name, then the capture alias check or listed files": (
|
|
"POST /prompt_manager/image-annotations/observe",
|
|
"POST /prompt_manager/image-annotations/suggest",
|
|
"PUT /prompt_manager/image-annotations/tags",
|
|
"GET /prompt_manager/image-annotations/capture/{token}",
|
|
"DELETE /prompt_manager/image-annotations/capture/{token}",
|
|
"POST /prompt_manager/jobs/image-tags",
|
|
"POST /prompt_manager/collections/items",
|
|
"DELETE /prompt_manager/collections/items",
|
|
"GET /prompt_manager/collections/membership",
|
|
"PUT /prompt_manager/images/category",
|
|
"DELETE /prompt_manager/images/category",
|
|
"POST /prompt_manager/review/items/{item_id}/decision",
|
|
"POST /prompt_manager/review/items/{item_id}/link",
|
|
),
|
|
"walker: utils/media_folders (listed files only)": (
|
|
"GET /prompt_manager/images/output",
|
|
"POST /prompt_manager/gallery/rescan",
|
|
"GET /prompt_manager/gallery/subfolders",
|
|
"PUT /prompt_manager/images/favorite",
|
|
"DELETE /prompt_manager/images/favorite",
|
|
"GET /prompt_manager/images/categories",
|
|
"POST /prompt_manager/images/delete/preview",
|
|
"POST /prompt_manager/images/removed/return",
|
|
"POST /prompt_manager/scan",
|
|
"POST /prompt_manager/jobs/scan",
|
|
"GET /prompt_manager/scan_duplicates",
|
|
"POST /prompt_manager/scan_duplicates/stream",
|
|
"POST /prompt_manager/jobs/duplicates",
|
|
"GET /prompt_manager/maintenance/duplicates/{job_id}",
|
|
"GET /prompt_manager/scan_output_dir",
|
|
"POST /prompt_manager/autotag/start",
|
|
"POST /prompt_manager/autotag/batch/preview",
|
|
"POST /prompt_manager/jobs/autotag",
|
|
"POST /prompt_manager/jobs/thumbnails",
|
|
"GET /prompt_manager/images/thumbnails/plan",
|
|
"GET /prompt_manager/images/thumbnails/status",
|
|
"POST /prompt_manager/images/generate-thumbnails",
|
|
"POST /prompt_manager/images/generate-thumbnails/progress",
|
|
"GET /prompt_manager/diagnostics",
|
|
),
|
|
"record text only, reads no file; its media is served through the gate": (
|
|
"GET /prompt_manager/images/all",
|
|
"GET /prompt_manager/images/recent",
|
|
"GET /prompt_manager/images/search",
|
|
"GET /prompt_manager/images/prompt/{image_path}",
|
|
"GET /prompt_manager/prompts/{prompt_id}/images",
|
|
"DELETE /prompt_manager/images/{image_id}",
|
|
"GET /prompt_manager/recent",
|
|
"GET /prompt_manager/search",
|
|
"GET /prompt_manager/export",
|
|
"GET /prompt_manager/library/export",
|
|
"GET /prompt_manager/history/runs/{run_id}",
|
|
"GET /prompt_manager/review/items",
|
|
"GET /prompt_manager/review/items/{item_id}",
|
|
"POST /prompt_manager/maintenance/preview",
|
|
"POST /prompt_manager/maintenance/apply",
|
|
),
|
|
"no media file": (
|
|
"DELETE /prompt_manager/collections/{collection_id}",
|
|
"DELETE /prompt_manager/delete/{prompt_id}",
|
|
"DELETE /prompt_manager/pairs/{pair_id}",
|
|
"DELETE /prompt_manager/prompts/{prompt_id}/tags",
|
|
"DELETE /prompt_manager/restore/preview/{token}",
|
|
"DELETE /prompt_manager/saved-views/{view_id}",
|
|
"DELETE /prompt_manager/tags/{tag_name}",
|
|
"GET /prompt_manager/admin",
|
|
"GET /prompt_manager/autotag/models",
|
|
"GET /prompt_manager/backup",
|
|
"GET /prompt_manager/backup/status",
|
|
"GET /prompt_manager/categories",
|
|
"GET /prompt_manager/collections",
|
|
"GET /prompt_manager/gallery",
|
|
"GET /prompt_manager/gallery.html",
|
|
"GET /prompt_manager/jobs",
|
|
"GET /prompt_manager/jobs/{job_id}",
|
|
"GET /prompt_manager/jobs/{job_id}/events",
|
|
"GET /prompt_manager/jobs/{job_id}/report",
|
|
"GET /prompt_manager/js/{filepath}",
|
|
"GET /prompt_manager/lib/{filepath}",
|
|
"GET /prompt_manager/library/options",
|
|
"GET /prompt_manager/library/{positive_id}/history",
|
|
"GET /prompt_manager/library/{positive_id}/history/pairs/{pair_id}/newest",
|
|
"GET /prompt_manager/logs",
|
|
"GET /prompt_manager/logs/config",
|
|
"GET /prompt_manager/logs/download/{filename}",
|
|
"GET /prompt_manager/logs/files",
|
|
"GET /prompt_manager/logs/stats",
|
|
"GET /prompt_manager/lora/detect",
|
|
"GET /prompt_manager/lora/status",
|
|
"GET /prompt_manager/lora/trigger-words",
|
|
"GET /prompt_manager/pairs",
|
|
"GET /prompt_manager/pairs/export",
|
|
"GET /prompt_manager/pairs/{pair_id}",
|
|
"GET /prompt_manager/review/events",
|
|
"GET /prompt_manager/saved-views",
|
|
"GET /prompt_manager/scan/status",
|
|
"GET /prompt_manager/scan_duplicates/status",
|
|
"GET /prompt_manager/settings",
|
|
"GET /prompt_manager/stats",
|
|
"GET /prompt_manager/subfolders",
|
|
"GET /prompt_manager/system/diagnostics",
|
|
"GET /prompt_manager/system/health",
|
|
"GET /prompt_manager/system/library",
|
|
"GET /prompt_manager/system/overview",
|
|
"GET /prompt_manager/system/statistics",
|
|
"GET /prompt_manager/tags",
|
|
"GET /prompt_manager/tags/filter",
|
|
"GET /prompt_manager/tags/stats",
|
|
"GET /prompt_manager/tags/suggest",
|
|
"GET /prompt_manager/tags/{tag_name}/prompts",
|
|
"GET /prompt_manager/test",
|
|
"GET /prompt_manager/vocabulary/categories",
|
|
"GET /prompt_manager/vocabulary/tags",
|
|
"GET /prompt_manager/vocabulary/tags/{tag_id}/impact",
|
|
"GET /prompt_manager/web",
|
|
"GET /prompt_manager/workspace",
|
|
"PATCH /prompt_manager/collections/{collection_id}",
|
|
"PATCH /prompt_manager/library/{positive_id}",
|
|
"PATCH /prompt_manager/pairs/{pair_id}",
|
|
"PATCH /prompt_manager/saved-views/{view_id}",
|
|
"PATCH /prompt_manager/vocabulary/tags/{tag_id}",
|
|
"POST /prompt_manager/autotag/download/{model_type}",
|
|
"POST /prompt_manager/autotag/unload",
|
|
"POST /prompt_manager/bulk/category",
|
|
"POST /prompt_manager/bulk/delete",
|
|
"POST /prompt_manager/bulk/tags",
|
|
"POST /prompt_manager/cleanup",
|
|
"POST /prompt_manager/diagnostics/test-link",
|
|
"POST /prompt_manager/images/clear-thumbnails",
|
|
"POST /prompt_manager/jobs/model-download",
|
|
"POST /prompt_manager/jobs/{job_id}/cancel",
|
|
"POST /prompt_manager/library",
|
|
"POST /prompt_manager/library/delete",
|
|
"POST /prompt_manager/library/delete/preview",
|
|
"POST /prompt_manager/library/restore",
|
|
"POST /prompt_manager/library/{positive_id}/variants",
|
|
"POST /prompt_manager/logs/config",
|
|
"POST /prompt_manager/logs/truncate",
|
|
"POST /prompt_manager/lora/enable",
|
|
"POST /prompt_manager/lora/import/apply",
|
|
"POST /prompt_manager/lora/import/preview",
|
|
"POST /prompt_manager/lora/refresh-cache",
|
|
"POST /prompt_manager/lora/scan",
|
|
"POST /prompt_manager/maintenance",
|
|
"POST /prompt_manager/pairs",
|
|
"POST /prompt_manager/prompts/tags",
|
|
"POST /prompt_manager/prompts/{prompt_id}/tags",
|
|
"POST /prompt_manager/restore",
|
|
"POST /prompt_manager/restore/apply",
|
|
"POST /prompt_manager/restore/preview",
|
|
"POST /prompt_manager/save",
|
|
"POST /prompt_manager/saved-views",
|
|
"POST /prompt_manager/scan/cancel",
|
|
"POST /prompt_manager/settings",
|
|
"POST /prompt_manager/settings/validate-source",
|
|
"POST /prompt_manager/system/health",
|
|
"POST /prompt_manager/system/library/keep",
|
|
"POST /prompt_manager/system/library/move",
|
|
"POST /prompt_manager/tags/merge",
|
|
"POST /prompt_manager/vocabulary/categories/apply",
|
|
"POST /prompt_manager/vocabulary/categories/preview",
|
|
"POST /prompt_manager/vocabulary/tags",
|
|
"POST /prompt_manager/vocabulary/tags/{tag_id}/delete",
|
|
"PUT /prompt_manager/prompts/{prompt_id}",
|
|
"PUT /prompt_manager/prompts/{prompt_id}/rating",
|
|
"PUT /prompt_manager/tags/{tag_name}",
|
|
),
|
|
}
|