behavior change: save_post_file's category_fetcher argument is now keyword-only with no default, so every call site has to pass something explicit (fetcher instance or None). Previously the =None default let bookmark→library save and bookmark Save As slip through without a fetcher at all, silently rendering %artist%/%character% tokens as empty strings and producing filenames like '_12345.jpg' instead of 'greatartist_12345.jpg'. BookmarksView now takes a category_fetcher_factory callable in its constructor (wired to BooruApp._get_category_fetcher), called at save time so it picks up the fetcher for whatever site is currently active. tests/core/test_library_save.py pins the signature shape and the three relevant paths: fetcher populates empty categories, None accepted when categories are pre-populated (Danbooru/e621 inline), fetcher skipped when template has no category tokens. |
||
|---|---|---|
| .. | ||
| api | ||
| __init__.py | ||
| test_cache.py | ||
| test_concurrency.py | ||
| test_config.py | ||
| test_db.py | ||
| test_library_save.py | ||
| test_pil_safety.py | ||