#!/usr/bin/env python3 # -*- coding: utf-8 -*- """作业 1 · 步骤 2:在 Dify 注册 OpenAPI 自定义工具(查询服务器状态)。""" from __future__ import annotations import sys from pathlib import Path import _bootstrap # noqa: F401 import _config as C from dify_api import Dify, pp SCHEMA_PATH = ( Path(__file__).resolve().parents[2] / "patches_cursor" / "作业1_带工具调用的Agent_服务器状态" / "作业1_server_status_openapi.yaml" ) def main() -> int: schema = SCHEMA_PATH.read_text(encoding="utf-8") d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD) try: d.login() # 若已存在则先删再建,保证作业可重复跑 existing = d.get("/workspaces/current/tools/api") names = [] for item in existing.get("json") or []: names.append(item.get("name") or item.get("provider")) print("existing api tools:", names) if C.SERVER_STATUS_PROVIDER in names: r_del = d.post( "/workspaces/current/tool-provider/api/delete", body={"provider": C.SERVER_STATUS_PROVIDER}, ) pp("delete old", r_del) body = { "provider": C.SERVER_STATUS_PROVIDER, "credentials": {"auth_type": "none"}, "schema_type": "openapi", "schema": schema, "icon": {"background": "#E8F5E9", "content": "🖥️"}, "privacy_policy": "", "custom_disclaimer": "", "labels": ["ops", "homework1"], } r = d.post("/workspaces/current/tool-provider/api/add", body=body) pp("add api tool", r) if r.get("code") not in ("200", "201"): return 1 r2 = d.get( "/workspaces/current/tool-provider/api/tools?provider=%s" % C.SERVER_STATUS_PROVIDER ) pp("list tools", r2, limit=2000) r3 = d.get("/workspaces/current/tools/api") print("api tools now:", [ (x.get("name") or x.get("provider")) for x in (r3.get("json") or []) ]) return 0 finally: d.close() if __name__ == "__main__": sys.exit(main())