Commit Graph
8 Commits
Author SHA1 Message Date
by-ae 17858e1963 fix: store unicode names that look the same as one preset
A letter plus a combining accent was rejected, and when it was already
in the file it did not match the composed name.
2026-11-01 07:31:19 +10:00
by-ae a5a88ed0e8 fix: read store files that start with a UTF-8 BOM
json.load rejects a leading byte-order mark, so a valid bucket was moved
aside and the next save replaced it. Reading as utf-8-sig keeps the data.
2026-10-29 07:46:20 +10:00
03603614b1 fix: back up store files that are not JSON objects
A bucket file that parsed as a JSON array or other non-object was treated
as empty and then overwritten on the next save, so the previous contents
were gone. Those files are now moved aside like invalid JSON. A backup
created in the same second no longer replaces an existing one.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: AE <by-ae@users.noreply.github.com>
2026-10-27 21:01:27 +00:00
27db6ef197 fix: create each store bucket lock only once
The per-bucket lock was inserted without synchronization. Two first
writers could take different locks and overwrite each other's preset
file. Lock creation now happens under a guard lock.

Co-authored-by: AE <by-ae@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-26 21:11:37 +00:00
84bd2a4cda test: stop store tests from writing fixtures into the repo
test_store replaced the folder_paths mock after store.py had imported it.
Route tests then configured the replacement, and store writes went to a
MagicMock path that had been committed. Both suites now share the mock
from conftest and land files in a temp directory.

Co-authored-by: AE <by-ae@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-26 21:10:54 +00:00
by-aeandCursor Agent 3a1dcd649d fix: support Unicode names and prevent concurrent write corruption in store
- Allow Unicode letters/numbers in preset names (e.g. 角色, Персонаж, Émilie)
- Add thread-safe locking per bucket to prevent race conditions during concurrent writes
- Use mkstemp() for atomic temp file creation to avoid tmp file name collisions
- Add tests demonstrating the bugs and verifying the fixes

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-24 20:52:01 +00:00
by-aeandCursor Agent 048e0110c8 test: add coverage for corrupt file handling and DELETE endpoint
- Test corrupt JSON creates backup and returns empty bucket
- Test corrupt file does not affect other buckets
- Test save works after corrupt file recovery
- Test DELETE success, 404 not found, invalid bucket/name 400
- All existing tests continue to pass

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-24 09:56:58 +00:00
by-aeandCursor Agent 71cccd9504 Add comprehensive unit tests for store module
Implement 10 unit tests covering:
- Name validation (valid and invalid patterns)
- Save, load, and delete operations
- Multiple entries and overwrites
- Empty buckets and non-existent entries
- Invalid bucket names
- Persistence across reloads

Tests use unittest (stdlib) and mock folder_paths dependency,
ensuring the store logic is reliable without ComfyUI runtime.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-10-22 21:51:16 +00:00