Add CI
All checks were successful
CI / lint (pull_request) Successful in 10s
CI / typecheck (pull_request) Successful in 11s
CI / test (pull_request) Successful in 25s

This commit is contained in:
2026-03-05 21:43:15 +00:00
parent 86ed34887b
commit d39b8a6ea7
17 changed files with 337 additions and 210 deletions

View File

@@ -1,7 +1,14 @@
"""Configuration management for the MCP server."""
import argparse
import os
import sys
import argparse
from pydantic_settings import BaseSettings, PydanticBaseSettingsSource, YamlConfigSettingsSource
from pydantic_settings import (
BaseSettings,
PydanticBaseSettingsSource,
YamlConfigSettingsSource,
)
def _parse_args() -> argparse.Namespace:
@@ -14,7 +21,7 @@ def _parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser()
return argparse.Namespace(
transport="stdio",
host="0.0.0.0",
host="0.0.0.0", # noqa: S104
port=8080,
config=os.environ.get("CONFIG_FILE", "config.yaml"),
)
@@ -25,7 +32,7 @@ def _parse_args() -> argparse.Namespace:
choices=["stdio", "sse", "streamable-http"],
default="stdio",
)
parser.add_argument("--host", default="0.0.0.0")
parser.add_argument("--host", default="0.0.0.0") # noqa: S104
parser.add_argument("--port", type=int, default=8080)
parser.add_argument(
"--config",
@@ -36,6 +43,7 @@ def _parse_args() -> argparse.Namespace:
_args = _parse_args()
class Settings(BaseSettings):
"""Server configuration populated from env vars and a YAML config file."""
@@ -63,6 +71,7 @@ class Settings(BaseSettings):
dotenv_settings: PydanticBaseSettingsSource,
file_secret_settings: PydanticBaseSettingsSource,
) -> tuple[PydanticBaseSettingsSource, ...]:
"""Customize the order of settings sources to include YAML config."""
return (
init_settings,
env_settings,
@@ -78,7 +87,7 @@ _cfg: Settings | None = None
def get_config() -> Settings:
"""Get or create the singleton Settings instance."""
global _cfg
global _cfg # noqa: PLW0603
if _cfg is None:
_cfg = Settings.model_validate({})
return _cfg
@@ -88,8 +97,8 @@ def get_config() -> Settings:
class _ConfigProxy:
"""Proxy object that lazily loads config on attribute access."""
def __getattr__(self, name: str):
def __getattr__(self, name: str) -> object:
return getattr(get_config(), name)
cfg = _ConfigProxy() # type: ignore[assignment]
cfg = _ConfigProxy()