Files
content-ingestion-agent/kab_ingestion/models.py

58 lines
1.3 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"
@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 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)