from __future__ import annotations import json from dataclasses import dataclass from urllib.request import Request, urlopen from ..domain.models import SourceDocument @dataclass class SharePointCMSConnector: site_url: str access_token: str def publish(self, document: SourceDocument) -> str: """Create a SharePoint list item through Microsoft Graph.""" endpoint = f"{self.site_url.rstrip('/')}/_api/web/lists/getbytitle('Knowledge')/items" payload = json.dumps({"Title": document.title, "Content": document.body}).encode() request = Request(endpoint, data=payload, method="POST", headers={"Authorization": f"Bearer {self.access_token}", "Accept": "application/json", "Content-Type": "application/json"}) with urlopen(request, timeout=20) as response: result = json.loads(response.read().decode("utf-8")) return result.get("d", {}).get("Id", result.get("id", document.identifier))