98 lines
2.2 KiB
Python
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
|