86 lines
4.0 KiB
Python
86 lines
4.0 KiB
Python
from __future__ import annotations
|
|
|
|
from collections.abc import Callable
|
|
from typing import Annotated, Any
|
|
|
|
from pydantic import Field
|
|
|
|
SafeResult = Callable[[Callable[[], dict[str, Any]]], dict[str, Any]]
|
|
SafeRawResult = Callable[[bool, Callable[[], dict[str, Any]]], dict[str, Any]]
|
|
|
|
|
|
def register_write_tools(server: Any, project_service: Any, safe_result: SafeResult) -> None:
|
|
@server.tool()
|
|
def create_project(
|
|
name: Annotated[str, Field(description="Project name. It must not be blank.")],
|
|
customer_id: Annotated[Any | None, Field(description="Optional NocoBase customer ID.")] = None,
|
|
inquiry_date: Annotated[
|
|
str | None, Field(description="Optional project inquiry date in YYYY-MM-DD format.")
|
|
] = None,
|
|
progress: Annotated[
|
|
str | None, Field(description="Optional configured Chinese project progress label.")
|
|
] = None,
|
|
applications: Annotated[str | None, Field(description="Optional project applications.")] = None,
|
|
part_numbers: Annotated[str | None, Field(description="Optional project part numbers.")] = None,
|
|
period_usage: Annotated[str | None, Field(description="Optional project period usage.")] = None,
|
|
details: Annotated[str | None, Field(description="Optional project details.")] = None,
|
|
attachment_ids: Annotated[
|
|
list[Any] | None, Field(description="Optional uploaded attachment IDs to associate.")
|
|
] = None,
|
|
) -> dict[str, Any]:
|
|
"""Create one fixed-schema NocoBase project and optionally associate uploaded attachments."""
|
|
assert project_service is not None
|
|
return safe_result(
|
|
lambda: project_service.create_project(
|
|
name=name,
|
|
customer_id=customer_id,
|
|
inquiry_date=inquiry_date,
|
|
progress=progress,
|
|
applications=applications,
|
|
part_numbers=part_numbers,
|
|
period_usage=period_usage,
|
|
details=details,
|
|
attachment_ids=attachment_ids,
|
|
)
|
|
)
|
|
|
|
@server.tool()
|
|
def update_project(
|
|
project_id: Annotated[Any, Field(description="NocoBase project ID.")],
|
|
name: Annotated[str | None, Field(description="Optional project name.")] = None,
|
|
customer_id: Annotated[Any | None, Field(description="Optional NocoBase customer ID.")] = None,
|
|
inquiry_date: Annotated[
|
|
str | None, Field(description="Optional project inquiry date in YYYY-MM-DD format.")
|
|
] = None,
|
|
progress: Annotated[
|
|
str | None, Field(description="Optional configured Chinese project progress label.")
|
|
] = None,
|
|
applications: Annotated[str | None, Field(description="Optional project applications.")] = None,
|
|
part_numbers: Annotated[str | None, Field(description="Optional project part numbers.")] = None,
|
|
period_usage: Annotated[str | None, Field(description="Optional project period usage.")] = None,
|
|
details: Annotated[str | None, Field(description="Optional project details.")] = None,
|
|
add_attachment_ids: Annotated[
|
|
list[Any] | None, Field(description="Attachment IDs to add incrementally.")
|
|
] = None,
|
|
remove_attachment_ids: Annotated[
|
|
list[Any] | None, Field(description="Attachment IDs to remove incrementally.")
|
|
] = None,
|
|
) -> dict[str, Any]:
|
|
"""Update fixed project fields and incrementally add or remove uploaded attachments."""
|
|
assert project_service is not None
|
|
return safe_result(
|
|
lambda: project_service.update_project(
|
|
project_id,
|
|
name=name,
|
|
customer_id=customer_id,
|
|
inquiry_date=inquiry_date,
|
|
progress=progress,
|
|
applications=applications,
|
|
part_numbers=part_numbers,
|
|
period_usage=period_usage,
|
|
details=details,
|
|
add_attachment_ids=add_attachment_ids,
|
|
remove_attachment_ids=remove_attachment_ids,
|
|
)
|
|
)
|