Skip to content

Commit ba526b8

Browse files
ChrisPC-39Sebastian
andauthored
Pylint improvements (#239)
* Pylint cli * Pylint sampling * Pylint schemas * Pyling completion_services * Pylint resource_service * Pylint streamablehttp_transport * Pylint websocket_transport * Pylint mcpgateway/admin.py * Pylint mcpgateway/federation/discovery.py * Pylint mcpgateway/federation/forward.py * Pylint mcpgateway/federation/manager.py * Pylint mcpgateway/services/prompt_service.py * Pylint mcpgateway/services/server_service.py * Pylint mcpgateway/services/tool_service.py * Pylint mcpgateway/transports/sse_transport.py * Pylint mcpgateway/version.py * Pylint mcpgateway/wrapper.py * Remove unneccessary pylint ignore comments * Load pylint-pydantic plugin in .pylintrc --------- Co-authored-by: Sebastian <[email protected]>
1 parent 962f496 commit ba526b8

18 files changed

+108
-83
lines changed

.pylintrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ limit-inference-results=100
8181

8282
# List of plugins (as comma separated values of python module names) to load,
8383
# usually to register additional checkers.
84-
load-plugins=
84+
load-plugins=pylint_pydantic
8585

8686
# Pickle collected data for later comparisons.
8787
persistent=yes

mcpgateway/admin.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
import logging
2323
from typing import Any, Dict, List, Union
2424

25+
# Third-Party
26+
from fastapi import APIRouter, Depends, HTTPException, Request
27+
from fastapi.responses import HTMLResponse, JSONResponse, RedirectResponse
28+
from sqlalchemy.orm import Session
29+
2530
# First-Party
2631
from mcpgateway.config import settings
2732
from mcpgateway.db import get_db
@@ -59,11 +64,6 @@
5964
from mcpgateway.utils.create_jwt_token import get_jwt_token
6065
from mcpgateway.utils.verify_credentials import require_auth, require_basic_auth
6166

62-
# Third-Party
63-
from fastapi import APIRouter, Depends, HTTPException, Request
64-
from fastapi.responses import HTMLResponse, JSONResponse, RedirectResponse
65-
from sqlalchemy.orm import Session
66-
6767
# Initialize services
6868
server_service = ServerService()
6969
tool_service = ToolService()

mcpgateway/cli.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@
4141
import sys
4242
from typing import List
4343

44-
# First-Party
45-
from mcpgateway import __version__
46-
4744
# Third-Party
4845
import uvicorn
4946

47+
# First-Party
48+
from mcpgateway import __version__
49+
5050
# ---------------------------------------------------------------------------
5151
# Configuration defaults (overridable via environment variables)
5252
# ---------------------------------------------------------------------------

mcpgateway/federation/discovery.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@
2323
from typing import Dict, List, Optional
2424
from urllib.parse import urlparse
2525

26-
# First-Party
27-
from mcpgateway.config import settings
28-
from mcpgateway.types import ServerCapabilities
29-
3026
# Third-Party
3127
import httpx
3228
from zeroconf import ServiceInfo, ServiceStateChange
3329
from zeroconf.asyncio import AsyncServiceBrowser, AsyncZeroconf
3430

31+
# First-Party
32+
from mcpgateway.config import settings
33+
from mcpgateway.types import ServerCapabilities
34+
3535
logger = logging.getLogger(__name__)
3636

3737
PROTOCOL_VERSION = os.getenv("PROTOCOL_VERSION", "2025-03-26")

mcpgateway/federation/forward.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@
1919
import logging
2020
from typing import Any, Dict, List, Optional, Set, Tuple, Union
2121

22+
# Third-Party
23+
import httpx
24+
from sqlalchemy import select
25+
from sqlalchemy.orm import Session
26+
2227
# First-Party
2328
from mcpgateway.config import settings
2429
from mcpgateway.db import Gateway as DbGateway
2530
from mcpgateway.db import Tool as DbTool
2631
from mcpgateway.types import ToolResult
2732

28-
# Third-Party
29-
import httpx
30-
from sqlalchemy import select
31-
from sqlalchemy.orm import Session
32-
3333
logger = logging.getLogger(__name__)
3434

3535

mcpgateway/federation/manager.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
import os
2424
from typing import Any, Dict, List, Optional, Set
2525

26+
# Third-Party
27+
import httpx
28+
from sqlalchemy import select
29+
from sqlalchemy.orm import Session
30+
2631
# First-Party
2732
from mcpgateway.config import settings
2833
from mcpgateway.db import Gateway as DbGateway
@@ -39,11 +44,6 @@
3944
Tool,
4045
)
4146

42-
# Third-Party
43-
import httpx
44-
from sqlalchemy import select
45-
from sqlalchemy.orm import Session
46-
4747
logger = logging.getLogger(__name__)
4848

4949
PROTOCOL_VERSION = os.getenv("PROTOCOL_VERSION", "2025-03-26")

mcpgateway/handlers/sampling.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@
1313
import logging
1414
from typing import Any, Dict, List
1515

16+
# Third-Party
17+
from sqlalchemy.orm import Session
18+
1619
# First-Party
1720
from mcpgateway.types import CreateMessageResult, ModelPreferences, Role, TextContent
1821

