Skip to content

Commit a6ba4c4

Browse files
committed
Testing lint checker3
1 parent db1af61 commit a6ba4c4

File tree

2 files changed

+39
-39
lines changed

2 files changed

+39
-39
lines changed

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/mcpinstrumentor/mcpinstrumentor.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ class MCPInstrumentor(BaseInstrumentor):
2929
An instrumenter for MCP.
3030
"""
3131

32-
def __init__(self):
32+
def __init__(self): # pylint: disable=no-self-use
3333
super().__init__()
3434
self.tracer = None
3535

3636
# Send Request Wrapper
37-
def _wrap_send_request(self, wrapped, instance, args, kwargs):
37+
def _wrap_send_request(self, wrapped, instance, args, kwargs): # pylint: disable=no-self-use
3838
"""
3939
Changes made:
4040
The wrapper intercepts the request before sending, injects distributed tracing context into the
@@ -43,7 +43,7 @@ def _wrap_send_request(self, wrapped, instance, args, kwargs):
4343
type and calling the original function with identical parameters.
4444
"""
4545

46-
async def async_wrapper():
46+
async def async_wrapper(): # pylint: disable=no-self-use
4747
with self.tracer.start_as_current_span("client.send_request", kind=trace.SpanKind.CLIENT) as span:
4848
span_ctx = span.get_span_context()
4949
request = args[0] if len(args) > 0 else kwargs.get("request")
@@ -68,7 +68,7 @@ async def async_wrapper():
6868
return async_wrapper()
6969

7070
# Handle Request Wrapper
71-
async def _wrap_handle_request(self, wrapped, instance, args, kwargs):
71+
async def _wrap_handle_request(self, wrapped, instance, args, kwargs): # pylint: disable=no-self-use
7272
"""
7373
Changes made:
7474
This wrapper intercepts requests before processing, extracts distributed tracing context from
@@ -140,7 +140,7 @@ def _get_span_name(self, req): # pylint: disable=no-self-use
140140
span_name = "unknown"
141141
return span_name
142142

143-
def handle_attributes(self, span, request, is_client=True):
143+
def handle_attributes(self, span, request, is_client=True): # pylint: disable=no-self-use
144144
import mcp.types as types # pylint: disable=import-outside-toplevel,consider-using-from-import
145145

146146
operation = self._get_span_name(request)
@@ -167,10 +167,10 @@ def _add_server_attributes(self, span, operation, request): # pylint: disable=n
167167
if hasattr(request, "params") and hasattr(request.params, "name"):
168168
span.set_attribute("tool.name", request.params.name)
169169

170-
def instrumentation_dependencies(self) -> Collection[str]:
170+
def instrumentation_dependencies(self) -> Collection[str]: # pylint: disable=no-self-use
171171
return _instruments
172172

173-
def _instrument(self, **kwargs: Any) -> None:
173+
def _instrument(self, **kwargs: Any) -> None: # pylint: disable=no-self-use
174174
tracer_provider = kwargs.get("tracer_provider")
175175
if tracer_provider:
176176
self.tracer = tracer_provider.get_tracer("mcp")
@@ -193,6 +193,6 @@ def _instrument(self, **kwargs: Any) -> None:
193193
"mcp.server.lowlevel.server",
194194
)
195195

196-
def _uninstrument(self, **kwargs: Any) -> None:
196+
def _uninstrument(self, **kwargs: Any) -> None: # pylint: disable=no-self-use
197197
unwrap("mcp.shared.session", "BaseSession.send_request")
198198
unwrap("mcp.server.lowlevel.server", "Server._handle_request")

aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_mcpinstrumentor.py

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,19 @@
2323
class SimpleSpanContext:
2424
"""Simple mock span context without using MagicMock"""
2525

26-
def __init__(self, trace_id, span_id):
26+
def __init__(self, trace_id, span_id): # pylint: disable=no-self-use
2727
self.trace_id = trace_id
2828
self.span_id = span_id
2929

3030

3131
class SimpleTracerProvider:
3232
"""Simple mock tracer provider without using MagicMock"""
3333

34-
def __init__(self):
34+
def __init__(self): # pylint: disable=no-self-use
3535
self.get_tracer_called = False
3636
self.tracer_name = None
3737

38-
def get_tracer(self, name):
38+
def get_tracer(self, name): # pylint: disable=no-self-use
3939
self.get_tracer_called = True
4040
self.tracer_name = name
4141
return "mock_tracer_from_provider"
@@ -44,10 +44,10 @@ def get_tracer(self, name):
4444
class TestInjectTraceContext(unittest.TestCase):
4545
"""Test the _inject_trace_context method"""
4646

47-
def setUp(self):
47+
def setUp(self): # pylint: disable=no-self-use
4848
self.instrumentor = MCPInstrumentor()
4949

