Files
reader-api/app/storage.py
T
virtus 9a3bb4b6ce
Build and Push Reader API Image / docker (push) Successful in 1m3s
feat(storage): implement NAS content storage with read/write capabilities
feat(docker): configure NAS content and EPUB source directories in docker-compose

feat(migrations): add tables for SourceAsset, ImportJob, ChapterContentRef, and AssetNovelMapping

feat(scripts): create backfill script for populating ChapterContentRef from MongoDB chapters
2026-04-30 01:53:52 +07:00

34 lines
1.1 KiB
Python

from __future__ import annotations
import hashlib
from pathlib import Path
from app.config import settings
class NasContentStorage:
def __init__(self, root_dir: str):
self.root = Path(root_dir).resolve()
self.root.mkdir(parents=True, exist_ok=True)
def _resolve(self, href: str) -> Path:
rel = href.strip().lstrip("/")
target = (self.root / rel).resolve()
if self.root not in target.parents and target != self.root:
raise ValueError("Invalid storage href")
return target
def read_text(self, href: str) -> str:
path = self._resolve(href)
return path.read_text(encoding="utf-8")
def write_text(self, href: str, content: str) -> dict[str, str | int]:
path = self._resolve(href)
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(content, encoding="utf-8")
digest = hashlib.sha256(content.encode("utf-8")).hexdigest()
return {"href": href, "sha256": digest, "size": len(content.encode("utf-8"))}
storage = NasContentStorage(settings.nas_content_root)