Refactor: Move API files (#15151)

Refactor: Move API files
This commit is contained in:
Wang Qi
2026-05-22 17:44:05 +08:00
committed by GitHub
parent 7e6844118b
commit 87918650ff
11 changed files with 305 additions and 481 deletions

View File

@@ -242,7 +242,7 @@ def _load_dify_retrieval_module(monkeypatch):
monkeypatch.setitem(sys.modules, "api.db.joint_services.tenant_model_service", tenant_model_service_mod)
module_name = "test_dify_retrieval_routes_unit_module"
module_path = repo_root / "api" / "apps" / "sdk" / "dify_retrieval.py"
module_path = repo_root / "api" / "apps" / "restful_apis" / "dify_retrieval_api.py"
spec = importlib.util.spec_from_file_location(module_name, module_path)
module = importlib.util.module_from_spec(spec)
module.manager = _DummyManager()

View File

@@ -84,7 +84,7 @@ def test_multi_dataset_search_with_metadata_filter(rest_client, ensure_parsed_do
@pytest.mark.p2
def test_retrieval_compatibility_endpoint(rest_client, ensure_parsed_document):
dataset_id, _ = ensure_parsed_document()
# /api/v1/retrieval is SDK compatibility endpoint from api/apps/sdk/doc.py.
# /api/v1/retrieval is SDK compatibility endpoint registered from chunk_api.py.
res = rest_client.post(
"/retrieval",
json={"dataset_ids": [dataset_id], "question": "test TXT file", "top_k": 5},

View File

@@ -253,7 +253,7 @@ def _load_dify_retrieval_module(monkeypatch):
monkeypatch.setitem(sys.modules, "api.db.joint_services.tenant_model_service", tenant_model_service_mod)
module_name = "test_dify_retrieval_routes_unit_module"
module_path = repo_root / "api" / "apps" / "sdk" / "dify_retrieval.py"
module_path = repo_root / "api" / "apps" / "restful_apis" / "dify_retrieval_api.py"
spec = importlib.util.spec_from_file_location(module_name, module_path)
module = importlib.util.module_from_spec(spec)
module.manager = _DummyManager()

View File

@@ -137,12 +137,31 @@ def _load_doc_module(monkeypatch):
common_pkg.__path__ = [str(repo_root / "common")]
monkeypatch.setitem(sys.modules, "common", common_pkg)
apps_mod = ModuleType("api.apps")
apps_mod.login_required = lambda func: func
monkeypatch.setitem(sys.modules, "api.apps", apps_mod)
common_settings_mod = ModuleType("common.settings")
common_settings_mod.retriever = SimpleNamespace()
common_settings_mod.kg_retriever = SimpleNamespace()
common_settings_mod.STORAGE_IMPL = SimpleNamespace(get=lambda *_args, **_kwargs: b"", rm=lambda *_args, **_kwargs: None)
monkeypatch.setitem(sys.modules, "common.settings", common_settings_mod)
common_misc_utils_mod = ModuleType("common.misc_utils")
async def _thread_pool_exec(func, *args, **kwargs):
return func(*args, **kwargs)
common_misc_utils_mod.thread_pool_exec = _thread_pool_exec
monkeypatch.setitem(sys.modules, "common.misc_utils", common_misc_utils_mod)
common_string_utils_mod = ModuleType("common.string_utils")
common_string_utils_mod.is_content_empty = lambda content: content is None or not str(content).strip()
common_string_utils_mod.remove_redundant_spaces = lambda text: " ".join(str(text).split())
monkeypatch.setitem(sys.modules, "common.string_utils", common_string_utils_mod)
tag_feature_utils_mod = ModuleType("common.tag_feature_utils")
tag_feature_utils_mod.validate_tag_features = lambda value: value
monkeypatch.setitem(sys.modules, "common.tag_feature_utils", tag_feature_utils_mod)
class _FakeExpr:
def __or__(self, other):
return self
@@ -219,6 +238,7 @@ def _load_doc_module(monkeypatch):
monkeypatch.setitem(sys.modules, "api.db.services.task_service", task_service_mod)
api_utils_mod = ModuleType("api.utils.api_utils")
api_utils_mod.add_tenant_id_to_kwargs = lambda func: func
api_utils_mod.check_duplicate_ids = lambda ids, _kind="item": (ids, [])
api_utils_mod.construct_json_result = lambda code=0, message="success", data=None: {"code": code, "message": message, "data": data}
api_utils_mod.get_error_data_result = lambda message="Sorry! Data missing!", code=102: {"code": code, "message": message}
@@ -239,6 +259,32 @@ def _load_doc_module(monkeypatch):
api_utils_mod.token_required = _token_required
monkeypatch.setitem(sys.modules, "api.utils.api_utils", api_utils_mod)
image_utils_mod = ModuleType("api.utils.image_utils")
image_utils_mod.store_chunk_image = lambda *_args, **_kwargs: None
monkeypatch.setitem(sys.modules, "api.utils.image_utils", image_utils_mod)
reference_metadata_utils_mod = ModuleType("api.utils.reference_metadata_utils")
reference_metadata_utils_mod.resolve_reference_metadata_preferences = (
lambda req, *_args, **_kwargs: (
bool((req.get("reference_metadata") or {}).get("include")),
set((req.get("reference_metadata") or {}).get("fields") or []),
)
)
def _enrich_chunks_with_document_metadata(chunks, metadata_fields=None):
for chunk in chunks:
doc_id = chunk.get("doc_id") or chunk.get("document_id")
if not doc_id:
continue
metadata = doc_metadata_service_mod.DocMetadataService.get_metadata_for_documents([doc_id], chunk.get("kb_id"))
document_metadata = dict(metadata.get(doc_id, {}))
if metadata_fields:
document_metadata = {key: value for key, value in document_metadata.items() if key in metadata_fields}
if document_metadata:
chunk["document_metadata"] = document_metadata
reference_metadata_utils_mod.enrich_chunks_with_document_metadata = _enrich_chunks_with_document_metadata
monkeypatch.setitem(sys.modules, "api.utils.reference_metadata_utils", reference_metadata_utils_mod)
common_metadata_utils_mod = ModuleType("common.metadata_utils")
common_metadata_utils_mod.convert_conditions = lambda conditions: conditions
common_metadata_utils_mod.meta_filter = lambda *_args, **_kwargs: []
@@ -446,7 +492,7 @@ def _load_doc_module(monkeypatch):
tenant_model_service_mod.get_tenant_default_model_by_type = _get_tenant_default_model_by_type
monkeypatch.setitem(sys.modules, "api.db.joint_services.tenant_model_service", tenant_model_service_mod)
module_path = repo_root / "api" / "apps" / "sdk" / "doc.py"
module_path = repo_root / "api" / "apps" / "restful_apis" / "chunk_api.py"
spec = importlib.util.spec_from_file_location("test_doc_sdk_routes_unit", module_path)
module = importlib.util.module_from_spec(spec)
module.manager = _DummyManager()

View File

@@ -690,7 +690,7 @@ def _load_session_module(monkeypatch):
)
monkeypatch.setitem(sys.modules, "api.db.services.user_canvas_version", user_canvas_version_mod)
module_path = repo_root / "api" / "apps" / "sdk" / "session.py"
module_path = repo_root / "api" / "apps" / "restful_apis" / "bot_api.py"
spec = importlib.util.spec_from_file_location("test_session_sdk_routes_unit_module", module_path)
module = importlib.util.module_from_spec(spec)
module.manager = _DummyManager()

View File

@@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""Regression tests for retrieval in api/apps/sdk/dify_retrieval.py.
"""Regression tests for retrieval in api/apps/restful_apis/dify_retrieval_api.py.
Issue #15027: cross-tenant knowledge-base access via POST /api/v1/dify/retrieval.
The handler authenticated the caller via @apikey_required (resolving
@@ -84,7 +84,7 @@ class _FakeKGRetriever:
def _load_dify_retrieval(monkeypatch, *, kb, accessible, request_body, chunks=None):
"""Load dify_retrieval.py with minimum stubs to exercise the retrieval handler."""
"""Load dify_retrieval_api.py with minimum stubs to exercise the retrieval handler."""
_stub(
monkeypatch,
"api.utils.api_utils",
@@ -148,7 +148,7 @@ def _load_dify_retrieval(monkeypatch, *, kb, accessible, request_body, chunks=No
monkeypatch.setitem(sys.modules, "quart", quart_stub)
repo_root = Path(__file__).resolve().parents[5]
module_path = repo_root / "api" / "apps" / "sdk" / "dify_retrieval.py"
module_path = repo_root / "api" / "apps" / "restful_apis" / "dify_retrieval_api.py"
spec = importlib.util.spec_from_file_location("test_dify_retrieval_module", module_path)
module = importlib.util.module_from_spec(spec)
module.manager = _PassthroughManager()