43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
|
|
import requests
|
||
|
|
from typing import List, Optional
|
||
|
|
|
||
|
|
|
||
|
|
class KnowledgeBaseAPI:
|
||
|
|
def __init__(self, base_url: str):
|
||
|
|
self.base_url = base_url.rstrip('/')
|
||
|
|
|
||
|
|
def get_file_list(self) -> List[str]:
|
||
|
|
"""获取服务器上的文件列表"""
|
||
|
|
try:
|
||
|
|
response = requests.get(f"{self.base_url}/list", timeout=10)
|
||
|
|
response.raise_for_status()
|
||
|
|
return response.json()
|
||
|
|
except requests.RequestException as e:
|
||
|
|
raise Exception(f"获取文件列表失败: {str(e)}")
|
||
|
|
|
||
|
|
def get_file(self, filename: str) -> str:
|
||
|
|
"""获取文件内容"""
|
||
|
|
try:
|
||
|
|
response = requests.get(f"{self.base_url}/{filename}/get", timeout=10)
|
||
|
|
response.raise_for_status()
|
||
|
|
return response.text
|
||
|
|
except requests.RequestException as e:
|
||
|
|
raise Exception(f"获取文件 {filename} 失败: {str(e)}")
|
||
|
|
|
||
|
|
def post_file(self, filename: str, content: str) -> bool:
|
||
|
|
"""上传文件内容"""
|
||
|
|
try:
|
||
|
|
files = {'file': (filename, content, 'text/markdown')}
|
||
|
|
response = requests.post(f"{self.base_url}/{filename}/post", files=files, timeout=10)
|
||
|
|
response.raise_for_status()
|
||
|
|
return True
|
||
|
|
except requests.RequestException as e:
|
||
|
|
raise Exception(f"上传文件 {filename} 失败: {str(e)}")
|
||
|
|
|
||
|
|
def test_connection(self) -> bool:
|
||
|
|
"""测试服务器连接"""
|
||
|
|
try:
|
||
|
|
response = requests.get(f"{self.base_url}/list", timeout=5)
|
||
|
|
return response.status_code == 200
|
||
|
|
except requests.RequestException:
|
||
|
|
return False
|