You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.4 KiB
Python

# backend/app/connectors/knowledge/mock.py — 시드 기반 knowledge sync (phase-13)
from datetime import UTC, datetime
from sqlmodel import Session
from ..base import BaseConnector, NormalizedRecord, RawRecord
from .normalize import normalize_knowledge, upsert_knowledge
_SIM = [
{
"id": "sim-k1",
"type": "highlight",
"title": "온보딩 리텐션 — 첫 7일이 전부다",
"src": "Readwise",
"excerpt": "신규 사용자의 80%는 첫 주에 이탈 여부가 결정된다…",
"tags": ["온보딩", "리텐션"],
}
]
class MockKnowledgeConnector(BaseConnector):
domain = "knowledge"
entity_type = "knowledge_item"
def fetch(self, session: Session, *, full: bool = False):
for p in getattr(self, "_sim_payloads", []):
yield RawRecord(
external_id=p["id"],
payload=p,
etag=p.get("title", ""),
external_updated_at=datetime.now(UTC),
)
def simulate_new(self) -> "MockKnowledgeConnector":
self._sim_payloads = _SIM
return self
def normalize(self, raw: RawRecord) -> NormalizedRecord:
return normalize_knowledge(self.account, raw)
def write(self, session: Session, norm: NormalizedRecord):
return upsert_knowledge(session, norm)
def event_for(self, norm, entity_id):
return "knowledge.ingested"