Files
content-ingestion-agent/kab_ingestion/models.py
Jonathan Boniface d8a4b6b3c1
Some checks failed
quality-gates / verify (push) Failing after 7s
fix: files manually
2026-09-01 17:21:58 +01:00

98 lines
2.2 KiB
Python

from dataclasses import dataclass, field
from typing import Any
@dataclass(frozen=True)
class ACL:
tenant_id: str = ""
principals: tuple[str, ...] = ()
groups: tuple[str, ...] = ()
visibility: str = "restricted"
public: bool = False
@dataclass(frozen=True)
class Provenance:
source_type: str
source_id: str
canonical_url: str
revision: str | None = None
retrieved_at: str | None = None
webhook_event_id: str | None = None
connector_version: str = "1.0"
@dataclass(frozen=True)
class Document:
id: str
tenant_id: str
title: str
content: str
mime_type: str
content_hash: str
modified_at: str | None
provenance: Provenance
acl: ACL
metadata: dict[str, Any] = field(default_factory=dict)
deleted: bool = False
@dataclass(frozen=True)
class NormalizedDocument:
document_id: str
tenant_id: str
title: str
body: str
mime_type: str
source_path: str
content_hash: str
updated_at: Any
acl: ACL
provenance: dict[str, Any]
metadata: dict[str, Any] = field(default_factory=dict)
deleted: bool = False
@dataclass(frozen=True)
class ConnectorConfig:
connector_id: str
tenant_id: str
secret_ref: str
scope: dict[str, Any]
options: dict[str, Any] = field(default_factory=dict)
@dataclass(frozen=True)
class SyncCursor:
connector_id: str
mode: str
revision: str | None = None
delta_token: str | None = None
updated_at: str | None = None
@dataclass(frozen=True)
class Change:
item_id: str
kind: str
revision: str | None = None
event_id: str | None = None
payload: dict[str, Any] = field(default_factory=dict)
@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)
@dataclass(frozen=True)
class IngestionResult:
document: Document | SourceDocument | None
accepted: bool
status: str
reason: str | None = None
published_url: str | None = None