feat: add message to ProgressNotification (#435)

Co-authored-by: ihrpr <inna.hrpr@gmail.com>
This commit is contained in:
Akshey D
2025-05-13 10:40:15 -07:00
committed by GitHub
parent c5782129bc
commit 9e66f7ce89
9 changed files with 387 additions and 12 deletions

View File

@@ -952,13 +952,14 @@ class Context(BaseModel, Generic[ServerSessionT, LifespanContextT]):
return self._request_context
async def report_progress(
self, progress: float, total: float | None = None
self, progress: float, total: float | None = None, message: str | None = None
) -> None:
"""Report progress for the current operation.
Args:
progress: Current progress value e.g. 24
total: Optional total value e.g. 100
message: Optional message e.g. Starting render...
"""
progress_token = (
@@ -971,7 +972,10 @@ class Context(BaseModel, Generic[ServerSessionT, LifespanContextT]):
return
await self.request_context.session.send_progress_notification(
progress_token=progress_token, progress=progress, total=total
progress_token=progress_token,
progress=progress,
total=total,
message=message,
)
async def read_resource(self, uri: str | AnyUrl) -> Iterable[ReadResourceContents]:

View File

@@ -37,7 +37,8 @@ Usage:
3. Define notification handlers if needed:
@server.progress_notification()
async def handle_progress(
progress_token: str | int, progress: float, total: float | None
progress_token: str | int, progress: float, total: float | None,
message: str | None
) -> None:
# Implementation
@@ -427,13 +428,18 @@ class Server(Generic[LifespanResultT]):
def progress_notification(self):
def decorator(
func: Callable[[str | int, float, float | None], Awaitable[None]],
func: Callable[
[str | int, float, float | None, str | None], Awaitable[None]
],
):
logger.debug("Registering handler for ProgressNotification")
async def handler(req: types.ProgressNotification):
await func(
req.params.progressToken, req.params.progress, req.params.total
req.params.progressToken,
req.params.progress,
req.params.total,
req.params.message,
)
self.notification_handlers[types.ProgressNotification] = handler

View File

@@ -282,6 +282,7 @@ class ServerSession(
progress_token: str | int,
progress: float,
total: float | None = None,
message: str | None = None,
related_request_id: str | None = None,
) -> None:
"""Send a progress notification."""
@@ -293,6 +294,7 @@ class ServerSession(
progressToken=progress_token,
progress=progress,
total=total,
message=message,
),
)
),