Smail/test/tools/database_inventory.py
smail b71fbc49fe
Some checks are pending
Security Checks / security (push) Waiting to run
完善单数据库识别并对齐统一配置迁移验收
2026-09-22 10:25:53 +08:00

32 lines
1.1 KiB
Python

from pathlib import Path
import stat
def sqlite_inventory(root, expected):
root = Path(root)
assert root.is_absolute() and root.resolve(strict=True) == root
assert (root / 'data').is_dir()
expected = set(expected)
assert all(path.is_relative_to(root) for path in expected)
seen = set()
pending = [root]
while pending:
path = pending.pop()
assert not path.is_symlink() and not getattr(path, 'is_junction', lambda: False)()
mode = path.stat().st_mode
if stat.S_ISDIR(mode):
pending.extend(path.iterdir())
continue
assert stat.S_ISREG(mode)
name = path.name.lower()
if name.endswith(('-wal', '-shm', '-journal')):
assert path.with_name(path.name.rsplit('-', 1)[0]) in expected
continue
with path.open('rb') as stream:
header = stream.read(16)
if header == b'SQLite format 3\x00' or name.endswith('.db') or '.sqlite' in name:
assert path in expected
seen.add(path)
assert seen == expected
return sorted(seen)