mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-10-27 21:50:36 +00:00
* feat(knowledge): add optional platform connections and hierarchical spaces * fix(knowledge): return actionable errors for unavailable policy storage * perf(knowledge): resolve space policy once per snapshot
38 lines
2.2 KiB
Python
38 lines
2.2 KiB
Python
"""Real SQLite and policy serialization stay outside async HTTP execution."""
|
|
|
|
import asyncio
|
|
from pathlib import Path
|
|
|
|
import httpx
|
|
import pytest
|
|
from deerflow_extension_api.auth import ExtensionPrincipal
|
|
from fastapi import FastAPI
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_platform_policy_and_effective_http_do_not_block(tmp_path, monkeypatch):
|
|
root = Path(__file__).resolve().parents[3]
|
|
for package in ("knowledge-platform", "knowledge-management"):
|
|
monkeypatch.syspath_prepend(str(root / "examples" / f"deerflow-extension-{package}"))
|
|
from deerflow_extension_knowledge_platform.models import Settings, resource_key
|
|
from deerflow_extension_knowledge_platform.router import build_router
|
|
from deerflow_extension_knowledge_platform.service import Platform
|
|
from deerflow_extension_knowledge_platform.store import Store
|
|
|
|
settings = Settings.model_validate({"enabled": True, "storage_path": str(tmp_path / "platform.db"), "connections": [{"id": "test", "provider": "weknora", "resources": [{"base_id": "kb", "dataset_id": "wk1_synthetic"}]}]})
|
|
store = await asyncio.to_thread(Store, settings)
|
|
app = FastAPI()
|
|
app.include_router(build_router(Platform(settings, store, {})))
|
|
app.state.deerflow_extension_principal_resolver = lambda request: ExtensionPrincipal("admin", is_admin=True)
|
|
|
|
async def authorize(request, namespace, scope):
|
|
return True
|
|
|
|
app.state.deerflow_extension_plugin_authz_resolver_async = authorize
|
|
policy = {"spaces": {"root": {"title": "Synthetic", "resources": [resource_key("weknora", "test", "kb")], "members": {"admin": "manager"}}}}
|
|
async with httpx.AsyncClient(transport=httpx.ASGITransport(app=app), base_url="http://test") as client:
|
|
assert (await client.put("/api/extensions/knowledge-platform/policy", json={"revision": 0, "policy": policy})).status_code == 200
|
|
assert (await client.get("/api/extensions/knowledge-platform/policy")).json()["revision"] == 1
|
|
assert len((await client.get("/api/extensions/knowledge-platform/spaces")).json()["items"]) == 1
|
|
assert (await client.get("/api/extensions/knowledge-platform/spaces/root")).json()["resources"][0]["dataset_id"] == "wk1_synthetic"
|