mirror of
https://github.com/hansjone/netx.git
synced 2026-10-09 03:10:46 +08:00
feat(cli): UME lazy exec via shared profiles and ume_ne_id MCP support
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
ba1a40f725
commit
38a1c7f3a9
21 changed files with 1504 additions and 54 deletions
91
netx_api/cli_router.py
Normal file
91
netx_api/cli_router.py
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from .cli_schemas import (
|
||||
CliConnectProfileCreate,
|
||||
CliConnectProfileUpdate,
|
||||
UmeCliOverrideUpdate,
|
||||
UmeConnectTestRequest,
|
||||
)
|
||||
from .cli_service import (
|
||||
cli_meta,
|
||||
create_cli_profile,
|
||||
delete_cli_profile,
|
||||
get_cli_profile,
|
||||
get_ume_cli_override,
|
||||
list_cli_profiles,
|
||||
list_cli_targets,
|
||||
set_default_cli_profile,
|
||||
update_cli_profile,
|
||||
upsert_ume_cli_override,
|
||||
)
|
||||
from .db import get_db
|
||||
from .ne_connect import schedule_ume_connect_tests
|
||||
|
||||
router = APIRouter(prefix="/v1/cli", tags=["cli"])
|
||||
|
||||
|
||||
@router.get("/meta")
|
||||
def api_cli_meta(db: Session = Depends(get_db)):
|
||||
return cli_meta(db)
|
||||
|
||||
|
||||
@router.get("/profiles")
|
||||
def api_list_cli_profiles(db: Session = Depends(get_db)):
|
||||
return {"items": [x.model_dump() for x in list_cli_profiles(db)]}
|
||||
|
||||
|
||||
@router.post("/profiles")
|
||||
def api_create_cli_profile(body: CliConnectProfileCreate, db: Session = Depends(get_db)):
|
||||
return create_cli_profile(db, body).model_dump()
|
||||
|
||||
|
||||
@router.get("/profiles/{profile_id}")
|
||||
def api_get_cli_profile(profile_id: str, db: Session = Depends(get_db)):
|
||||
return get_cli_profile(db, profile_id).model_dump()
|
||||
|
||||
|
||||
@router.patch("/profiles/{profile_id}")
|
||||
def api_update_cli_profile(profile_id: str, body: CliConnectProfileUpdate, db: Session = Depends(get_db)):
|
||||
return update_cli_profile(db, profile_id, body).model_dump()
|
||||
|
||||
|
||||
@router.post("/profiles/{profile_id}/default")
|
||||
def api_set_default_cli_profile(profile_id: str, db: Session = Depends(get_db)):
|
||||
return set_default_cli_profile(db, profile_id).model_dump()
|
||||
|
||||
|
||||
@router.delete("/profiles/{profile_id}")
|
||||
def api_delete_cli_profile(profile_id: str, db: Session = Depends(get_db)):
|
||||
return delete_cli_profile(db, profile_id)
|
||||
|
||||
|
||||
@router.get("/targets")
|
||||
def api_list_cli_targets(
|
||||
source: str = Query(default="all"),
|
||||
keyword: str | None = Query(default=None),
|
||||
page: int = Query(default=1, ge=1),
|
||||
page_size: int = Query(default=50, ge=1, le=500),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
return list_cli_targets(db, source=source, keyword=keyword, page=page, page_size=page_size)
|
||||
|
||||
|
||||
@router.get("/ume-overrides/{ume_ne_id}")
|
||||
def api_get_ume_cli_override(ume_ne_id: str, db: Session = Depends(get_db)):
|
||||
row = get_ume_cli_override(db, ume_ne_id)
|
||||
return row.model_dump() if row else None
|
||||
|
||||
|
||||
@router.patch("/ume-overrides/{ume_ne_id}")
|
||||
def api_upsert_ume_cli_override(ume_ne_id: str, body: UmeCliOverrideUpdate, db: Session = Depends(get_db)):
|
||||
return upsert_ume_cli_override(db, ume_ne_id, body).model_dump()
|
||||
|
||||
|
||||
@router.post("/ume-connect-test")
|
||||
def api_ume_connect_test(body: UmeConnectTestRequest, db: Session = Depends(get_db)):
|
||||
ids = [str(x).strip() for x in body.ume_ne_ids if str(x).strip()]
|
||||
submitted = schedule_ume_connect_tests(ids)
|
||||
return {"ok": True, "submitted": submitted}
|
||||
Loading…
Add table
Add a link
Reference in a new issue