document-processor/app/core/ingest_settings.py

85 lines
2.1 KiB
Python

import json
from pathlib import Path
DEFAULT_INGEST_ROOT = "/mnt/data/shared/scans/processed"
SETTINGS_FILE = Path("/mnt/storage/document-processor/settings/ingest.json")
def _ensure_parent() -> None:
SETTINGS_FILE.parent.mkdir(parents=True, exist_ok=True)
def get_default_ingest_root() -> str:
try:
if SETTINGS_FILE.exists():
data = json.loads(SETTINGS_FILE.read_text())
value = str(data.get("default_ingest_root") or "").strip()
if value:
return value
except Exception:
pass
return DEFAULT_INGEST_ROOT
def set_default_ingest_root(path_str: str) -> str:
value = str(path_str or "").strip()
if not value:
value = DEFAULT_INGEST_ROOT
_ensure_parent()
SETTINGS_FILE.write_text(json.dumps({"default_ingest_root": value}, indent=2))
return value
def reset_default_ingest_root() -> str:
_ensure_parent()
SETTINGS_FILE.write_text(json.dumps({"default_ingest_root": DEFAULT_INGEST_ROOT}, indent=2))
return DEFAULT_INGEST_ROOT
def browse_directory(path_str: str) -> dict:
target = Path(path_str).expanduser().resolve()
result = {
"path": str(target),
"exists": target.exists(),
"is_dir": target.is_dir(),
"parent": "",
"entries": [],
"error": "",
}
if not target.exists():
result["error"] = "Directory does not exist."
return result
if not target.is_dir():
result["error"] = "Path is not a directory."
return result
parent = target.parent
if parent != target:
result["parent"] = str(parent)
try:
children = sorted(
list(target.iterdir()),
key=lambda p: (not p.is_dir(), p.name.lower()),
)
except Exception as exc:
result["error"] = f"Could not read directory: {exc}"
return result
entries = []
for child in children[:300]:
entries.append(
{
"name": child.name,
"path": str(child),
"is_dir": child.is_dir(),
}
)
result["entries"] = entries
return result