feat:更新fastmcp2.10.7,add testfile

This commit is contained in:
mm644706215
2025-07-29 16:54:02 +08:00
parent b2b1093c6d
commit 9bd77e991e
6 changed files with 2120 additions and 1 deletions

1
.gitignore vendored
View File

@@ -5,3 +5,4 @@ __pycache__/
dist/ dist/
.pytest_cache/ .pytest_cache/
.coverage .coverage
data/

View File

@@ -458,6 +458,13 @@ rustfs-s3-toolkit/
└── basic_usage.py # 使用示例 └── basic_usage.py # 使用示例
``` ```
## 容器构建
```bash
docker compose -f docker/docker-compose.yml up --build -d
docker compose -f docker/docker-compose.yml up -d
```
## 🤝 贡献 ## 🤝 贡献
欢迎提交 Issue 和 Pull Request 欢迎提交 Issue 和 Pull Request

View File

@@ -118,3 +118,6 @@ warn_unused_ignores = true
warn_no_return = true warn_no_return = true
warn_unreachable = true warn_unreachable = true
strict_equality = true strict_equality = true
[tool.uv.sources]
fastmcp = { git = "https://github.com/jlowin/fastmcp.git" }

40
tests/test_mcp.py Normal file
View File

@@ -0,0 +1,40 @@
import asyncio
from fastmcp import Client
from fastmcp.client.elicitation import ElicitResult
async def elicitation_handler(message, response_type, params, ctx):
# Mock providing RustFS configuration
if "RustFS 配置信息" in message:
return ElicitResult(action="accept", content=response_type(
endpoint_url="https://rfs.jmsu.top",
access_key_id="lingyuzeng",
secret_access_key="rustAdminlingyuzeng",
bucket_name="rustfs0",
region_name="us-east-1"
))
# Mock providing file upload info
elif "文件路径" in message:
return ElicitResult(action="accept", content={
"file_path": "/app/data/README.md",
"object_key": "README.md"
})
else:
return ElicitResult(action="decline")
async def test_server():
async with Client(
"http://127.0.0.1:8004/mcp/",
elicitation_handler=elicitation_handler
) as client:
# Test connection
await client.ping()
# List available tools
tools = await client.list_tools()
print("可用工具:", [tool.name for tool in tools])
# Call tool (will trigger configuration validation)
result = await client.call_tool("rustfs_upload_file", {})
print(result)
asyncio.run(test_server())

62
tests/upload_test.py Normal file
View File

@@ -0,0 +1,62 @@
#!/usr/bin/env python3
"""
上传测试文件到RustFS S3存储
使用测试配置信息
"""
import sys
import os
# 添加项目根目录到Python路径
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
from rustfs_s3_toolkit.s3_client import S3StorageToolkit
def upload_test_file():
"""上传测试文件"""
# 配置信息(来自测试文件)
config = {
"endpoint_url": "https://rfs.jmsu.top",
"access_key_id": "lingyuzeng",
"secret_access_key": "rustAdminlingyuzeng",
"bucket_name": "rustfs0",
"region_name": "us-east-1"
}
# 创建S3工具包实例
toolkit = S3StorageToolkit(**config)
# 测试连接
print("正在测试S3连接...")
conn_result = toolkit.test_connection()
if conn_result["success"]:
print(f"✓ 连接成功!找到 {conn_result['bucket_count']} 个存储桶")
print(f"✓ 目标存储桶 '{config['bucket_name']}' 存在: {conn_result['target_bucket_exists']}")
else:
print(f"✗ 连接失败: {conn_result['error']}")
return False
# 上传文件
local_file = "/srv/project/p2rank_2.5/p2rank_2.5/rustfs-s3-toolkit/docker/data/test-upload.txt"
remote_key = "test-upload.txt"
print(f"\n正在上传文件: {local_file}")
print(f"目标对象键: {remote_key}")
upload_result = toolkit.upload_file(local_file, remote_key)
if upload_result["success"]:
print(f"✓ 文件上传成功!")
print(f" 存储桶: {upload_result['bucket']}")
print(f" 对象键: {upload_result['key']}")
print(f" 文件大小: {upload_result['file_size']} 字节")
print(f" 公开URL: {upload_result['public_url']}")
print(f" 上传时间: {upload_result['upload_time']}")
return True
else:
print(f"✗ 文件上传失败: {upload_result['error']}")
return False
if __name__ == "__main__":
success = upload_test_file()
sys.exit(0 if success else 1)

2006
uv.lock generated Normal file

File diff suppressed because it is too large Load Diff