58 lines
1.3 KiB
Python
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)
|