50-
def test_inject_trace_context_empty_dict(self):
50+
def test_inject_trace_context_empty_dict(self): # pylint: disable=no-self-use
5151
"""Test injecting trace context into empty dictionary"""
5252
# Setup
5353
request_data = {}
@@ -70,7 +70,7 @@ def test_inject_trace_context_empty_dict(self):
7070
self.assertEqual(int(parts[1], 16), 12345) # trace_id
7171
self.assertEqual(int(parts[2], 16), 67890) # span_id
7272

73-
def test_inject_trace_context_existing_params(self):
73+
def test_inject_trace_context_existing_params(self): # pylint: disable=no-self-use
7474
"""Test injecting trace context when params already exist"""
7575
# Setup
7676
request_data = {"params": {"existing_field": "test_value"}}
@@ -94,13 +94,13 @@ def test_inject_trace_context_existing_params(self):
9494
class TestTracerProvider(unittest.TestCase):
9595
"""Test the tracer provider kwargs logic in _instrument method"""
9696

97-
def setUp(self):
97+
def setUp(self): # pylint: disable=no-self-use
9898
self.instrumentor = MCPInstrumentor()
9999
# Reset tracer to ensure test isolation
100100
if hasattr(self.instrumentor, "tracer"):
101101
delattr(self.instrumentor, "tracer")
102102

103-
def test_instrument_without_tracer_provider_kwargs(self):
103+
def test_instrument_without_tracer_provider_kwargs(self): # pylint: disable=no-self-use
104104
"""Test _instrument method when no tracer_provider in kwargs - should use default tracer"""
105105
# Execute - Actually test the mcpinstrumentor method
106106
with unittest.mock.patch("opentelemetry.trace.get_tracer") as mock_get_tracer:
@@ -112,7 +112,7 @@ def test_instrument_without_tracer_provider_kwargs(self):
112112
self.assertEqual(self.instrumentor.tracer, "default_tracer")
113113
mock_get_tracer.assert_called_with("mcp")
114114

115-
def test_instrument_with_tracer_provider_kwargs(self):
115+
def test_instrument_with_tracer_provider_kwargs(self): # pylint: disable=no-self-use
116116
"""Test _instrument method when tracer_provider is in kwargs - should use provider's tracer"""
117117
# Setup
118118
provider = SimpleTracerProvider()
@@ -130,10 +130,10 @@ def test_instrument_with_tracer_provider_kwargs(self):
130130
class TestInstrumentationDependencies(unittest.TestCase):
131131
"""Test the instrumentation_dependencies method"""
132132

133-
def setUp(self):
133+
def setUp(self): # pylint: disable=no-self-use
134134
self.instrumentor = MCPInstrumentor()
135135

136-
def test_instrumentation_dependencies(self):
136+
def test_instrumentation_dependencies(self): # pylint: disable=no-self-use
137137
"""Test that instrumentation_dependencies method returns the expected dependencies"""
138138
# Execute - Actually test the mcpinstrumentor method
139139
dependencies = self.instrumentor.instrumentation_dependencies()
@@ -147,19 +147,19 @@ def test_instrumentation_dependencies(self):
147147
class TestTraceContextInjection(unittest.TestCase):
148148
"""Test trace context injection using actual mcpinstrumentor methods"""
149149

150-
def setUp(self):
150+
def setUp(self): # pylint: disable=no-self-use
151151
self.instrumentor = MCPInstrumentor()
152152

153-
def test_trace_context_injection_with_realistic_request(self):
153+
def test_trace_context_injection_with_realistic_request(self): # pylint: disable=no-self-use
154154
"""Test actual trace context injection using mcpinstrumentor._inject_trace_context with realistic MCP request"""
155155

156156
# Create a realistic MCP request structure
157157
class CallToolRequest:
158-
def __init__(self, tool_name, arguments=None):
158+
def __init__(self, tool_name, arguments=None): # pylint: disable=no-self-use
159159
self.root = self
160160
self.params = CallToolParams(tool_name, arguments)
161161

162-
def model_dump(self, by_alias=True, mode="json", exclude_none=True):
162+
def model_dump(self, by_alias=True, mode="json", exclude_none=True): # pylint: disable=no-self-use
163163
result = {"method": "call_tool", "params": {"name": self.params.name}}
164164
if self.params.arguments:
165165
result["params"]["arguments"] = self.params.arguments
@@ -169,15 +169,15 @@ def model_dump(self, by_alias=True, mode="json", exclude_none=True):
169169
return result
170170

171171
@classmethod
172-
def model_validate(cls, data):
172+
def model_validate(cls, data): # pylint: disable=no-self-use
173173
instance = cls(data["params"]["name"], data["params"].get("arguments"))
174174
# Restore _meta field if present
175175
if "_meta" in data["params"]:
176176
instance.params._meta = data["params"]["_meta"]
177177
return instance
178178

