fix: files manually
Some checks failed
quality-gates / verify (push) Failing after 7s

This commit is contained in:
2026-09-01 17:21:58 +01:00
parent 56c9eaa459
commit d8a4b6b3c1
36 changed files with 656 additions and 216 deletions

View File

@@ -1,5 +1,4 @@
"""Ingestion domain migrated into the application package."""
from .domain.models import IngestionRequest, IngestionResult, SourceDocument
"""Re-export canonical kab_ingestion symbols."""
from kab_ingestion import IngestionRequest, IngestionResult, SourceDocument
__all__ = ["IngestionRequest", "IngestionResult", "SourceDocument"]

View File

@@ -1,32 +1,4 @@
from __future__ import annotations
"""Re-export canonical GitHubConnector from kab_ingestion.github."""
from kab_ingestion.github import GitHubConnector as GitHubSCMConnector
import json
from dataclasses import dataclass
from urllib.request import Request, urlopen
from ..domain.models import IngestionRequest, SourceDocument
@dataclass
class GitHubSCMConnector:
token: str | None = None
api_base: str = "https://api.github.com"
def fetch(self, request: IngestionRequest) -> list[SourceDocument]:
"""Fetch a file or repository contents using the GitHub contents API."""
url = request.locator if request.locator.startswith("http") else f"{self.api_base}/{request.locator.lstrip('/')}"
headers = {"Accept": "application/vnd.github+json", "User-Agent": "content-ingestion-agent"}
if self.token:
headers["Authorization"] = f"Bearer {self.token}"
with urlopen(Request(url, headers=headers), timeout=20) as response:
payload = json.loads(response.read().decode("utf-8"))
items = payload if isinstance(payload, list) else [payload]
return [self._document(item, request) for item in items if item.get("type", "file") == "file"]
@staticmethod
def _document(item: dict, request: IngestionRequest) -> SourceDocument:
body = item.get("content", "")
if item.get("encoding") == "base64":
import base64
body = base64.b64decode(body).decode("utf-8", errors="replace")
return SourceDocument(identifier=str(item.get("sha", item.get("path", "unknown"))), title=item.get("name", item.get("path", "Untitled")), body=body, source=request.source, url=item.get("html_url"), metadata={"path": item.get("path")})
__all__ = ["GitHubSCMConnector"]

View File

@@ -1,22 +1,4 @@
from __future__ import annotations
"""Re-export canonical SharePointConnector from kab_ingestion.sharepoint."""
from kab_ingestion.sharepoint import SharePointConnector as SharePointCMSConnector
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))
__all__ = ["SharePointCMSConnector"]

View File

@@ -1,37 +1,4 @@
from __future__ import annotations
"""Re-export canonical models from kab_ingestion.models for backward compatibility."""
from kab_ingestion.models import IngestionRequest, IngestionResult, SourceDocument
from dataclasses import dataclass, field
from datetime import datetime, timezone
from typing import Any
def utc_now() -> datetime:
return datetime.now(timezone.utc)
@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)
fetched_at: datetime = field(default_factory=utc_now)
@dataclass(frozen=True)
class IngestionResult:
document: SourceDocument
accepted: bool
status: str
reason: str | None = None
published_url: str | None = None
__all__ = ["IngestionRequest", "IngestionResult", "SourceDocument"]