feat: 编辑器实时探测并显示已关联虚拟环境
fix: 按系统 ANSI 代码页解码子进程输出,修复中文日志乱码
This commit is contained in:
@@ -14,6 +14,9 @@ use utoipa::{OpenApi, ToSchema};
|
||||
use crate::{
|
||||
cron::{self, CronPreviewRequest, CronPreviewResponse},
|
||||
error::{ApiError, ApiJson, ApiResult, ErrorResponse},
|
||||
python_env::{
|
||||
self, InterpreterKind, VenvProbeRequest, VenvProbeResponse, VenvProbeStatus, VenvSource,
|
||||
},
|
||||
runs::{
|
||||
model::{LogChunkResponse, TaskRunListResponse, TaskRunResponse},
|
||||
routes::{
|
||||
@@ -107,6 +110,25 @@ pub async fn preview_cron(
|
||||
Ok(Json(preview))
|
||||
}
|
||||
|
||||
#[utoipa::path(
|
||||
post,
|
||||
path = "/api/v1/python/venv",
|
||||
tag = "system",
|
||||
request_body = VenvProbeRequest,
|
||||
responses(
|
||||
(status = 200, description = "Detected Python virtual environment", body = VenvProbeResponse),
|
||||
(status = 400, description = "Invalid venv probe request", body = ErrorResponse)
|
||||
)
|
||||
)]
|
||||
pub async fn probe_python_venv(
|
||||
ApiJson(request): ApiJson<VenvProbeRequest>,
|
||||
) -> ApiResult<Json<VenvProbeResponse>> {
|
||||
tokio::task::spawn_blocking(move || python_env::probe_venv(&request))
|
||||
.await
|
||||
.map(Json)
|
||||
.map_err(ApiError::internal)
|
||||
}
|
||||
|
||||
#[derive(OpenApi)]
|
||||
#[openapi(
|
||||
info(
|
||||
@@ -118,6 +140,7 @@ pub async fn preview_cron(
|
||||
health,
|
||||
session,
|
||||
preview_cron,
|
||||
probe_python_venv,
|
||||
list_tasks,
|
||||
create_task,
|
||||
get_task,
|
||||
@@ -138,6 +161,11 @@ pub async fn preview_cron(
|
||||
SessionResponse,
|
||||
CronPreviewRequest,
|
||||
CronPreviewResponse,
|
||||
VenvProbeRequest,
|
||||
VenvProbeResponse,
|
||||
VenvProbeStatus,
|
||||
VenvSource,
|
||||
InterpreterKind,
|
||||
ErrorResponse,
|
||||
TaskActionType,
|
||||
HttpMethod,
|
||||
@@ -183,6 +211,10 @@ pub fn router(state: AppState) -> Router {
|
||||
.route("/api/v1/health", get(health))
|
||||
.route("/api/v1/session", get(session))
|
||||
.route("/api/v1/cron/preview", axum::routing::post(preview_cron))
|
||||
.route(
|
||||
"/api/v1/python/venv",
|
||||
axum::routing::post(probe_python_venv),
|
||||
)
|
||||
.route("/api/v1/openapi.json", get(openapi_json))
|
||||
.merge(crate::tasks::routes::router())
|
||||
.merge(crate::runs::routes::router())
|
||||
|
||||
Reference in New Issue
Block a user