* refactor: remove dead and test-only code and the write-only prompt registry (#620) Removes helpers nothing calls, test-only wrappers and their tests, the unused config writer, three unused images, and the prompt registry the nodes wrote to but nothing read, which grew with every run. * fix: network-share readers, model unload off the loop, bad save requests (#620) Every read-only SQLite open now uses one URI helper, so a library on a Windows network share works in backups, restores, moves and history reads. Unloading a model no longer blocks the server. A malformed /save body gets a 400, not a 500. * feat(library): add Recently used, Most used and Name Z-A sorting (#620) The old Dashboard's sorts the community asked for, on the Prompt library, in saved views, and with paging through the whole list. * feat(workspace): stop linking the old pages (#620) They show a removal notice since 3.5.1. System no longer links them, the load failure offers a reload and ComfyUI instead, and the README says they are going away. The pages still work at their URLs.
40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""Every read-only SQLite open uses one URI helper (#620).
|
|
|
|
pathlib writes a Windows network path as ``file://server/share/x.db``, which
|
|
SQLite refuses. A reader that builds its own URI breaks backups, restores,
|
|
library moves or history reads for a library on a network share.
|
|
"""
|
|
|
|
import re
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
sys.path.insert(0, str(ROOT))
|
|
|
|
from database.sqlite_uri import readonly_uri # noqa: E402
|
|
|
|
|
|
class TestReadonlyUri(unittest.TestCase):
|
|
def test_a_network_path_has_an_empty_authority(self):
|
|
self.assertEqual(
|
|
readonly_uri(r"\\server\share\Comfy UI\prompts.db", windows=True),
|
|
"file:////server/share/Comfy%20UI/prompts.db?mode=ro",
|
|
)
|
|
|
|
def test_no_reader_builds_its_own_uri(self):
|
|
offenders = []
|
|
for folder in ("database", "py", "utils"):
|
|
for path in (ROOT / folder).rglob("*.py"):
|
|
if path.name == "sqlite_uri.py":
|
|
continue
|
|
text = path.read_text(encoding="utf-8")
|
|
if re.search(r"as_uri\(\)\s*\+\s*[\"']\?mode=ro", text):
|
|
offenders.append(path.relative_to(ROOT).as_posix())
|
|
self.assertEqual(offenders, [])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|