43 lines
728 B
Python
43 lines
728 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from datetime import datetime, timezone
|
|
|
|
from app.db.models import FileAsset, FileBlob, FileVersion
|
|
|
|
|
|
class FileStorageError(RuntimeError):
|
|
pass
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class UploadedStoredFile:
|
|
asset: FileAsset
|
|
version: FileVersion
|
|
blob: FileBlob
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class ResolvedPattern:
|
|
pattern: str
|
|
matches: list[FileAsset]
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class FileConflictResolution:
|
|
target_path: str
|
|
action: str
|
|
new_path: str | None = None
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class RenamePlanItem:
|
|
kind: str
|
|
id: str
|
|
old_path: str
|
|
new_path: str
|
|
|
|
|
|
def utcnow() -> datetime:
|
|
return datetime.now(timezone.utc)
|