|
1 | | -from typing import Literal |
| 1 | +from typing import Any, Literal |
2 | 2 |
|
3 | 3 | import pytest |
4 | 4 |
|
@@ -47,6 +47,24 @@ async def test_tool_with_log( |
47 | 47 | ) |
48 | 48 | return True |
49 | 49 |
|
| 50 | + @server.tool("test_tool_with_log_extra") |
| 51 | + async def test_tool_with_log_extra( |
| 52 | + message: str, |
| 53 | + level: Literal["debug", "info", "warning", "error"], |
| 54 | + logger: str, |
| 55 | + extra_string: str, |
| 56 | + extra_dict: dict[str, Any], |
| 57 | + ) -> bool: |
| 58 | + """Send a log notification to the client with extra fields.""" |
| 59 | + await server.get_context().log( |
| 60 | + level=level, |
| 61 | + message=message, |
| 62 | + logger_name=logger, |
| 63 | + extra_string=extra_string, |
| 64 | + extra_dict=extra_dict, |
| 65 | + ) |
| 66 | + return True |
| 67 | + |
50 | 68 | # Create a message handler to catch exceptions |
51 | 69 | async def message_handler( |
52 | 70 | message: RequestResponder[types.ServerRequest, types.ClientResult] | types.ServerNotification | Exception, |
@@ -74,10 +92,30 @@ async def message_handler( |
74 | 92 | "logger": "test_logger", |
75 | 93 | }, |
76 | 94 | ) |
| 95 | + log_result_with_extra = await client_session.call_tool( |
| 96 | + "test_tool_with_log_extra", |
| 97 | + { |
| 98 | + "message": "Test log message", |
| 99 | + "level": "info", |
| 100 | + "logger": "test_logger", |
| 101 | + "extra_string": "example", |
| 102 | + "extra_dict": {"a": 1, "b": 2, "c": 3}, |
| 103 | + }, |
| 104 | + ) |
77 | 105 | assert log_result.isError is False |
78 | | - assert len(logging_collector.log_messages) == 1 |
| 106 | + assert log_result_with_extra.isError is False |
| 107 | + assert len(logging_collector.log_messages) == 2 |
79 | 108 | # Create meta object with related_request_id added dynamically |
80 | 109 | log = logging_collector.log_messages[0] |
81 | 110 | assert log.level == "info" |
82 | 111 | assert log.logger == "test_logger" |
83 | 112 | assert log.data == "Test log message" |
| 113 | + |
| 114 | + log_with_extra = logging_collector.log_messages[1] |
| 115 | + assert log_with_extra.level == "info" |
| 116 | + assert log_with_extra.logger == "test_logger" |
| 117 | + assert log_with_extra.data == { |
| 118 | + "message": "Test log message", |
| 119 | + "extra_string": "example", |
| 120 | + "extra_dict": {"a": 1, "b": 2, "c": 3}, |
| 121 | + } |
0 commit comments