19-
# Third-Party
20-
from sqlalchemy.orm import Session
2122

2223
logger = logging.getLogger(__name__)
2324

@@ -94,6 +95,7 @@ async def create_message(self, db: Session, request: Dict[str, Any]) -> CreateMe
9495
if not self._validate_message(msg):
9596
raise SamplingError(f"Invalid message format: {msg}")
9697

98+
# pylint: disable=fixme
9799
# TODO: Sample from selected model
98100
# For now return mock response
99101
response = self._mock_sample(messages=messages)
@@ -160,6 +162,7 @@ async def _add_context(self, _db: Session, messages: List[Dict[str, Any]], _cont
160162
Returns:
161163
Messages with added context
162164
"""
165+
# pylint: disable=fixme
163166
# TODO: Implement context gathering based on type
164167
# For now return original messages
165168
return messages

mcpgateway/schemas.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
import logging
2727
from typing import Any, Dict, List, Literal, Optional, Union
2828

29+
# Third-Party
30+
from pydantic import AnyHttpUrl, BaseModel, ConfigDict, Field, field_serializer, field_validator, model_validator, ValidationInfo
31+
2932
# First-Party
3033
from mcpgateway.types import ImageContent
3134
from mcpgateway.types import Prompt as MCPPrompt
@@ -34,9 +37,6 @@
3437
from mcpgateway.types import Tool as MCPTool
3538
from mcpgateway.utils.services_auth import decode_auth, encode_auth
3639

37-
# Third-Party
38-
from pydantic import AnyHttpUrl, BaseModel, ConfigDict, Field, field_serializer, field_validator, model_validator, ValidationInfo
39-
4040
logger = logging.getLogger(__name__)
4141

4242

@@ -519,7 +519,17 @@ class ResourceNotification(BaseModelWithConfigDict):
519519

520520
@field_serializer("timestamp")
521521
def serialize_timestamp(self, dt: datetime) -> str:
522-
# now returns ISO string with Z
522+
"""Serialize the `timestamp` field as an ISO 8601 string with UTC timezone.
523+
524+
Converts the given datetime to UTC and returns it in ISO 8601 format,
525+
replacing the "+00:00" suffix with "Z" to indicate UTC explicitly.
526+
527+
Args:
528+
dt (datetime): The datetime object to serialize.
529+
530+
Returns:
531+
str: ISO 8601 formatted string in UTC, ending with 'Z'.
532+
"""
523533
return dt.astimezone(timezone.utc).isoformat().replace("+00:00", "Z")
524534

525535

@@ -1020,7 +1030,18 @@ class EventMessage(BaseModelWithConfigDict):
10201030

10211031
@field_serializer("timestamp")
10221032
def serialize_timestamp(self, dt: datetime) -> str:
1023-
# now returns ISO string with Z
1033+
"""
1034+
Serialize the `timestamp` field as an ISO 8601 string with UTC timezone.
1035+
1036+
Converts the given datetime to UTC and returns it in ISO 8601 format,
1037+
replacing the "+00:00" suffix with "Z" to indicate UTC explicitly.
1038+
1039+
Args:
1040+
dt (datetime): The datetime object to serialize.
1041+
1042+
Returns:
1043+
str: ISO 8601 formatted string in UTC, ending with 'Z'.
1044+
"""
10241045
return dt.astimezone(timezone.utc).isoformat().replace("+00:00", "Z")
10251046

10261047

mcpgateway/services/completion_service.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313
import logging
1414
from typing import Any, Dict, List
1515

16+
# Third-Party
17+
from sqlalchemy import select
18+
from sqlalchemy.orm import Session
19+
1620
# First-Party
1721
from mcpgateway.db import Prompt as DbPrompt
1822
from mcpgateway.db import Resource as DbResource
1923
from mcpgateway.types import CompleteResult
2024

21-
# Third-Party
22-
from sqlalchemy import select
23-
from sqlalchemy.orm import Session
24-
2525
logger = logging.getLogger(__name__)
2626

2727

mcpgateway/services/prompt_service.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,18 @@
2121
from string import Formatter
2222
from typing import Any, AsyncGenerator, Dict, List, Optional, Set
2323

24-
# First-Party
25-
from mcpgateway.db import Prompt as DbPrompt
26-
from mcpgateway.db import PromptMetric, server_prompt_association
27-
from mcpgateway.schemas import PromptCreate, PromptRead, PromptUpdate
28-
from mcpgateway.types import Message, PromptResult, Role, TextContent
29-
3024
# Third-Party
3125
from jinja2 import Environment, meta, select_autoescape
3226
from sqlalchemy import delete, func, not_, select
3327
from sqlalchemy.exc import IntegrityError
3428
from sqlalchemy.orm import Session
3529

30+
# First-Party
31+
from mcpgateway.db import Prompt as DbPrompt
32+
from mcpgateway.db import PromptMetric, server_prompt_association
33+
from mcpgateway.schemas import PromptCreate, PromptRead, PromptUpdate
34+
from mcpgateway.types import Message, PromptResult, Role, TextContent
35+
3636
logger = logging.getLogger(__name__)
3737

3838

0 commit comments

Comments
 (0)