38 lines
819 B
Python
38 lines
819 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from datetime import datetime, timezone
|
|
from typing import Any
|
|
|
|
|
|
def utc_now() -> datetime:
|
|
return datetime.now(timezone.utc)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class IngestionRequest:
|
|
source: str
|
|
locator: str
|
|
requested_by: str = "system"
|
|
metadata: dict[str, Any] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class SourceDocument:
|
|
identifier: str
|
|
title: str
|
|
body: str
|
|
source: str
|
|
url: str | None = None
|
|
metadata: dict[str, Any] = field(default_factory=dict)
|
|
fetched_at: datetime = field(default_factory=utc_now)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class IngestionResult:
|
|
document: SourceDocument
|
|
accepted: bool
|
|
status: str
|
|
reason: str | None = None
|
|
published_url: str | None = None
|