Release Connectors v0.1.21 with external knowledge integration
Module Package Release / publish-packages (push) Successful in 12s

This commit is contained in:
2026-08-22 14:34:36 +02:00
parent 2c2b11f860
commit 79e2315e89
28 changed files with 6351 additions and 33 deletions
+65 -6
View File
@@ -7,14 +7,19 @@ from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from govoplan_connectors.backend.db.models import (
ConnectorKnowledgeObject,
ConnectorKnowledgeProfile,
ConnectorKnowledgeSyncRun,
ConnectorSanctionsAcquisitionRun,
ConnectorSanctionsSnapshot,
ConnectorTabularSource,
)
from govoplan_connectors.backend.manifest import manifest
from govoplan_connectors.backend.provider_state import (
KNOWLEDGE_PROVIDER_ID,
SANCTIONS_PROVIDER_ID,
TABULAR_PROVIDER_ID,
knowledge_provider_states,
sanctions_provider_states,
tabular_provider_states,
)
@@ -27,11 +32,6 @@ class ConnectorsProviderStateTests(unittest.TestCase):
self.engine = create_engine("sqlite+pysqlite:///:memory:", future=True)
Base.metadata.create_all(
self.engine,
tables=(
ConnectorTabularSource.__table__,
ConnectorSanctionsAcquisitionRun.__table__,
ConnectorSanctionsSnapshot.__table__,
),
)
self.session = sessionmaker(bind=self.engine, expire_on_commit=False)()
@@ -109,10 +109,69 @@ class ConnectorsProviderStateTests(unittest.TestCase):
self.assertNotIn("secret-source-name", rendered)
self.assertNotIn("source.example.test", rendered)
self.assertEqual(
{TABULAR_PROVIDER_ID, SANCTIONS_PROVIDER_ID},
{TABULAR_PROVIDER_ID, SANCTIONS_PROVIDER_ID, KNOWLEDGE_PROVIDER_ID},
{item.provider_id for item in manifest.external_provider_state_providers},
)
def test_external_knowledge_state_reports_health_without_acl_or_endpoint_data(self) -> None:
now = datetime.now(UTC)
profile = ConnectorKnowledgeProfile(
id="knowledge-profile-1",
tenant_id="tenant-1",
configuration_id="configuration-secret",
status="active",
product="bluespice",
product_version="4.5.2",
desired_maturity="migrate",
discovered_maturity="migrate",
source_authority_mode="external_mirror",
default_visibility="restricted",
default_acl_tokens=["group:secret-acl"],
namespace_mappings=[{"secret": "mapping"}],
capabilities=["read", "synchronize", "migrate"],
health_status="healthy",
discovered_at=now,
)
page = ConnectorKnowledgeObject(
id="knowledge-object-1",
tenant_id="tenant-1",
profile_id=profile.id,
object_type="page",
external_id="42",
title="Secret page title",
status="active",
source_revision="501",
content_hash="c" * 64,
visibility="restricted",
acl_tokens=["group:secret-acl"],
observed_at=now,
)
run = ConnectorKnowledgeSyncRun(
id="knowledge-run-1",
tenant_id="tenant-1",
profile_id=profile.id,
mode="delta",
idempotency_key="secret-key",
request_hash="d" * 64,
status="completed",
started_at=now,
finished_at=now,
)
self.session.add_all((profile, page, run))
self.session.commit()
state = knowledge_provider_states(
ExternalProviderStateContext(session=self.session, tenant_id="tenant-1")
)[0]
self.assertEqual("healthy", state.health)
self.assertEqual("ready", state.recovery)
self.assertEqual(1, state.metrics["active_objects"])
rendered = str(state.to_dict())
self.assertNotIn("Secret page title", rendered)
self.assertNotIn("group:secret-acl", rendered)
self.assertNotIn("configuration-secret", rendered)
if __name__ == "__main__":
unittest.main()