Module Package Release / publish-packages (push) Successful in 14s
Release v0.1.27. Coordinated integrity review: GovOPlaN/govoplan-core#298.
47 lines
868 B
Python
47 lines
868 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from datetime import datetime, timezone
|
|
|
|
from govoplan_files.backend.db.models import FileAsset, FileBlob, FileVersion
|
|
|
|
|
|
class FileStorageError(RuntimeError):
|
|
pass
|
|
|
|
|
|
class FileSourceConflict(FileStorageError):
|
|
"""A source cannot be selected or revision-bound without ambiguity."""
|
|
|
|
|
|
@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)
|