main:移除 src 目录结构,更新模块引用路径
变更内容: - 删除 `src` 子目录,将模块引用路径从 `src.functional_scaffold` 更新为 `functional_scaffold`。 - 修改相关代码、文档、测试用例及配置文件中的路径引用,包括 `README.md`、`Dockerfile`、`uvicorn` 启动命令等。 - 优化项目目录结构,提升代码维护性和可读性。
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
from src.functional_scaffold.main import app
|
||||
from functional_scaffold.main import app
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"""算法单元测试"""
|
||||
|
||||
import pytest
|
||||
from src.functional_scaffold.algorithms.prime_checker import PrimeChecker
|
||||
from functional_scaffold.algorithms.prime_checker import PrimeChecker
|
||||
|
||||
|
||||
class TestPrimeChecker:
|
||||
|
||||
@@ -6,12 +6,12 @@ import pytest
|
||||
from unittest.mock import AsyncMock, MagicMock, patch
|
||||
from fastapi import status
|
||||
|
||||
from src.functional_scaffold.core.job_manager import (
|
||||
from functional_scaffold.core.job_manager import (
|
||||
JobManager,
|
||||
get_job_manager,
|
||||
shutdown_job_manager,
|
||||
)
|
||||
from src.functional_scaffold.api.models import JobStatus
|
||||
from functional_scaffold.api.models import JobStatus
|
||||
|
||||
|
||||
class TestJobManager:
|
||||
@@ -203,7 +203,7 @@ class TestJobsAPI:
|
||||
def test_create_job_success(self, client):
|
||||
"""测试成功创建任务"""
|
||||
with patch(
|
||||
"src.functional_scaffold.api.routes.get_job_manager", new_callable=AsyncMock
|
||||
"functional_scaffold.api.routes.get_job_manager", new_callable=AsyncMock
|
||||
) as mock_get_manager:
|
||||
mock_manager = MagicMock()
|
||||
mock_manager.is_available.return_value = True
|
||||
@@ -237,7 +237,7 @@ class TestJobsAPI:
|
||||
def test_create_job_algorithm_not_found(self, client):
|
||||
"""测试创建任务时算法不存在"""
|
||||
with patch(
|
||||
"src.functional_scaffold.api.routes.get_job_manager", new_callable=AsyncMock
|
||||
"functional_scaffold.api.routes.get_job_manager", new_callable=AsyncMock
|
||||
) as mock_get_manager:
|
||||
mock_manager = MagicMock()
|
||||
mock_manager.is_available.return_value = True
|
||||
@@ -259,7 +259,7 @@ class TestJobsAPI:
|
||||
def test_create_job_service_unavailable(self, client):
|
||||
"""测试服务不可用时创建任务"""
|
||||
with patch(
|
||||
"src.functional_scaffold.api.routes.get_job_manager", new_callable=AsyncMock
|
||||
"functional_scaffold.api.routes.get_job_manager", new_callable=AsyncMock
|
||||
) as mock_get_manager:
|
||||
mock_manager = MagicMock()
|
||||
mock_manager.is_available.return_value = False
|
||||
@@ -278,7 +278,7 @@ class TestJobsAPI:
|
||||
def test_get_job_status_success(self, client):
|
||||
"""测试成功查询任务状态"""
|
||||
with patch(
|
||||
"src.functional_scaffold.api.routes.get_job_manager", new_callable=AsyncMock
|
||||
"functional_scaffold.api.routes.get_job_manager", new_callable=AsyncMock
|
||||
) as mock_get_manager:
|
||||
mock_manager = MagicMock()
|
||||
mock_manager.is_available.return_value = True
|
||||
@@ -308,7 +308,7 @@ class TestJobsAPI:
|
||||
def test_get_job_status_not_found(self, client):
|
||||
"""测试查询不存在的任务"""
|
||||
with patch(
|
||||
"src.functional_scaffold.api.routes.get_job_manager", new_callable=AsyncMock
|
||||
"functional_scaffold.api.routes.get_job_manager", new_callable=AsyncMock
|
||||
) as mock_get_manager:
|
||||
mock_manager = MagicMock()
|
||||
mock_manager.is_available.return_value = True
|
||||
@@ -324,7 +324,7 @@ class TestJobsAPI:
|
||||
def test_get_job_status_service_unavailable(self, client):
|
||||
"""测试服务不可用时查询任务"""
|
||||
with patch(
|
||||
"src.functional_scaffold.api.routes.get_job_manager", new_callable=AsyncMock
|
||||
"functional_scaffold.api.routes.get_job_manager", new_callable=AsyncMock
|
||||
) as mock_get_manager:
|
||||
mock_manager = MagicMock()
|
||||
mock_manager.is_available.return_value = False
|
||||
@@ -395,7 +395,7 @@ class TestWebhook:
|
||||
manager._http_client = mock_http
|
||||
|
||||
# 使用较短的重试间隔进行测试
|
||||
with patch("src.functional_scaffold.core.job_manager.settings") as mock_settings:
|
||||
with patch("functional_scaffold.core.job_manager.settings") as mock_settings:
|
||||
mock_settings.webhook_max_retries = 2
|
||||
mock_settings.webhook_timeout = 1
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ class TestMetricsManager:
|
||||
@pytest.fixture
|
||||
def manager(self, mock_redis):
|
||||
"""创建测试用的 MetricsManager"""
|
||||
from src.functional_scaffold.core.metrics_unified import (
|
||||
from functional_scaffold.core.metrics_unified import (
|
||||
MetricsManager,
|
||||
reset_metrics_manager,
|
||||
)
|
||||
@@ -108,7 +108,7 @@ class TestConvenienceFunctions:
|
||||
@pytest.fixture(autouse=True)
|
||||
def setup(self):
|
||||
"""每个测试前重置管理器"""
|
||||
from src.functional_scaffold.core.metrics_unified import reset_metrics_manager
|
||||
from functional_scaffold.core.metrics_unified import reset_metrics_manager
|
||||
|
||||
reset_metrics_manager()
|
||||
|
||||
@@ -119,7 +119,7 @@ class TestConvenienceFunctions:
|
||||
mock_instance.ping.return_value = True
|
||||
mock_redis_class.return_value = mock_instance
|
||||
|
||||
from src.functional_scaffold.core.metrics_unified import incr, reset_metrics_manager
|
||||
from functional_scaffold.core.metrics_unified import incr, reset_metrics_manager
|
||||
|
||||
reset_metrics_manager()
|
||||
incr("http_requests_total", {"method": "GET", "endpoint": "/", "status": "success"})
|
||||
@@ -133,7 +133,7 @@ class TestConvenienceFunctions:
|
||||
mock_instance.ping.return_value = True
|
||||
mock_redis_class.return_value = mock_instance
|
||||
|
||||
from src.functional_scaffold.core.metrics_unified import reset_metrics_manager, set
|
||||
from functional_scaffold.core.metrics_unified import reset_metrics_manager, set
|
||||
|
||||
reset_metrics_manager()
|
||||
set("http_requests_in_progress", {}, 10)
|
||||
@@ -149,7 +149,7 @@ class TestConvenienceFunctions:
|
||||
mock_instance.pipeline.return_value = mock_pipeline
|
||||
mock_redis_class.return_value = mock_instance
|
||||
|
||||
from src.functional_scaffold.core.metrics_unified import observe, reset_metrics_manager
|
||||
from functional_scaffold.core.metrics_unified import observe, reset_metrics_manager
|
||||
|
||||
reset_metrics_manager()
|
||||
observe("http_request_duration_seconds", {"method": "GET", "endpoint": "/"}, 0.1)
|
||||
@@ -168,7 +168,7 @@ class TestExport:
|
||||
mock_instance.hgetall.return_value = {"method=GET,endpoint=/,status=success": "10"}
|
||||
mock_redis_class.return_value = mock_instance
|
||||
|
||||
from src.functional_scaffold.core.metrics_unified import export, reset_metrics_manager
|
||||
from functional_scaffold.core.metrics_unified import export, reset_metrics_manager
|
||||
|
||||
reset_metrics_manager()
|
||||
output = export()
|
||||
@@ -192,7 +192,7 @@ class TestExport:
|
||||
mock_instance.hget.return_value = "3"
|
||||
mock_redis_class.return_value = mock_instance
|
||||
|
||||
from src.functional_scaffold.core.metrics_unified import export, reset_metrics_manager
|
||||
from functional_scaffold.core.metrics_unified import export, reset_metrics_manager
|
||||
|
||||
reset_metrics_manager()
|
||||
output = export()
|
||||
@@ -206,7 +206,7 @@ class TestEnvVarSubstitution:
|
||||
def test_substitute_env_vars(self):
|
||||
"""测试环境变量替换"""
|
||||
import os
|
||||
from src.functional_scaffold.core.metrics_unified import MetricsManager
|
||||
from functional_scaffold.core.metrics_unified import MetricsManager
|
||||
|
||||
# 设置测试环境变量
|
||||
os.environ["TEST_VAR"] = "test_value"
|
||||
@@ -235,7 +235,7 @@ class TestTrackAlgorithmExecution:
|
||||
mock_instance.pipeline.return_value = mock_pipeline
|
||||
mock_redis_class.return_value = mock_instance
|
||||
|
||||
from src.functional_scaffold.core.metrics_unified import (
|
||||
from functional_scaffold.core.metrics_unified import (
|
||||
reset_metrics_manager,
|
||||
track_algorithm_execution,
|
||||
)
|
||||
@@ -258,7 +258,7 @@ class TestTrackAlgorithmExecution:
|
||||
mock_instance.pipeline.return_value = mock_pipeline
|
||||
mock_redis_class.return_value = mock_instance
|
||||
|
||||
from src.functional_scaffold.core.metrics_unified import (
|
||||
from functional_scaffold.core.metrics_unified import (
|
||||
reset_metrics_manager,
|
||||
track_algorithm_execution,
|
||||
)
|
||||
|
||||
@@ -4,7 +4,7 @@ import pytest
|
||||
from unittest.mock import patch, MagicMock
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from src.functional_scaffold.main import app, normalize_path
|
||||
from functional_scaffold.main import app, normalize_path
|
||||
|
||||
|
||||
class TestNormalizePath:
|
||||
@@ -32,10 +32,10 @@ class TestNormalizePath:
|
||||
class TestMetricsMiddleware:
|
||||
"""测试指标中间件"""
|
||||
|
||||
@patch("src.functional_scaffold.main.incr")
|
||||
@patch("src.functional_scaffold.main.observe")
|
||||
@patch("src.functional_scaffold.main.gauge_incr")
|
||||
@patch("src.functional_scaffold.main.gauge_decr")
|
||||
@patch("functional_scaffold.main.incr")
|
||||
@patch("functional_scaffold.main.observe")
|
||||
@patch("functional_scaffold.main.gauge_incr")
|
||||
@patch("functional_scaffold.main.gauge_decr")
|
||||
def test_skip_health_endpoints(self, mock_gauge_decr, mock_gauge_incr, mock_observe, mock_incr):
|
||||
"""测试跳过健康检查端点"""
|
||||
client = TestClient(app)
|
||||
@@ -51,10 +51,10 @@ class TestMetricsMiddleware:
|
||||
mock_gauge_incr.assert_not_called()
|
||||
mock_gauge_decr.assert_not_called()
|
||||
|
||||
@patch("src.functional_scaffold.main.incr")
|
||||
@patch("src.functional_scaffold.main.observe")
|
||||
@patch("src.functional_scaffold.main.gauge_incr")
|
||||
@patch("src.functional_scaffold.main.gauge_decr")
|
||||
@patch("functional_scaffold.main.incr")
|
||||
@patch("functional_scaffold.main.observe")
|
||||
@patch("functional_scaffold.main.gauge_incr")
|
||||
@patch("functional_scaffold.main.gauge_decr")
|
||||
def test_record_normal_endpoints(self, mock_gauge_decr, mock_gauge_incr, mock_observe, mock_incr):
|
||||
"""测试记录普通端点"""
|
||||
client = TestClient(app)
|
||||
@@ -72,11 +72,11 @@ class TestMetricsMiddleware:
|
||||
incr_call_args = mock_incr.call_args
|
||||
assert incr_call_args[0][1]["endpoint"] == "/invoke"
|
||||
|
||||
@patch("src.functional_scaffold.main.incr")
|
||||
@patch("src.functional_scaffold.main.observe")
|
||||
@patch("src.functional_scaffold.main.gauge_incr")
|
||||
@patch("src.functional_scaffold.main.gauge_decr")
|
||||
@patch("src.functional_scaffold.core.job_manager.get_job_manager")
|
||||
@patch("functional_scaffold.main.incr")
|
||||
@patch("functional_scaffold.main.observe")
|
||||
@patch("functional_scaffold.main.gauge_incr")
|
||||
@patch("functional_scaffold.main.gauge_decr")
|
||||
@patch("functional_scaffold.core.job_manager.get_job_manager")
|
||||
def test_normalize_job_path(self, mock_get_manager, mock_gauge_decr, mock_gauge_incr, mock_observe, mock_incr):
|
||||
"""测试规范化任务路径"""
|
||||
# Mock job manager
|
||||
|
||||
Reference in New Issue
Block a user