179179
class CallToolParams:
180-
def __init__(self, name, arguments=None):
180+
def __init__(self, name, arguments=None): # pylint: disable=no-self-use
181181
self.name = name
182182
self.arguments = arguments
183183
self._meta = None # Will hold trace context
@@ -214,7 +214,7 @@ def __init__(self, name, arguments=None):
214214
class TestInstrumentedMCPServer(unittest.TestCase):
215215
"""Test mcpinstrumentor with a mock MCP server to verify end-to-end functionality"""
216216

217-
def setUp(self):
217+
def setUp(self): # pylint: disable=no-self-use
218218
self.instrumentor = MCPInstrumentor()
219219
# Initialize tracer so the instrumentor can work
220220
mock_tracer = MagicMock()
@@ -224,15 +224,15 @@ def test_no_trace_context_fallback(self): # pylint: disable=no-self-use
224224
"""Test graceful handling when no trace context is present on server side"""
225225

226226
class MockServerNoTrace:
227-
async def _handle_request(self, session, request):
227+
async def _handle_request(self, session, request): # pylint: disable=no-self-use
228228
return {"success": True, "handled_without_trace": True}
229229

230230
class MockServerRequestNoTrace:
231-
def __init__(self, tool_name):
231+
def __init__(self, tool_name): # pylint: disable=no-self-use
232232
self.params = MockServerRequestParamsNoTrace(tool_name)
233233

234234
class MockServerRequestParamsNoTrace:
235-
def __init__(self, name):
235+
def __init__(self, name): # pylint: disable=no-self-use
236236
self.name = name
237237
self.meta = None # No trace context
238238

@@ -269,12 +269,12 @@ def test_end_to_end_client_server_communication(self): # pylint: disable=too-ma
269269

270270
# Create realistic request/response classes
271271
class MCPRequest:
272-
def __init__(self, tool_name, arguments=None, method="call_tool"):
272+
def __init__(self, tool_name, arguments=None, method="call_tool"): # pylint: disable=no-self-use
273273
self.root = self
274274
self.params = MCPRequestParams(tool_name, arguments)
275275
self.method = method
276276

277-
def model_dump(self, by_alias=True, mode="json", exclude_none=True):
277+
def model_dump(self, by_alias=True, mode="json", exclude_none=True): # pylint: disable=no-self-use
278278
result = {"method": self.method, "params": {"name": self.params.name}}
279279
if self.params.arguments:
280280
result["params"]["arguments"] = self.params.arguments
@@ -284,7 +284,7 @@ def model_dump(self, by_alias=True, mode="json", exclude_none=True):
284284
return result
285285

286286
@classmethod
287-
def model_validate(cls, data):
287+
def model_validate(cls, data): # pylint: disable=no-self-use
288288
method = data.get("method", "call_tool")
289289
instance = cls(data["params"]["name"], data["params"].get("arguments"), method)
290290
# Restore _meta field if present
@@ -293,19 +293,19 @@ def model_validate(cls, data):
293293
return instance
294294

295295
class MCPRequestParams:
296-
def __init__(self, name, arguments=None):
296+
def __init__(self, name, arguments=None): # pylint: disable=no-self-use
297297
self.name = name
298298
self.arguments = arguments
299299
self._meta = None
300300

301301
class MCPServerRequest:
302-
def __init__(self, client_request_data):
302+
def __init__(self, client_request_data): # pylint: disable=no-self-use
303303
"""Server request created from client's serialized data"""
304304
self.method = client_request_data.get("method", "call_tool")
305305
self.params = MCPServerRequestParams(client_request_data["params"])
306306

307307
class MCPServerRequestParams:
308-
def __init__(self, params_data):
308+
def __init__(self, params_data): # pylint: disable=no-self-use
309309
self.name = params_data["name"]
310310
self.arguments = params_data.get("arguments")
311311
# Extract traceparent from _meta if present
@@ -315,16 +315,16 @@ def __init__(self, params_data):
315315
self.meta = None
316316

317317
class MCPServerRequestMeta:
318-
def __init__(self, traceparent):
318+
def __init__(self, traceparent): # pylint: disable=no-self-use
319319
self.traceparent = traceparent
320320

321321
# Mock client and server that actually communicate
322322
class EndToEndMCPSystem:
323-
def __init__(self):
323+
def __init__(self): # pylint: disable=no-self-use
324324
self.communication_log = []
325325
self.last_sent_request = None
326326

327-
async def client_send_request(self, request):
327+
async def client_send_request(self, request): # pylint: disable=no-self-use
328328
"""Client sends request - captures what gets sent"""
329329
self.communication_log.append("CLIENT: Preparing to send request")
330330
self.last_sent_request = request # Capture the modified request
@@ -336,7 +336,7 @@ async def client_send_request(self, request):
336336
# Return client response
337337
return {"success": True, "client_response": "Request sent successfully"}
338338

339-
async def server_handle_request(self, session, server_request):
339+
async def server_handle_request(self, session, server_request): # pylint: disable=no-self-use
340340
"""Server handles the request it received"""
341341
self.communication_log.append(f"SERVER: Received request for {server_request.params.name}")
342342

0 commit comments

Comments
 (0)