"""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}", ), }