SYMBOL INDEX (25967 symbols across 1903 files) FILE: .github/workflows/release.py function validate_path_security (line 48) | def validate_path_security(path: Path, allowed_base: Path = None) -> Path: function validate_package_name (line 82) | def validate_package_name(name: str) -> str: function validate_version_format (line 117) | def validate_version_format(version: str) -> bool: function secure_file_read (line 150) | def secure_file_read(file_path: Path, encoding: str = 'utf-8') -> str: function secure_file_write (line 177) | def secure_file_write(file_path: Path, content: str, encoding: str = 'ut... class Package (line 204) | class Package(Protocol): method package_name (line 209) | def package_name(self) -> str: method package_version (line 213) | def package_version(self) -> str: method bump_version (line 217) | def bump_version(self) -> str: class NpmPackage (line 223) | class NpmPackage: method __post_init__ (line 228) | def __post_init__(self): method package_name (line 232) | def package_name(self) -> str: method package_version (line 246) | def package_version(self) -> str: method bump_version (line 262) | def bump_version(self) -> str: class PyPiPackage (line 301) | class PyPiPackage: method __post_init__ (line 306) | def __post_init__(self): method package_name (line 310) | def package_name(self) -> str: method package_version (line 328) | def package_version(self) -> str: method bump_version (line 348) | def bump_version(self) -> str: function cli (line 417) | def cli(): function bump_package (line 424) | def bump_package(directory: Path) -> int: FILE: docusaurus/src/components/ServerCards/index.tsx type ServerCardProps (line 6) | type ServerCardProps = { type CategoryProps (line 18) | type CategoryProps = { type WorkflowProps (line 25) | type WorkflowProps = { function ServerCards (line 115) | function ServerCards(): React.ReactNode { FILE: docusaurus/src/pages/servers.tsx function Servers (line 5) | function Servers(): React.ReactNode { FILE: samples/mcp-integration-with-kb/clients/client_server.py function global_exception_handler (line 62) | async def global_exception_handler(request: Request, exc: Exception): class QueryRequest (line 70) | class QueryRequest(BaseModel): class QueryResponse (line 77) | class QueryResponse(BaseModel): class KnowledgeBaseRequest (line 83) | class KnowledgeBaseRequest(BaseModel): class KnowledgeBaseResponse (line 89) | class KnowledgeBaseResponse(BaseModel): function process_query (line 97) | async def process_query(query: str, kb_id: str) -> Dict[str, Any]: function query (line 235) | async def query(request: QueryRequest): function health_check (line 249) | def health_check(): function add_knowledge_base (line 255) | def add_knowledge_base(request: KnowledgeBaseRequest): function list_knowledge_bases (line 265) | def list_knowledge_bases(): FILE: samples/mcp-integration-with-kb/user_interfaces/chat_bedrock_st.py function query_api (line 88) | def query_api(prompt, kb_id): FILE: samples/mcp-integration-with-nova-canvas/clients/client_server.py function global_exception_handler (line 57) | async def global_exception_handler(request: Request, exc: Exception): class ImageGenerationRequest (line 65) | class ImageGenerationRequest(BaseModel): class ImageGenerationResponse (line 94) | class ImageGenerationResponse(BaseModel): function improve_prompt_with_nova_text (line 104) | async def improve_prompt_with_nova_text(prompt: str) -> str: function generate_image (line 178) | async def generate_image(request: ImageGenerationRequest) -> Dict[str, A... function generate (line 329) | async def generate(request: ImageGenerationRequest): function health_check (line 343) | def health_check(): FILE: samples/mcp-integration-with-nova-canvas/user_interfaces/image_generator_st.py function add_color (line 48) | def add_color(color: str): function remove_color (line 54) | def remove_color(index: int): function clear_colors (line 60) | def clear_colors(): function generate_image (line 65) | def generate_image( FILE: samples/stepfunctions-tool-mcp-server/sample_state_machines/customer-create/app.py function lambda_handler (line 14) | def lambda_handler(event: dict, context: dict) -> dict: FILE: samples/stepfunctions-tool-mcp-server/sample_state_machines/customer-id-from-email/app.py function lambda_handler (line 16) | def lambda_handler(event: dict, context: dict) -> dict: FILE: samples/stepfunctions-tool-mcp-server/sample_state_machines/customer-info-from-id/app.py function lambda_handler (line 16) | def lambda_handler(event: dict, context: dict) -> dict: FILE: scripts/verify_awslabs_init.py function main (line 58) | def main(directory: str) -> int: FILE: scripts/verify_package_name.py function extract_package_name (line 45) | def extract_package_name(pyproject_path: Path) -> str: function extract_dependencies (line 61) | def extract_dependencies(pyproject_path: Path) -> List[str]: function extract_package_from_base64_config (line 82) | def extract_package_from_base64_config(config_b64: str) -> List[str]: function find_package_references_in_readme (line 133) | def find_package_references_in_readme( function verify_package_name_consistency (line 230) | def verify_package_name_consistency( function main (line 251) | def main(): FILE: scripts/verify_tool_names.py function extract_package_name (line 64) | def extract_package_name(pyproject_path: Path) -> str: function convert_package_name_to_server_format (line 79) | def convert_package_name_to_server_format(package_name: str) -> str: function calculate_fully_qualified_name (line 94) | def calculate_fully_qualified_name(server_name: str, tool_name: str) -> ... function find_tool_decorators (line 106) | def find_tool_decorators(file_path: Path) -> List[Tuple[str, int]]: function find_all_tools_in_package (line 196) | def find_all_tools_in_package(package_dir: Path) -> List[Tuple[str, Path... function validate_tool_name (line 221) | def validate_tool_name(tool_name: str) -> Tuple[List[str], List[str]]: function validate_tool_names (line 269) | def validate_tool_names( function main (line 301) | def main(): FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/config.py class Config (line 20) | class Config(BaseModel): method validate_urls (line 39) | def validate_urls(cls, v: List[str]) -> List[str]: FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/server.py function _is_service_enabled (line 61) | def _is_service_enabled(name: str) -> bool: function server_lifespan (line 93) | async def server_lifespan(server: FastMCP) -> AsyncIterator[None]: function main (line 149) | def main() -> None: FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/__init__.py function cleanup_stale_sessions (line 34) | async def cleanup_stale_sessions( function register_browser_tools (line 57) | def register_browser_tools(mcp): FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/browser_client.py function get_browser_client (line 27) | def get_browser_client( FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/connection_manager.py class BrowserConnectionManager (line 26) | class BrowserConnectionManager: method __init__ (line 34) | def __init__(self): method _ensure_playwright (line 42) | async def _ensure_playwright(self) -> Playwright: method connect (line 49) | async def connect( method get_browser (line 89) | def get_browser(self, session_id: str) -> Browser: method get_context (line 108) | def get_context(self, session_id: str): method get_page (line 126) | async def get_page(self, session_id: str) -> Page: method set_active_page (line 155) | def set_active_page(self, session_id: str, page: Page) -> None: method is_connected (line 166) | def is_connected(self, session_id: str) -> bool: method get_session_ids (line 170) | def get_session_ids(self) -> list[str]: method set_dialog_handler (line 174) | async def set_dialog_handler( method remove_dialog_handler (line 208) | async def remove_dialog_handler(self, session_id: str) -> None: method disconnect (line 220) | async def disconnect(self, session_id: str) -> None: method cleanup (line 236) | async def cleanup(self) -> None: FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/error_handler.py function error_with_snapshot (line 30) | async def error_with_snapshot( function safe_capture (line 54) | async def safe_capture( function ref_not_found_msg (line 73) | def ref_not_found_msg(ref: str) -> str: FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/interaction.py function _wait_for_settled (line 41) | async def _wait_for_settled(page: Page, timeout_ms: int = INTERACTION_TI... class InteractionTools (line 54) | class InteractionTools: method __init__ (line 57) | def __init__( method register (line 66) | def register(self, mcp): method browser_click (line 78) | async def browser_click( method browser_type (line 131) | async def browser_type( method browser_fill_form (line 194) | async def browser_fill_form( method browser_select_option (line 257) | async def browser_select_option( method browser_hover (line 318) | async def browser_hover( method browser_press_key (line 357) | async def browser_press_key( method browser_upload_file (line 398) | async def browser_upload_file( method browser_handle_dialog (line 443) | async def browser_handle_dialog( method browser_mouse_wheel (line 487) | async def browser_mouse_wheel( FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/management.py class ManagementTools (line 36) | class ManagementTools: method __init__ (line 39) | def __init__( method register (line 48) | def register(self, mcp): method browser_tabs (line 54) | async def browser_tabs( method browser_close (line 170) | async def browser_close( method browser_resize (line 220) | async def browser_resize( FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/models.py class BrowserSessionResponse (line 20) | class BrowserSessionResponse(BaseModel): class BrowserSessionSummary (line 42) | class BrowserSessionSummary(BaseModel): class SessionListResponse (line 50) | class SessionListResponse(BaseModel): FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/navigation.py function _validate_url_scheme (line 40) | def _validate_url_scheme(url: str) -> str | None: class NavigationTools (line 57) | class NavigationTools: method __init__ (line 60) | def __init__( method register (line 69) | def register(self, mcp): method browser_navigate (line 75) | async def browser_navigate( method browser_navigate_back (line 123) | async def browser_navigate_back( method browser_navigate_forward (line 137) | async def browser_navigate_forward( method _navigate_history (line 151) | async def _navigate_history(self, session_id: str, direction: str) -> ... FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/observation.py class ObservationTools (line 39) | class ObservationTools: method __init__ (line 42) | def __init__( method register (line 51) | def register(self, mcp): method browser_snapshot (line 63) | async def browser_snapshot( method browser_take_screenshot (line 108) | async def browser_take_screenshot( method browser_wait_for (line 146) | async def browser_wait_for( method browser_console_messages (line 196) | async def browser_console_messages( method browser_network_requests (line 244) | async def browser_network_requests( method browser_evaluate (line 294) | async def browser_evaluate( FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/session.py function _to_str (line 49) | def _to_str(value) -> str: class BrowserSessionTools (line 56) | class BrowserSessionTools: method __init__ (line 59) | def __init__( method register (line 68) | def register(self, mcp): method start_browser_session (line 75) | async def start_browser_session( method get_browser_session (line 227) | async def get_browser_session( method stop_browser_session (line 280) | async def stop_browser_session( method list_browser_sessions (line 331) | async def list_browser_sessions( FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/browser/snapshot_manager.py class RefNotFoundError (line 28) | class RefNotFoundError(Exception): class SnapshotManager (line 65) | class SnapshotManager: method __init__ (line 76) | def __init__(self): method capture (line 83) | async def capture(self, page: Page, session_id: str, *, selector: str ... method _resolve_selector (line 190) | async def _resolve_selector(self, cdp, selector: str) -> int | None: method _fetch_ax_nodes (line 223) | async def _fetch_ax_nodes(self, cdp, selector: str | None) -> list[dic... method _fetch_full_ax_nodes (line 278) | async def _fetch_full_ax_nodes(self, cdp) -> list[dict]: method _format_cdp_node (line 286) | def _format_cdp_node( method resolve_ref (line 399) | async def resolve_ref(self, page: Page, ref: str, session_id: str) -> ... method ref_count (line 441) | def ref_count(self, session_id: str) -> int: method previous_snapshot (line 445) | def previous_snapshot(self, session_id: str) -> str | None: method cleanup_session (line 449) | def cleanup_session(self, session_id: str) -> None: FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/docs.py function search_agentcore_docs (line 21) | def search_agentcore_docs(query: str, k: int = 5) -> List[Dict[str, Any]]: function fetch_agentcore_doc (line 97) | def fetch_agentcore_doc(uri: str) -> Dict[str, Any]: FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/gateway.py function manage_agentcore_gateway (line 23) | def manage_agentcore_gateway() -> Dict[str, Any]: FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/memory.py function manage_agentcore_memory (line 23) | def manage_agentcore_memory() -> Dict[str, Any]: FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/tools/runtime.py function manage_agentcore_runtime (line 23) | def manage_agentcore_runtime() -> Dict[str, Any]: FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/utils/cache.py function load_links_only (line 30) | def load_links_only() -> None: function ensure_ready (line 67) | def ensure_ready() -> None: function ensure_page (line 77) | def ensure_page(url: str) -> doc_fetcher.Page | None: function get_index (line 100) | def get_index() -> indexer.IndexSearch | None: function get_url_cache (line 109) | def get_url_cache() -> Dict[str, doc_fetcher.Page | None]: function get_url_titles (line 118) | def get_url_titles() -> Dict[str, str]: FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/utils/doc_fetcher.py class Page (line 32) | class Page(BaseModel): function _get (line 46) | def _get(url: str) -> str: function parse_llms_txt (line 63) | def parse_llms_txt(url: str) -> list[tuple[str, str]]: function _html_to_text (line 91) | def _html_to_text(raw_html: str) -> str: function _extract_html_title (line 109) | def _extract_html_title(raw_html: str) -> str | None: function fetch_and_clean (line 132) | def fetch_and_clean(page_url: str) -> Page: FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/utils/indexer.py class Doc (line 30) | class Doc(BaseModel): class IndexSearch (line 55) | class IndexSearch: method __init__ (line 74) | def __init__(self) -> None: method add (line 80) | def add(self, doc: Doc) -> None: method search (line 130) | def search(self, query: str, k: int = 8) -> list[tuple[float, Doc]]: FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/utils/text_processor.py function normalize (line 23) | def normalize(s: str) -> str: function title_from_url (line 35) | def title_from_url(url: str) -> str: function format_display_title (line 58) | def format_display_title(url: str, extracted: str | None, url_titles: di... function index_title_variants (line 90) | def index_title_variants(display_title: str, url: str) -> str: function normalize_for_comparison (line 121) | def normalize_for_comparison(string: str) -> str: function make_snippet (line 138) | def make_snippet(page: Page | None, display_title: str, max_chars: int =... FILE: src/amazon-bedrock-agentcore-mcp-server/awslabs/amazon_bedrock_agentcore_mcp_server/utils/url_validator.py class URLValidationError (line 20) | class URLValidationError(Exception): class URLValidator (line 26) | class URLValidator: method __init__ (line 29) | def __init__(self, allowed_domain_prefixes: List[str]): method is_url_allowed (line 37) | def is_url_allowed(self, url: str) -> bool: method validate_urls (line 56) | def validate_urls(self, urls) -> List[str]: function validate_urls (line 100) | def validate_urls(urls, allowed_domains: list[str] | None = None) -> lis... FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/conftest.py function mock_ctx (line 22) | def mock_ctx(): function mock_browser_client (line 31) | def mock_browser_client(monkeypatch): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_integ_browser_session.py function _make_ctx (line 139) | def _make_ctx(): function _setup_page (line 147) | async def _setup_page(connection_manager, session_id, html): function _find_ref (line 169) | def _find_ref(snapshot_text, role, name): function nav_env (line 195) | async def nav_env(): function form_env (line 229) | async def form_env(): function mgmt_env (line 264) | async def mgmt_env(): class TestSessionLifecycle (line 305) | class TestSessionLifecycle: method test_start_session (line 316) | async def test_start_session(self): method test_start_session_custom_viewport (line 336) | async def test_start_session_custom_viewport(self): method test_get_session (line 365) | async def test_get_session(self): method test_list_sessions (line 379) | async def test_list_sessions(self): method test_stop_session (line 390) | async def test_stop_session(self): class TestNavigationAndObservation (line 410) | class TestNavigationAndObservation: method test_navigate (line 415) | async def test_navigate(self, nav_env): method test_snapshot (line 435) | async def test_snapshot(self, nav_env): method test_screenshot (line 447) | async def test_screenshot(self, nav_env): method test_screenshot_full_page (line 461) | async def test_screenshot_full_page(self, nav_env): method test_evaluate (line 472) | async def test_evaluate(self, nav_env): method test_evaluate_object (line 483) | async def test_evaluate_object(self, nav_env): method test_evaluate_null (line 494) | async def test_evaluate_null(self, nav_env): method test_console_messages (line 504) | async def test_console_messages(self, nav_env): method test_network_requests (line 513) | async def test_network_requests(self, nav_env): method test_wait_for_text (line 522) | async def test_wait_for_text(self, nav_env): method test_wait_for_selector (line 534) | async def test_wait_for_selector(self, nav_env): method test_wait_for_timeout (line 545) | async def test_wait_for_timeout(self, nav_env): method test_wait_for_no_criteria (line 556) | async def test_wait_for_no_criteria(self, nav_env): method test_navigate_back (line 565) | async def test_navigate_back(self, nav_env): method test_navigate_forward (line 584) | async def test_navigate_forward(self, nav_env): method test_snapshot_with_selector (line 593) | async def test_snapshot_with_selector(self, nav_env): method test_snapshot_with_invalid_selector (line 608) | async def test_snapshot_with_invalid_selector(self, nav_env): class TestInteractionAndForms (line 629) | class TestInteractionAndForms: method test_click (line 632) | async def test_click(self, form_env): method test_click_double (line 645) | async def test_click_double(self, form_env): method test_type_text (line 663) | async def test_type_text(self, form_env): method test_type_with_submit (line 682) | async def test_type_with_submit(self, form_env): method test_type_without_clear (line 701) | async def test_type_without_clear(self, form_env): method test_fill_form (line 720) | async def test_fill_form(self, form_env): method test_fill_form_with_submit (line 741) | async def test_fill_form_with_submit(self, form_env): method test_select_option_by_label (line 765) | async def test_select_option_by_label(self, form_env): method test_select_option_by_value (line 783) | async def test_select_option_by_value(self, form_env): method test_select_option_by_index (line 801) | async def test_select_option_by_index(self, form_env): method test_select_option_no_criteria (line 819) | async def test_select_option_no_criteria(self, form_env): method test_hover (line 835) | async def test_hover(self, form_env): method test_press_key (line 852) | async def test_press_key(self, form_env): method test_press_key_combo (line 865) | async def test_press_key_combo(self, form_env): method test_mouse_wheel_down (line 878) | async def test_mouse_wheel_down(self, form_env): method test_mouse_wheel_up (line 891) | async def test_mouse_wheel_up(self, form_env): method test_upload_file (line 904) | async def test_upload_file(self, form_env): method test_handle_dialog_accept (line 925) | async def test_handle_dialog_accept(self, form_env): method test_handle_dialog_dismiss (line 947) | async def test_handle_dialog_dismiss(self, form_env): method test_handle_dialog_with_prompt (line 971) | async def test_handle_dialog_with_prompt(self, form_env): class TestManagement (line 1009) | class TestManagement: method test_tabs_list (line 1012) | async def test_tabs_list(self, mgmt_env): method test_tabs_new (line 1023) | async def test_tabs_new(self, mgmt_env): method test_tabs_new_blank (line 1031) | async def test_tabs_new_blank(self, mgmt_env): method test_tabs_select (line 1043) | async def test_tabs_select(self, mgmt_env): method test_tabs_close (line 1056) | async def test_tabs_close(self, mgmt_env): method test_tabs_unknown_action (line 1070) | async def test_tabs_unknown_action(self, mgmt_env): method test_resize (line 1078) | async def test_resize(self, mgmt_env): method test_close_page (line 1091) | async def test_close_page(self, mgmt_env): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_integ_mcp_protocol.py function _build_server (line 85) | def _build_server(*, disable: str | None = None, enable: str | None = No... class TestToolDiscovery (line 145) | class TestToolDiscovery: method test_list_tools_default_config (line 148) | async def test_list_tools_default_config(self): method test_list_tools_browser_disabled (line 157) | async def test_list_tools_browser_disabled(self): method test_list_tools_browser_and_docs_only (line 167) | async def test_list_tools_browser_and_docs_only(self): method test_list_tools_only_docs (line 182) | async def test_list_tools_only_docs(self): class TestToolSchemas (line 197) | class TestToolSchemas: method test_all_tools_have_descriptions (line 200) | async def test_all_tools_have_descriptions(self): method test_browser_tools_require_session_id (line 212) | async def test_browser_tools_require_session_id(self): method test_start_browser_session_has_optional_params (line 239) | async def test_start_browser_session_has_optional_params(self): class TestToolInvocation (line 258) | class TestToolInvocation: method test_browser_snapshot_invalid_session (line 261) | async def test_browser_snapshot_invalid_session(self): method test_browser_navigate_invalid_session (line 274) | async def test_browser_navigate_invalid_session(self): method test_browser_click_invalid_session (line 287) | async def test_browser_click_invalid_session(self): method test_browser_resize_validation (line 300) | async def test_browser_resize_validation(self): method test_start_session_mocked_api (line 313) | async def test_start_session_mocked_api(self): method test_list_sessions_mocked_api (line 346) | async def test_list_sessions_mocked_api(self): method test_docs_tool_invocation (line 367) | async def test_docs_tool_invocation(self): method test_calling_nonexistent_tool_raises (line 375) | async def test_calling_nonexistent_tool_raises(self): class TestServerCapabilities (line 391) | class TestServerCapabilities: method test_server_has_tools_capability (line 394) | async def test_server_has_tools_capability(self): method test_ping (line 403) | async def test_ping(self): class TestGracefulDegradation (line 415) | class TestGracefulDegradation: method test_server_works_without_browser_import (line 418) | async def test_server_works_without_browser_import(self): method test_browser_evaluate_disabled_env (line 437) | async def test_browser_evaluate_disabled_env(self): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_browser_client.py class TestGetBrowserClient (line 30) | class TestGetBrowserClient: method setup_method (line 33) | def setup_method(self): method test_creates_client_with_defaults (line 39) | def test_creates_client_with_defaults(self, mock_browser_client_cls): method test_creates_client_with_env_region (line 53) | def test_creates_client_with_env_region(self, mock_browser_client_cls): method test_creates_client_with_explicit_region (line 66) | def test_creates_client_with_explicit_region(self, mock_browser_client... method test_caches_client (line 79) | def test_caches_client(self, mock_browser_client_cls): method test_different_regions_different_clients (line 91) | def test_different_regions_different_clients(self, mock_browser_client... method test_integration_source_tagging (line 102) | def test_integration_source_tagging(self, mock_browser_client_cls): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_connection.py function connection_manager (line 35) | def connection_manager(): function mock_browser (line 41) | def mock_browser(): function mock_playwright (line 53) | def mock_playwright(): function mock_sdk_client (line 63) | def mock_sdk_client(): class TestConnect (line 70) | class TestConnect: method test_connect_starts_playwright (line 75) | async def test_connect_starts_playwright( method test_connect_passes_region (line 103) | async def test_connect_passes_region( method test_connect_reuses_playwright (line 123) | async def test_connect_reuses_playwright( class TestGetPage (line 145) | class TestGetPage: method test_get_page_returns_last_page (line 148) | async def test_get_page_returns_last_page(self, connection_manager, mo... method test_get_page_returns_active_page (line 156) | async def test_get_page_returns_active_page(self, connection_manager, ... method test_get_page_falls_back_when_active_page_closed (line 166) | async def test_get_page_falls_back_when_active_page_closed(self, conne... method test_get_context_returns_first_context (line 182) | async def test_get_context_returns_first_context(self, connection_mana... method test_get_page_no_connection (line 190) | async def test_get_page_no_connection(self, connection_manager): method test_get_page_no_contexts (line 195) | async def test_get_page_no_contexts(self, connection_manager): method test_get_browser_no_connection (line 204) | async def test_get_browser_no_connection(self, connection_manager): method test_get_context_no_connection (line 209) | async def test_get_context_no_connection(self, connection_manager): method test_get_context_no_contexts (line 214) | async def test_get_context_no_contexts(self, connection_manager): class TestDisconnect (line 224) | class TestDisconnect: method test_disconnect_closes_browser (line 227) | async def test_disconnect_closes_browser(self, connection_manager, moc... method test_disconnect_nonexistent_session (line 236) | async def test_disconnect_nonexistent_session(self, connection_manager): method test_disconnect_handles_close_error (line 240) | async def test_disconnect_handles_close_error(self, connection_manager... method test_disconnect_clears_active_page (line 248) | async def test_disconnect_clears_active_page(self, connection_manager,... class TestCleanup (line 258) | class TestCleanup: method test_cleanup_disconnects_all (line 263) | async def test_cleanup_disconnects_all( method test_cleanup_handles_disconnect_error (line 285) | async def test_cleanup_handles_disconnect_error(self, connection_manag... method test_cleanup_handles_playwright_stop_error (line 297) | async def test_cleanup_handles_playwright_stop_error( class TestGenerateWsHeadersError (line 309) | class TestGenerateWsHeadersError: method test_connect_no_credentials (line 314) | async def test_connect_no_credentials( class TestDialogHandler (line 327) | class TestDialogHandler: method test_set_dialog_handler (line 330) | async def test_set_dialog_handler(self, connection_manager, mock_brows... method test_remove_dialog_handler (line 343) | async def test_remove_dialog_handler(self, connection_manager, mock_br... method test_disconnect_removes_dialog_handler (line 356) | async def test_disconnect_removes_dialog_handler(self, connection_mana... method test_dialog_handler_accept_execution (line 369) | async def test_dialog_handler_accept_execution(self, connection_manage... method test_dialog_handler_dismiss_execution (line 390) | async def test_dialog_handler_dismiss_execution(self, connection_manag... method test_dialog_handler_accept_no_prompt_text (line 411) | async def test_dialog_handler_accept_no_prompt_text(self, connection_m... method test_remove_dialog_handler_no_handler (line 430) | async def test_remove_dialog_handler_no_handler(self, connection_manag... method test_remove_dialog_handler_session_disconnected (line 434) | async def test_remove_dialog_handler_session_disconnected( class TestReconnect (line 454) | class TestReconnect: method test_connect_reconnect_disconnects_first (line 459) | async def test_connect_reconnect_disconnects_first( class TestGetSessionIds (line 480) | class TestGetSessionIds: method test_get_session_ids (line 483) | async def test_get_session_ids(self, connection_manager, mock_browser): method test_get_session_ids_empty (line 491) | async def test_get_session_ids_empty(self, connection_manager): class TestCleanupEdgeCases (line 496) | class TestCleanupEdgeCases: method test_cleanup_no_playwright (line 499) | async def test_cleanup_no_playwright(self, connection_manager): method test_cleanup_disconnect_raises (line 505) | async def test_cleanup_disconnect_raises(self, connection_manager): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_error_handler.py class TestErrorWithSnapshot (line 25) | class TestErrorWithSnapshot: method test_error_with_snapshot_includes_snapshot (line 28) | async def test_error_with_snapshot_includes_snapshot(self): method test_error_with_snapshot_no_page (line 40) | async def test_error_with_snapshot_no_page(self): method test_error_with_snapshot_capture_fails (line 50) | async def test_error_with_snapshot_capture_fails(self): class TestSafeCapture (line 61) | class TestSafeCapture: method test_safe_capture_returns_snapshot (line 64) | async def test_safe_capture_returns_snapshot(self): method test_safe_capture_no_page (line 75) | async def test_safe_capture_no_page(self): method test_safe_capture_capture_fails (line 85) | async def test_safe_capture_capture_fails(self): class TestRefNotFoundMsg (line 97) | class TestRefNotFoundMsg: method test_ref_not_found_msg (line 100) | def test_ref_not_found_msg(self): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_interaction.py function mock_connection_manager (line 36) | def mock_connection_manager(): function mock_snapshot_manager (line 45) | def mock_snapshot_manager(): function mock_page (line 54) | def mock_page(): function mock_locator (line 77) | def mock_locator(): class TestNavigationTools (line 91) | class TestNavigationTools: method nav_tools (line 95) | def nav_tools(self, mock_connection_manager, mock_snapshot_manager): method test_navigate_to_url (line 99) | async def test_navigate_to_url( method test_navigate_back (line 122) | async def test_navigate_back( method test_navigate_forward (line 134) | async def test_navigate_forward( method test_navigate_error (line 146) | async def test_navigate_error( method test_navigate_back_error (line 161) | async def test_navigate_back_error( method test_validate_url_scheme_parse_error (line 174) | def test_validate_url_scheme_parse_error(self): method test_validate_url_scheme_empty_string (line 189) | def test_validate_url_scheme_empty_string(self): method test_navigate_invalid_scheme (line 199) | async def test_navigate_invalid_scheme( method test_validate_url_scheme_blocks_dangerous_schemes (line 222) | def test_validate_url_scheme_blocks_dangerous_schemes(self, dangerous_... class TestInteractionTools (line 233) | class TestInteractionTools: method interaction_tools (line 237) | def interaction_tools(self, mock_connection_manager, mock_snapshot_man... method test_click_element (line 241) | async def test_click_element( method test_double_click (line 260) | async def test_double_click( method test_click_ref_not_found (line 280) | async def test_click_ref_not_found( method test_type_text (line 300) | async def test_type_text( method test_type_without_clear (line 321) | async def test_type_without_clear( method test_type_with_submit (line 341) | async def test_type_with_submit( method test_fill_form (line 361) | async def test_fill_form( method test_fill_form_with_submit (line 386) | async def test_fill_form_with_submit( method test_select_option_by_label (line 407) | async def test_select_option_by_label( method test_select_option_by_value (line 427) | async def test_select_option_by_value( method test_select_option_no_criteria (line 447) | async def test_select_option_no_criteria( method test_hover (line 464) | async def test_hover( method test_hover_ref_not_found (line 482) | async def test_hover_ref_not_found( method test_press_key (line 501) | async def test_press_key( method test_press_key_combo (line 519) | async def test_press_key_combo( method test_upload_file (line 537) | async def test_upload_file( method test_upload_file_ref_not_found (line 557) | async def test_upload_file_ref_not_found( method test_handle_dialog_accept (line 576) | async def test_handle_dialog_accept( method test_handle_dialog_dismiss (line 593) | async def test_handle_dialog_dismiss( method test_handle_dialog_with_prompt (line 610) | async def test_handle_dialog_with_prompt( method test_mouse_wheel (line 627) | async def test_mouse_wheel( method test_mouse_wheel_scroll_up (line 646) | async def test_mouse_wheel_scroll_up( method test_click_generic_error (line 667) | async def test_click_generic_error( method test_type_ref_not_found (line 687) | async def test_type_ref_not_found( method test_type_generic_error (line 708) | async def test_type_generic_error( method test_fill_form_generic_error (line 730) | async def test_fill_form_generic_error( method test_fill_form_ref_not_found (line 750) | async def test_fill_form_ref_not_found( method test_select_option_ref_not_found (line 777) | async def test_select_option_ref_not_found( method test_select_option_generic_error (line 798) | async def test_select_option_generic_error( method test_select_option_by_index (line 820) | async def test_select_option_by_index( method test_select_option_by_index_zero (line 840) | async def test_select_option_by_index_zero( method test_hover_generic_error (line 860) | async def test_hover_generic_error( method test_press_key_error (line 880) | async def test_press_key_error( method test_upload_file_generic_error (line 900) | async def test_upload_file_generic_error( method test_handle_dialog_error (line 922) | async def test_handle_dialog_error( method test_mouse_wheel_error (line 939) | async def test_mouse_wheel_error( method test_mouse_wheel_horizontal (line 959) | async def test_mouse_wheel_horizontal( method test_wait_for_settled_timeout (line 979) | async def test_wait_for_settled_timeout( class TestObservationTools (line 995) | class TestObservationTools: method obs_tools (line 999) | def obs_tools(self, mock_connection_manager, mock_snapshot_manager): method test_snapshot (line 1003) | async def test_snapshot( method test_screenshot (line 1016) | async def test_screenshot( method test_screenshot_full_page (line 1030) | async def test_screenshot_full_page( method test_wait_for_text (line 1040) | async def test_wait_for_text( method test_wait_for_selector (line 1053) | async def test_wait_for_selector( method test_wait_for_no_criteria (line 1068) | async def test_wait_for_no_criteria( method test_wait_for_timeout (line 1078) | async def test_wait_for_timeout( method test_console_messages (line 1094) | async def test_console_messages( method test_console_messages_empty (line 1110) | async def test_console_messages_empty( method test_network_requests (line 1126) | async def test_network_requests( method test_network_requests_empty (line 1147) | async def test_network_requests_empty( method test_evaluate_returns_string (line 1158) | async def test_evaluate_returns_string( method test_evaluate_returns_object (line 1171) | async def test_evaluate_returns_object( method test_evaluate_returns_null (line 1185) | async def test_evaluate_returns_null( method test_evaluate_error (line 1198) | async def test_evaluate_error( method test_snapshot_error (line 1212) | async def test_snapshot_error( method test_snapshot_with_selector (line 1223) | async def test_snapshot_with_selector( method test_screenshot_error (line 1235) | async def test_screenshot_error( method test_console_messages_error (line 1248) | async def test_console_messages_error( method test_network_requests_error (line 1259) | async def test_network_requests_error( method test_evaluate_returns_number (line 1270) | async def test_evaluate_returns_number( method test_wait_for_error_no_page (line 1283) | async def test_wait_for_error_no_page( method test_register_evaluate_disabled (line 1294) | def test_register_evaluate_disabled(self, mock_connection_manager, moc... FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_management.py function mock_connection_manager (line 29) | def mock_connection_manager(): function mock_snapshot_manager (line 39) | def mock_snapshot_manager(): function mock_browser (line 47) | def mock_browser(): function management_tools (line 72) | def management_tools(mock_connection_manager, mock_snapshot_manager): function _setup_browser (line 77) | def _setup_browser(mock_connection_manager, mock_browser): class TestBrowserTabs (line 83) | class TestBrowserTabs: method test_list_tabs (line 86) | async def test_list_tabs( method test_new_tab (line 102) | async def test_new_tab( method test_new_tab_with_url (line 127) | async def test_new_tab_with_url( method test_select_tab (line 152) | async def test_select_tab( method test_select_tab_out_of_range (line 174) | async def test_select_tab_out_of_range( method test_close_tab (line 187) | async def test_close_tab( method test_close_last_tab_error (line 207) | async def test_close_last_tab_error(self, management_tools, mock_ctx, ... method test_no_connection (line 225) | async def test_no_connection(self, management_tools, mock_ctx, mock_co... method test_unknown_action (line 238) | async def test_unknown_action( method test_select_tab_missing_index (line 251) | async def test_select_tab_missing_index( method test_close_tab_missing_index (line 264) | async def test_close_tab_missing_index( method test_close_tab_out_of_range (line 277) | async def test_close_tab_out_of_range( method test_new_tab_error_cleans_up (line 290) | async def test_new_tab_error_cleans_up( method test_tabs_generic_exception (line 307) | async def test_tabs_generic_exception( method test_list_tabs_empty (line 321) | async def test_list_tabs_empty(self, management_tools, mock_ctx, mock_... class TestBrowserClose (line 337) | class TestBrowserClose: method test_close_page (line 340) | async def test_close_page( method test_close_page_error (line 362) | async def test_close_page_error( method test_close_last_page_error (line 373) | async def test_close_last_page_error( method test_close_page_no_remaining_context (line 390) | async def test_close_page_no_remaining_context( class TestBrowserResize (line 403) | class TestBrowserResize: method test_resize_viewport (line 406) | async def test_resize_viewport( method test_resize_error (line 422) | async def test_resize_error( class TestBrowserTabsEdgeCases (line 436) | class TestBrowserTabsEdgeCases: method test_new_tab_invalid_scheme (line 439) | async def test_new_tab_invalid_scheme( method test_close_tab_no_remaining_pages (line 452) | async def test_close_tab_no_remaining_pages( method test_tabs_generic_exception_snapshot_also_fails (line 481) | async def test_tabs_generic_exception_snapshot_also_fails( class TestBrowserCloseEdgeCases (line 495) | class TestBrowserCloseEdgeCases: method test_close_page_post_close_context_raises (line 498) | async def test_close_page_post_close_context_raises( method test_close_page_post_close_empty_pages (line 531) | async def test_close_page_post_close_empty_pages( class TestBrowserResizeEdgeCases (line 562) | class TestBrowserResizeEdgeCases: method test_resize_out_of_bounds (line 565) | async def test_resize_out_of_bounds(self, management_tools, mock_ctx, ... class TestToolRegistration (line 575) | class TestToolRegistration: method test_register_tools (line 578) | def test_register_tools(self, management_tools): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_server_integration.py class TestIsServiceEnabled (line 31) | class TestIsServiceEnabled: method test_default_no_env_vars (line 34) | def test_default_no_env_vars(self, monkeypatch): method test_disable_browser (line 43) | def test_disable_browser(self, monkeypatch): method test_enable_browser_only (line 52) | def test_enable_browser_only(self, monkeypatch): method test_both_set_enable_wins (line 61) | def test_both_set_enable_wins(self, monkeypatch): method test_empty_after_split (line 70) | def test_empty_after_split(self, monkeypatch): method test_case_insensitive (line 79) | def test_case_insensitive(self, monkeypatch): method test_whitespace_handling (line 87) | def test_whitespace_handling(self, monkeypatch): class TestCleanupStaleSessions (line 102) | class TestCleanupStaleSessions: method test_prunes_stale_session (line 105) | async def test_prunes_stale_session(self): method test_skips_connected_session (line 127) | async def test_skips_connected_session(self): method test_handles_value_error (line 149) | async def test_handles_value_error(self): method test_handles_generic_exception (line 168) | async def test_handles_generic_exception(self): method test_handles_get_session_ids_error (line 187) | async def test_handles_get_session_ids_error(self): class TestRegisterBrowserTools (line 208) | class TestRegisterBrowserTools: method test_register_succeeds (line 211) | def test_register_succeeds(self): method test_registration_error_includes_group_name (line 222) | def test_registration_error_includes_group_name(self): class TestServerLifespan (line 242) | class TestServerLifespan: method test_lifespan_with_browser_enabled (line 245) | async def test_lifespan_with_browser_enabled(self): method test_lifespan_with_browser_disabled (line 262) | async def test_lifespan_with_browser_disabled(self): method test_lifespan_cleans_up_on_exception (line 272) | async def test_lifespan_cleans_up_on_exception(self): class TestIdempotentCleanup (line 298) | class TestIdempotentCleanup: method test_cleanup_called_twice_is_noop_second_time (line 301) | async def test_cleanup_called_twice_is_noop_second_time(self): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_session.py function session_tools (line 23) | def session_tools(): class TestStartBrowserSession (line 28) | class TestStartBrowserSession: method test_start_session_default_params (line 31) | async def test_start_session_default_params( method test_start_session_custom_params (line 66) | async def test_start_session_custom_params(self, session_tools, mock_c... method test_start_session_with_extensions (line 95) | async def test_start_session_with_extensions( method test_start_session_with_proxy_configuration (line 130) | async def test_start_session_with_proxy_configuration( method test_start_session_with_profile_configuration (line 162) | async def test_start_session_with_profile_configuration( method test_start_session_api_error (line 190) | async def test_start_session_api_error(self, session_tools, mock_ctx, ... method test_start_session_viewport_out_of_bounds (line 201) | async def test_start_session_viewport_out_of_bounds( method test_start_session_missing_streams (line 212) | async def test_start_session_missing_streams( class TestGetBrowserSession (line 229) | class TestGetBrowserSession: method test_get_session (line 232) | async def test_get_session(self, session_tools, mock_ctx, mock_browser... method test_get_session_not_found (line 262) | async def test_get_session_not_found(self, session_tools, mock_ctx, mo... class TestStopBrowserSession (line 275) | class TestStopBrowserSession: method test_stop_session (line 278) | async def test_stop_session(self, session_tools, mock_ctx, mock_browse... method test_stop_session_no_connection_manager (line 296) | async def test_stop_session_no_connection_manager(self, mock_ctx, mock... method test_stop_session_no_snapshot_manager (line 305) | async def test_stop_session_no_snapshot_manager(self, mock_ctx, mock_b... method test_stop_session_api_error (line 317) | async def test_stop_session_api_error(self, session_tools, mock_ctx, m... class TestListBrowserSessions (line 332) | class TestListBrowserSessions: method test_list_sessions (line 335) | async def test_list_sessions(self, session_tools, mock_ctx, mock_brows... method test_list_sessions_empty (line 361) | async def test_list_sessions_empty(self, session_tools, mock_ctx, mock... method test_list_sessions_respects_max_results (line 372) | async def test_list_sessions_respects_max_results( method test_list_sessions_api_error (line 392) | async def test_list_sessions_api_error(self, session_tools, mock_ctx, ... class TestStartSessionAutoConnect (line 402) | class TestStartSessionAutoConnect: method test_start_session_auto_connects_playwright (line 405) | async def test_start_session_auto_connects_playwright(self, mock_ctx, ... method test_start_session_region_consistent (line 431) | async def test_start_session_region_consistent(self, mock_ctx, monkeyp... class TestStartSessionOrphanCleanup (line 466) | class TestStartSessionOrphanCleanup: method test_start_session_stops_orphan_on_connect_failure (line 469) | async def test_start_session_stops_orphan_on_connect_failure( method test_start_session_orphan_cleanup_failure_still_raises_original (line 495) | async def test_start_session_orphan_cleanup_failure_still_raises_origi... class TestToStr (line 520) | class TestToStr: method test_to_str_with_string (line 523) | def test_to_str_with_string(self): method test_to_str_with_none (line 529) | def test_to_str_with_none(self): method test_to_str_converts_datetime (line 535) | def test_to_str_converts_datetime(self): class TestToolRegistration (line 546) | class TestToolRegistration: method test_register_tools (line 549) | def test_register_tools(self, session_tools): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/browser/test_unit_snapshot.py function _node (line 25) | def _node(node_id, role, name='', parent_id=None, properties=None, ignor... function _prop (line 39) | def _prop(name, value): function snapshot_manager (line 45) | def snapshot_manager(): function mock_page (line 51) | def mock_page(): function _get_cdp (line 67) | def _get_cdp(mock_page): class TestSnapshotCapture (line 118) | class TestSnapshotCapture: method test_simple_login_page (line 121) | async def test_simple_login_page(self, snapshot_manager, mock_page): method test_properties_included (line 134) | async def test_properties_included(self, snapshot_manager, mock_page): method test_nested_indentation (line 145) | async def test_nested_indentation(self, snapshot_manager, mock_page): method test_empty_tree (line 158) | async def test_empty_tree(self, snapshot_manager, mock_page): method test_ignored_nodes_skipped_children_promoted (line 167) | async def test_ignored_nodes_skipped_children_promoted(self, snapshot_... method test_only_interactable_get_refs (line 176) | async def test_only_interactable_get_refs(self, snapshot_manager, mock... method test_long_name_truncated (line 188) | async def test_long_name_truncated(self, snapshot_manager, mock_page): method test_snapshot_error_handling (line 201) | async def test_snapshot_error_handling(self, snapshot_manager, mock_pa... method test_no_root_node (line 210) | async def test_no_root_node(self, snapshot_manager, mock_page): method test_property_pressed (line 222) | async def test_property_pressed(self, snapshot_manager, mock_page): method test_property_selected (line 234) | async def test_property_selected(self, snapshot_manager, mock_page): method test_property_required (line 246) | async def test_property_required(self, snapshot_manager, mock_page): method test_long_value_truncated (line 258) | async def test_long_value_truncated(self, snapshot_manager, mock_page): class TestRefResolution (line 275) | class TestRefResolution: method test_resolve_valid_ref (line 278) | async def test_resolve_valid_ref(self, snapshot_manager, mock_page): method test_resolve_invalid_ref (line 291) | async def test_resolve_invalid_ref(self, snapshot_manager, mock_page): method test_resolve_after_recapture (line 299) | async def test_resolve_after_recapture(self, snapshot_manager, mock_pa... method test_resolve_ref_no_snapshot (line 322) | async def test_resolve_ref_no_snapshot(self, snapshot_manager, mock_pa... method test_resolve_duplicate_names_uses_nth (line 327) | async def test_resolve_duplicate_names_uses_nth(self, snapshot_manager... method test_resolve_unique_name_no_nth (line 348) | async def test_resolve_unique_name_no_nth(self, snapshot_manager, mock... method test_resolve_ref_nameless_element (line 361) | async def test_resolve_ref_nameless_element(self, snapshot_manager, mo... class TestScopedSnapshot (line 379) | class TestScopedSnapshot: method _make_cdp_dispatcher (line 410) | def _make_cdp_dispatcher( method test_selector_scoped_capture (line 445) | async def test_selector_scoped_capture(self, snapshot_manager, mock_pa... method test_selector_not_found_falls_back (line 466) | async def test_selector_not_found_falls_back(self, snapshot_manager, m... method test_no_selector_skips_dom_calls (line 478) | async def test_no_selector_skips_dom_calls(self, snapshot_manager, moc... method test_dom_error_falls_back (line 492) | async def test_dom_error_falls_back(self, snapshot_manager, mock_page): method test_partial_ax_tree_failure_falls_back (line 513) | async def test_partial_ax_tree_failure_falls_back(self, snapshot_manag... method test_scoped_snapshot_empty_formatted_fallback (line 530) | async def test_scoped_snapshot_empty_formatted_fallback(self, snapshot... method test_scoped_snapshot_fallback_cdp_error (line 551) | async def test_scoped_snapshot_fallback_cdp_error(self, snapshot_manag... method test_queryAXTree_empty_nodes_falls_back (line 585) | async def test_queryAXTree_empty_nodes_falls_back(self, snapshot_manag... class TestFormatCdpNode (line 597) | class TestFormatCdpNode: method test_format_cdp_node_missing_node (line 600) | def test_format_cdp_node_missing_node(self, snapshot_manager): method test_format_node_non_dict_value (line 608) | def test_format_node_non_dict_value(self, snapshot_manager): method test_format_node_unrecognized_property (line 628) | def test_format_node_unrecognized_property(self, snapshot_manager): method test_format_node_no_children_no_properties (line 649) | def test_format_node_no_children_no_properties(self, snapshot_manager): class TestScopedSnapshotEdgeCases (line 669) | class TestScopedSnapshotEdgeCases: method test_scoped_fallback_full_tree_no_root (line 672) | async def test_scoped_fallback_full_tree_no_root(self, snapshot_manage... method test_resolve_selector_dom_disable_failure (line 704) | async def test_resolve_selector_dom_disable_failure(self, snapshot_man... class TestCleanupSession (line 732) | class TestCleanupSession: method test_cleanup_session (line 735) | async def test_cleanup_session(self, snapshot_manager, mock_page): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/conftest.py function tests_setup_and_teardown (line 9) | def tests_setup_and_teardown(): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_cache.py class TestCache (line 21) | class TestCache: method setup_method (line 24) | def setup_method(self): method test_load_links_only (line 34) | def test_load_links_only(self, mock_index_variants, mock_normalize, mo... method test_ensure_ready_calls_load_links_only (line 57) | def test_ensure_ready_calls_load_links_only(self): method test_ensure_ready_skips_when_loaded (line 69) | def test_ensure_ready_skips_when_loaded(self): method test_ensure_page_fetches_new_page (line 83) | def test_ensure_page_fetches_new_page(self, mock_format_title, mock_fe... method test_ensure_page_returns_cached (line 102) | def test_ensure_page_returns_cached(self): method test_ensure_page_handles_fetch_error (line 120) | def test_ensure_page_handles_fetch_error(self, mock_fetch): method test_get_index_returns_current_index (line 132) | def test_get_index_returns_current_index(self): method test_get_index_returns_none_when_not_loaded (line 144) | def test_get_index_returns_none_when_not_loaded(self): method test_get_url_cache_returns_cache_dict (line 155) | def test_get_url_cache_returns_cache_dict(self): method test_get_url_titles_returns_titles_dict (line 167) | def test_get_url_titles_returns_titles_dict(self): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_config.py class TestConfig (line 20) | class TestConfig: method test_config_custom_values (line 23) | def test_config_custom_values(self): method test_config_llm_texts_url_is_list (line 43) | def test_config_llm_texts_url_is_list(self): method test_global_doc_config_exists (line 52) | def test_global_doc_config_exists(self): method test_config_timeout_is_float (line 62) | def test_config_timeout_is_float(self): method test_config_user_agent_format (line 71) | def test_config_user_agent_format(self): method test_config_llm_texts_url_default_is_valid_url (line 81) | def test_config_llm_texts_url_default_is_valid_url(self): method test_config_supports_multiple_llm_urls (line 91) | def test_config_supports_multiple_llm_urls(self): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_doc_fetcher.py class TestDocFetcher (line 21) | class TestDocFetcher: method test_get_success (line 25) | def test_get_success(self, mock_urlopen): method test_get_handles_encoding_errors (line 39) | def test_get_handles_encoding_errors(self, mock_urlopen): method test_parse_llms_txt_extracts_links (line 53) | def test_parse_llms_txt_extracts_links(self): method test_parse_llms_txt_handles_empty_titles (line 74) | def test_parse_llms_txt_handles_empty_titles(self): method test_html_to_text_removes_script_style (line 87) | def test_html_to_text_removes_script_style(self): method test_html_to_text_removes_tags (line 112) | def test_html_to_text_removes_tags(self): method test_html_to_text_unescapes_entities (line 128) | def test_html_to_text_unescapes_entities(self): method test_extract_html_title_from_title_tag (line 139) | def test_extract_html_title_from_title_tag(self): method test_extract_html_title_from_og_meta (line 150) | def test_extract_html_title_from_og_meta(self): method test_extract_html_title_from_h1 (line 161) | def test_extract_html_title_from_h1(self): method test_extract_html_title_returns_none_when_not_found (line 172) | def test_extract_html_title_returns_none_when_not_found(self): method test_extract_html_title_unescapes_entities (line 183) | def test_extract_html_title_unescapes_entities(self): method test_fetch_and_clean_html_content (line 195) | def test_fetch_and_clean_html_content(self, mock_get): method test_fetch_and_clean_plain_text_content (line 220) | def test_fetch_and_clean_plain_text_content(self, mock_get): method test_fetch_and_clean_markdown_content (line 235) | def test_fetch_and_clean_markdown_content(self, mock_get): method test_fetch_and_clean_html_without_title (line 258) | def test_fetch_and_clean_html_without_title(self, mock_get): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_indexer.py class TestIndexer (line 20) | class TestIndexer: method test_index_search_initialization (line 23) | def test_index_search_initialization(self): method test_add_document_basic (line 33) | def test_add_document_basic(self): method test_add_document_with_markdown_headers (line 55) | def test_add_document_with_markdown_headers(self): method test_add_document_with_code_blocks (line 75) | def test_add_document_with_code_blocks(self): method test_add_document_with_links (line 95) | def test_add_document_with_links(self): method test_add_multiple_documents (line 115) | def test_add_multiple_documents(self): method test_search_empty_index (line 137) | def test_search_empty_index(self): method test_search_single_document (line 148) | def test_search_single_document(self): method test_search_multiple_documents_ranking (line 169) | def test_search_multiple_documents_ranking(self): method test_search_respects_k_limit (line 218) | def test_search_respects_k_limit(self): method test_search_multi_token_query (line 239) | def test_search_multi_token_query(self): method test_search_case_insensitive (line 277) | def test_search_case_insensitive(self): method test_title_boost_empty_content (line 299) | def test_title_boost_empty_content(self): method test_title_boost_short_vs_long_content (line 331) | def test_title_boost_short_vs_long_content(self): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_init.py class TestInit (line 21) | class TestInit: method test_version (line 24) | def test_version(self): method test_module_reload (line 43) | def test_module_reload(self): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_main.py class TestMain (line 20) | class TestMain: method test_main_function (line 25) | def test_main_function(self, mock_cache, mock_mcp): method test_module_execution (line 36) | def test_module_execution(self): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_server.py class TestSearchDocs (line 25) | class TestSearchDocs: method test_search_agentcore_docs_with_results (line 32) | def test_search_agentcore_docs_with_results( method test_search_agentcore_docs_no_index (line 74) | def test_search_agentcore_docs_no_index(self, mock_get_index, mock_ens... method test_search_agentcore_docs_empty_results (line 89) | def test_search_agentcore_docs_empty_results( method test_search_agentcore_docs_hydrates_top_results (line 109) | def test_search_agentcore_docs_hydrates_top_results( class TestFetchDoc (line 146) | class TestFetchDoc: method test_fetch_agentcore_doc_success (line 151) | def test_fetch_agentcore_doc_success(self, mock_ensure_page, mock_ensu... method test_fetch_agentcore_doc_failure (line 173) | def test_fetch_agentcore_doc_failure(self, mock_ensure_page, mock_ensu... method test_fetch_agentcore_doc_http_url (line 190) | def test_fetch_agentcore_doc_http_url(self, mock_ensure_page, mock_ens... FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_text_processor.py class TestTextProcessor (line 20) | class TestTextProcessor: method test_normalize_collapses_whitespace (line 23) | def test_normalize_collapses_whitespace(self): method test_title_from_url_extracts_slug (line 37) | def test_title_from_url_extracts_slug(self): method test_format_display_title_prioritizes_curated (line 62) | def test_format_display_title_prioritizes_curated(self): method test_format_display_title_uses_extracted_when_available (line 71) | def test_format_display_title_uses_extracted_when_available(self): method test_format_display_title_falls_back_to_url (line 80) | def test_format_display_title_falls_back_to_url(self): method test_format_display_title_handles_generic_titles (line 89) | def test_format_display_title_handles_generic_titles(self): method test_index_title_variants_generates_variants (line 100) | def test_index_title_variants_generates_variants(self): method test_index_title_variants_handles_numeric_substitution (line 112) | def test_index_title_variants_handles_numeric_substitution(self): method test_normalize_for_comparison_removes_punctuation (line 122) | def test_normalize_for_comparison_removes_punctuation(self): method test_make_snippet_returns_title_for_empty_page (line 130) | def test_make_snippet_returns_title_for_empty_page(self): method test_make_snippet_removes_code_blocks (line 143) | def test_make_snippet_removes_code_blocks(self): method test_make_snippet_skips_title_line (line 165) | def test_make_snippet_skips_title_line(self): method test_make_snippet_skips_headings_and_toc (line 181) | def test_make_snippet_skips_headings_and_toc(self): method test_make_snippet_truncates_long_content (line 204) | def test_make_snippet_truncates_long_content(self): method test_make_snippet_stops_at_sentence_end (line 215) | def test_make_snippet_stops_at_sentence_end(self): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_tools.py class TestMemoryTool (line 20) | class TestMemoryTool: method test_manage_agentcore_memory_returns_guide (line 23) | def test_manage_agentcore_memory_returns_guide(self): class TestRuntimeTool (line 33) | class TestRuntimeTool: method test_manage_agentcore_runtime_returns_guide (line 36) | def test_manage_agentcore_runtime_returns_guide(self): class TestGatewayTool (line 46) | class TestGatewayTool: method test_manage_agentcore_gateway_returns_guide (line 49) | def test_manage_agentcore_gateway_returns_guide(self): FILE: src/amazon-bedrock-agentcore-mcp-server/tests/test_url_validator.py class TestURLValidator (line 25) | class TestURLValidator: method test_init_with_domain_prefixes (line 28) | def test_init_with_domain_prefixes(self): method test_is_url_allowed (line 37) | def test_is_url_allowed(self): method test_validate_urls_all_valid (line 53) | def test_validate_urls_all_valid(self): method test_validate_urls_some_invalid (line 66) | def test_validate_urls_some_invalid(self): method test_validate_urls_empty_list (line 82) | def test_validate_urls_empty_list(self): FILE: src/amazon-kendra-index-mcp-server/awslabs/amazon_kendra_index_mcp_server/server.py function kendra_list_indexes_tool (line 35) | async def kendra_list_indexes_tool( function kendra_query_tool (line 105) | async def kendra_query_tool( function main (line 167) | def main(): FILE: src/amazon-kendra-index-mcp-server/awslabs/amazon_kendra_index_mcp_server/util.py function get_kendra_client (line 27) | def get_kendra_client(region=None) -> KendraClient: FILE: src/amazon-kendra-index-mcp-server/tests/test_init.py class TestInit (line 20) | class TestInit: method test_version (line 23) | def test_version(self): method test_module_reload (line 40) | def test_module_reload(self): FILE: src/amazon-kendra-index-mcp-server/tests/test_main.py class TestMain (line 20) | class TestMain: method test_main_default (line 25) | def test_main_default(self, mock_run): method test_module_execution (line 34) | def test_module_execution(self): FILE: src/amazon-kendra-index-mcp-server/tests/test_server.py function test_kendra_query_tool (line 25) | async def test_kendra_query_tool(mocker): function test_kendra_query_tool_error_handling (line 103) | async def test_kendra_query_tool_error_handling(mocker): function test_kendra_list_indexes_tool (line 132) | async def test_kendra_list_indexes_tool(mocker): function test_kendra_list_indexes_tool_pagination (line 198) | async def test_kendra_list_indexes_tool_pagination(mocker): function test_lkendra_list_indexes_tool_error_handling (line 278) | async def test_lkendra_list_indexes_tool_error_handling(mocker): FILE: src/amazon-keyspaces-mcp-server/awslabs/amazon_keyspaces_mcp_server/client.py class SSLOptions (line 49) | class SSLOptions: method __init__ (line 52) | def __init__(self, ssl_context=None, server_hostname=None): class UnifiedCassandraClient (line 65) | class UnifiedCassandraClient: method __init__ (line 68) | def __init__(self, database_config: DatabaseConfig): method _create_cassandra_session (line 86) | def _create_cassandra_session(self) -> Session: method _create_keyspaces_session (line 108) | def _create_keyspaces_session(self) -> Session: method _create_ssl_context_for_keyspaces (line 150) | def _create_ssl_context_for_keyspaces(self) -> ssl.SSLContext: method is_using_keyspaces (line 169) | def is_using_keyspaces(self) -> bool: method list_keyspaces (line 173) | def list_keyspaces(self) -> List[KeyspaceInfo]: method list_tables (line 201) | def list_tables(self, keyspace_name: str) -> List[TableInfo]: method describe_keyspace (line 218) | def describe_keyspace(self, keyspace_name: str) -> Dict[str, Any]: method describe_table (line 245) | def describe_table(self, keyspace_name: str, table_name: str) -> Dict[... method execute_read_only_query (line 328) | def execute_read_only_query( method _add_keyspaces_context (line 395) | def _add_keyspaces_context(self, details: Dict[str, Any]) -> None: method _build_service_characteristics (line 400) | def _build_service_characteristics(self) -> Dict[str, Any]: method close (line 420) | def close(self) -> None: FILE: src/amazon-keyspaces-mcp-server/awslabs/amazon_keyspaces_mcp_server/config.py class DatabaseConfig (line 29) | class DatabaseConfig: method from_env (line 46) | def from_env(cls): class AppConfig (line 63) | class AppConfig: method from_env (line 69) | def from_env(cls): FILE: src/amazon-keyspaces-mcp-server/awslabs/amazon_keyspaces_mcp_server/llm_context.py function build_list_keyspaces_context (line 20) | def build_list_keyspaces_context(keyspaces: List[KeyspaceInfo]) -> str: function build_list_tables_context (line 47) | def build_list_tables_context(keyspace_name: str, tables: List[TableInfo... function build_keyspace_details_context (line 69) | def build_keyspace_details_context(keyspace_details: Dict[str, Any]) -> ... function build_table_details_context (line 88) | def build_table_details_context(table_details: Dict[str, Any]) -> str: function build_query_result_context (line 119) | def build_query_result_context(query_results: Dict[str, Any]) -> str: function build_query_analysis_context (line 159) | def build_query_analysis_context(analysis_result: QueryAnalysisResult) -... function build_cassandra_knowledge (line 196) | def build_cassandra_knowledge() -> Dict[str, str]: function build_amazon_keyspaces_knowledge (line 212) | def build_amazon_keyspaces_knowledge() -> Dict[str, str]: function dict_to_markdown (line 230) | def dict_to_markdown(data: Dict[str, Any], level: int = 0) -> str: FILE: src/amazon-keyspaces-mcp-server/awslabs/amazon_keyspaces_mcp_server/models.py class KeyspaceInfo (line 21) | class KeyspaceInfo: class ColumnInfo (line 30) | class ColumnInfo: class TableInfo (line 41) | class TableInfo: class QueryResult (line 50) | class QueryResult: class QueryAnalysisResult (line 60) | class QueryAnalysisResult: FILE: src/amazon-keyspaces-mcp-server/awslabs/amazon_keyspaces_mcp_server/server.py function get_proxy (line 51) | def get_proxy(): function list_keyspaces (line 78) | def list_keyspaces( function list_tables (line 89) | def list_tables( function describe_keyspace (line 101) | def describe_keyspace( function describe_table (line 113) | def describe_table( function execute_query (line 126) | def execute_query( function analyze_query_performance (line 139) | def analyze_query_performance( class KeyspacesMcpStdioServer (line 148) | class KeyspacesMcpStdioServer: method __init__ (line 151) | def __init__( method handle_list_keyspaces (line 162) | def handle_list_keyspaces(self, ctx: Optional[Any] = None) -> str: method _handle_list_tables (line 186) | def _handle_list_tables(self, keyspace: str, ctx: Optional[Context] = ... method _handle_describe_keyspace (line 213) | def _handle_describe_keyspace(self, keyspace: str, ctx: Optional[Conte... method _handle_describe_table (line 252) | def _handle_describe_table( method _handle_execute_query (line 320) | def _handle_execute_query( method _handle_analyze_query_performance (line 391) | def _handle_analyze_query_performance( function main (line 427) | def main(): FILE: src/amazon-keyspaces-mcp-server/awslabs/amazon_keyspaces_mcp_server/services.py class DataService (line 26) | class DataService: method __init__ (line 29) | def __init__(self, cassandra_client: UnifiedCassandraClient): method execute_read_only_query (line 36) | def execute_read_only_query(self, keyspace_name: str, query: str) -> D... class SchemaService (line 76) | class SchemaService: method __init__ (line 79) | def __init__(self, cassandra_client: UnifiedCassandraClient): method list_keyspaces (line 86) | def list_keyspaces(self) -> List[KeyspaceInfo]: method list_tables (line 91) | def list_tables(self, keyspace_name: str) -> List[TableInfo]: method describe_keyspace (line 96) | def describe_keyspace(self, keyspace_name: str) -> Dict[str, Any]: method describe_table (line 101) | def describe_table(self, keyspace_name: str, table_name: str) -> Dict[... class QueryAnalysisService (line 107) | class QueryAnalysisService: method __init__ (line 110) | def __init__(self, cassandra_client: UnifiedCassandraClient, schema_se... method analyze_query (line 116) | def analyze_query(self, keyspace_name: str, query: str) -> QueryAnalys... method _normalize_query (line 195) | def _normalize_query(self, query: str) -> str: method _extract_table_name (line 199) | def _extract_table_name(self, query: str) -> str: method _extract_where_conditions (line 215) | def _extract_where_conditions(self, query: str) -> List[str]: method _extract_partition_key_columns (line 244) | def _extract_partition_key_columns(self, table_details: Dict[str, Any]... method _extract_clustering_columns (line 257) | def _extract_clustering_columns(self, table_details: Dict[str, Any]) -... method _check_partition_key_usage (line 270) | def _check_partition_key_usage( method _check_clustering_column_usage (line 279) | def _check_clustering_column_usage( method _check_secondary_index_usage (line 287) | def _check_secondary_index_usage( method _generate_performance_assessment (line 309) | def _generate_performance_assessment( FILE: src/amazon-keyspaces-mcp-server/tests/test_client.py class TestUnifiedCassandraClient (line 23) | class TestUnifiedCassandraClient(unittest.TestCase): method setUp (line 26) | def setUp(self): method test_create_cassandra_session (line 58) | def test_create_cassandra_session(self, mock_cluster_class): method test_create_keyspaces_session_with_ssl_options (line 92) | def test_create_keyspaces_session_with_ssl_options( method test_create_keyspaces_session_without_ssl_options (line 148) | def test_create_keyspaces_session_without_ssl_options( method test_ssl_context_load_error (line 201) | def test_ssl_context_load_error(self, mock_ssl, mock_cluster_class): method test_is_using_keyspaces (line 222) | def test_is_using_keyspaces(self): method test_list_keyspaces (line 233) | def test_list_keyspaces(self): method test_describe_keyspace (line 268) | def test_describe_keyspace(self): method test_list_tables (line 315) | def test_list_tables(self): method test_describe_keyspace_not_found (line 350) | def test_describe_keyspace_not_found(self): method test_describe_table (line 370) | def test_describe_table(self): method test_describe_table_not_found (line 435) | def test_describe_table_not_found(self): method test_execute_read_only_query (line 452) | def test_execute_read_only_query(self): method test_execute_read_only_query_with_params (line 501) | def test_execute_read_only_query_with_params(self): method test_execute_read_only_query_non_select (line 542) | def test_execute_read_only_query_non_select(self): method test_execute_read_only_query_unsafe_operations (line 554) | def test_execute_read_only_query_unsafe_operations(self): method test_close (line 566) | def test_close(self): FILE: src/amazon-keyspaces-mcp-server/tests/test_init.py class TestInit (line 17) | class TestInit: method test_version (line 20) | def test_version(self): method test_module_reload (line 37) | def test_module_reload(self): FILE: src/amazon-keyspaces-mcp-server/tests/test_main.py class TestMain (line 17) | class TestMain: method test_main_default (line 22) | def test_main_default(self, mock_run): method test_module_execution (line 37) | def test_module_execution(self): FILE: src/amazon-keyspaces-mcp-server/tests/test_query_analysis_service.py class TestQueryAnalysisService (line 19) | class TestQueryAnalysisService(unittest.TestCase): method setUp (line 22) | def setUp(self): method test_normalize_query (line 30) | def test_normalize_query(self): method test_extract_table_name_simple (line 36) | def test_extract_table_name_simple(self): method test_extract_table_name_with_keyspace (line 42) | def test_extract_table_name_with_keyspace(self): method test_extract_where_conditions_simple (line 48) | def test_extract_where_conditions_simple(self): method test_extract_where_conditions_multiple (line 54) | def test_extract_where_conditions_multiple(self): method test_extract_where_conditions_with_order_by (line 60) | def test_extract_where_conditions_with_order_by(self): method test_extract_where_conditions_with_limit (line 66) | def test_extract_where_conditions_with_limit(self): method test_extract_partition_key_columns (line 72) | def test_extract_partition_key_columns(self): method test_extract_clustering_columns (line 84) | def test_extract_clustering_columns(self): method test_check_partition_key_usage_all_used (line 96) | def test_check_partition_key_usage_all_used(self): method test_check_partition_key_usage_not_all_used (line 105) | def test_check_partition_key_usage_not_all_used(self): method test_check_clustering_column_usage_used (line 114) | def test_check_clustering_column_usage_used(self): method test_check_clustering_column_usage_not_used (line 123) | def test_check_clustering_column_usage_not_used(self): method test_check_secondary_index_usage_used (line 132) | def test_check_secondary_index_usage_used(self): method test_check_secondary_index_usage_not_used (line 141) | def test_check_secondary_index_usage_not_used(self): method test_check_secondary_index_usage_no_indexes (line 150) | def test_check_secondary_index_usage_no_indexes(self): method test_check_secondary_index_usage_with_quotes (line 159) | def test_check_secondary_index_usage_with_quotes(self): method test_generate_performance_assessment_good_query (line 168) | def test_generate_performance_assessment_good_query(self): method test_generate_performance_assessment_bad_query (line 186) | def test_generate_performance_assessment_bad_query(self): method test_generate_performance_assessment_with_secondary_index (line 204) | def test_generate_performance_assessment_with_secondary_index(self): method test_analyze_query_integration (line 220) | def test_analyze_query_integration(self): method test_analyze_query_with_error (line 251) | def test_analyze_query_with_error(self): method test_analyze_query_with_allow_filtering (line 265) | def test_analyze_query_with_allow_filtering(self): method test_analyze_query_with_secondary_index (line 291) | def test_analyze_query_with_secondary_index(self): method test_analyze_query_table_not_found (line 316) | def test_analyze_query_table_not_found(self): method test_analyze_query_unable_to_determine_table (line 331) | def test_analyze_query_unable_to_determine_table(self): FILE: src/amazon-keyspaces-mcp-server/tests/test_server.py class TestServerTools (line 30) | class TestServerTools(unittest.TestCase): method test_list_keyspaces (line 34) | def test_list_keyspaces(self, mock_get_proxy): method test_list_tables (line 49) | def test_list_tables(self, mock_get_proxy): method test_describe_keyspace (line 64) | def test_describe_keyspace(self, mock_get_proxy): method test_describe_table (line 79) | def test_describe_table(self, mock_get_proxy): method test_execute_query (line 94) | def test_execute_query(self, mock_get_proxy): method test_analyze_query_performance (line 111) | def test_analyze_query_performance(self, mock_get_proxy): class TestKeyspacesMcpStdioServer (line 128) | class TestKeyspacesMcpStdioServer(unittest.TestCase): method setUp (line 131) | def setUp(self): method test_handle_list_keyspaces (line 141) | def test_handle_list_keyspaces(self): method test_handle_list_keyspaces_empty (line 158) | def test_handle_list_keyspaces_empty(self): method test_handle_list_keyspaces_error (line 172) | def test_handle_list_keyspaces_error(self): method test_handle_list_tables (line 184) | def test_handle_list_tables(self): method test_handle_list_tables_empty (line 201) | def test_handle_list_tables_empty(self): method test_handle_list_tables_error (line 215) | def test_handle_list_tables_error(self): method test_handle_describe_keyspace (line 227) | def test_handle_describe_keyspace(self): method test_handle_describe_keyspace_simple_strategy (line 249) | def test_handle_describe_keyspace_simple_strategy(self): method test_handle_describe_keyspace_error (line 271) | def test_handle_describe_keyspace_error(self): method test_handle_describe_table (line 283) | def test_handle_describe_table(self): method test_handle_describe_table_with_clustering_columns (line 315) | def test_handle_describe_table_with_clustering_columns(self): method test_handle_describe_table_error (line 348) | def test_handle_describe_table_error(self): method test_handle_execute_query (line 360) | def test_handle_execute_query(self): method test_handle_execute_query_no_rows (line 386) | def test_handle_execute_query_no_rows(self): method test_handle_execute_query_many_rows (line 407) | def test_handle_execute_query_many_rows(self): method test_handle_execute_query_non_select (line 432) | def test_handle_execute_query_non_select(self): method test_handle_execute_query_unsafe_operations (line 445) | def test_handle_execute_query_unsafe_operations(self): method test_handle_execute_query_error (line 458) | def test_handle_execute_query_error(self): method test_handle_analyze_query_performance (line 474) | def test_handle_analyze_query_performance(self): method test_handle_analyze_query_performance_no_recommendations (line 506) | def test_handle_analyze_query_performance_no_recommendations(self): method test_handle_analyze_query_performance_error (line 537) | def test_handle_analyze_query_performance_error(self): function test_get_proxy (line 556) | def test_get_proxy(mock_app_config, mock_client_class): FILE: src/amazon-keyspaces-mcp-server/tests/test_services.py class TestDataService (line 25) | class TestDataService(unittest.TestCase): method setUp (line 28) | def setUp(self): method test_execute_read_only_query_without_keyspace_qualifier (line 39) | def test_execute_read_only_query_without_keyspace_qualifier(self): method test_execute_read_only_query_with_keyspace_qualifier (line 56) | def test_execute_read_only_query_with_keyspace_qualifier(self): method test_execute_read_only_query_with_complex_query (line 69) | def test_execute_read_only_query_with_complex_query(self): class TestSchemaService (line 84) | class TestSchemaService(unittest.TestCase): method setUp (line 87) | def setUp(self): method test_list_keyspaces (line 93) | def test_list_keyspaces(self): method test_list_tables (line 110) | def test_list_tables(self): method test_describe_keyspace (line 130) | def test_describe_keyspace(self): method test_describe_table (line 151) | def test_describe_table(self): FILE: src/amazon-mq-mcp-server/awslabs/amazon_mq_mcp_server/aws_service_mcp_generator.py class AWSToolGenerator (line 36) | class AWSToolGenerator: method __init__ (line 39) | def __init__( method generate (line 68) | def generate(self): method get_mcp (line 72) | def get_mcp(self): method __register_operations (line 76) | def __register_operations(self): method __get_client (line 100) | def __get_client(self, region: str = 'us-east-1') -> Any: method __get_operations (line 110) | def __get_operations(self) -> List[str]: method __handle_function_override (line 120) | def __handle_function_override(self, operation: str, func_override: An... method __create_operation_function (line 132) | def __create_operation_function( method __get_operation_input_parameters (line 237) | def __get_operation_input_parameters( method __snake_to_camel (line 259) | def __snake_to_camel(self, snake_str: str) -> str: method __validate_tool_configuration (line 263) | def __validate_tool_configuration(self): FILE: src/amazon-mq-mcp-server/awslabs/amazon_mq_mcp_server/rabbitmq/admin.py class RabbitMQAdmin (line 25) | class RabbitMQAdmin: method __init__ (line 28) | def __init__(self, hostname: str, username: str, password: str): method _make_request (line 36) | def _make_request( method test_connection (line 45) | def test_connection(self): method list_queues (line 49) | def list_queues(self) -> list[dict]: method list_queues_by_vhost (line 54) | def list_queues_by_vhost(self, vhost: str = '/') -> list[dict]: method list_exchanges (line 60) | def list_exchanges(self) -> list[dict]: method list_exchanges_by_vhost (line 65) | def list_exchanges_by_vhost(self, vhost: str = '/') -> list[dict]: method get_queue_info (line 71) | def get_queue_info(self, queue: str, vhost: str = '/') -> dict: method delete_queue (line 77) | def delete_queue(self, queue: str, vhost: str = '/') -> None: method purge_queue (line 83) | def purge_queue(self, queue: str, vhost: str = '/') -> None: method get_exchange_info (line 89) | def get_exchange_info(self, exchange: str, vhost: str = '/') -> dict: method delete_exchange (line 95) | def delete_exchange(self, exchange: str, vhost: str = '/') -> None: method get_bindings (line 101) | def get_bindings( method get_overview (line 118) | def get_overview(self) -> dict: method list_vhosts (line 123) | def list_vhosts(self) -> dict: method list_shovels (line 128) | def list_shovels(self) -> list[dict]: method get_shovel_info (line 133) | def get_shovel_info(self, shovel_name: str, vhost: str = '/') -> dict: method get_cluster_nodes (line 139) | def get_cluster_nodes(self) -> dict: method get_node_information (line 144) | def get_node_information(self, node_name: str) -> dict: method get_node_memory (line 149) | def get_node_memory(self, node_name: str) -> dict: method list_connections (line 154) | def list_connections(self) -> dict: method list_consumers (line 159) | def list_consumers(self) -> Any: method list_users (line 164) | def list_users(self) -> Any: method get_alarm_status (line 169) | def get_alarm_status(self) -> int: method get_is_node_quorum_critical (line 174) | def get_is_node_quorum_critical(self) -> int: method get_broker_definition (line 179) | def get_broker_definition(self) -> dict: FILE: src/amazon-mq-mcp-server/awslabs/amazon_mq_mcp_server/rabbitmq/connection.py class RabbitMQConnection (line 22) | class RabbitMQConnection: method __init__ (line 25) | def __init__(self, hostname: str, username: str, password: str): method get_channel (line 35) | def get_channel(self) -> tuple[Any, Any]: function validate_rabbitmq_name (line 42) | def validate_rabbitmq_name(name: str, field_name: str) -> None: FILE: src/amazon-mq-mcp-server/awslabs/amazon_mq_mcp_server/rabbitmq/handlers.py function handle_get_guidelines (line 29) | def handle_get_guidelines(guideline_name: str): function handle_enqueue (line 63) | def handle_enqueue(rabbitmq: RabbitMQConnection, queue: str, message: str): function handle_fanout (line 71) | def handle_fanout(rabbitmq: RabbitMQConnection, exchange: str, message: ... function handle_get_overview (line 86) | def handle_get_overview(rabbitmq_admin: RabbitMQAdmin) -> dict: function handle_is_broker_in_alarm (line 91) | def handle_is_broker_in_alarm(rabbitmq_admin: RabbitMQAdmin) -> bool: function handle_is_node_in_quorum_critical (line 97) | def handle_is_node_in_quorum_critical(rabbitmq_admin: RabbitMQAdmin) -> ... function handle_get_definition (line 103) | def handle_get_definition(rabbitmq_admin: RabbitMQAdmin) -> dict: function handle_list_connections (line 111) | def handle_list_connections(rabbitmq_admin: RabbitMQAdmin) -> list[Any]: function handle_list_consumers (line 130) | def handle_list_consumers(rabbitmq_admin: RabbitMQAdmin) -> list[dict]: function handle_get_cluster_nodes (line 138) | def handle_get_cluster_nodes(rabbitmq_admin: RabbitMQAdmin) -> list[dict]: function handle_get_cluster_node_memory (line 163) | def handle_get_cluster_node_memory(rabbitmq_admin: RabbitMQAdmin, node_n... function handle_list_queues (line 171) | def handle_list_queues(rabbitmq_admin: RabbitMQAdmin) -> List[str]: function handle_list_queues_by_vhost (line 177) | def handle_list_queues_by_vhost(rabbitmq_admin: RabbitMQAdmin, vhost: st... function handle_get_queue_info (line 183) | def handle_get_queue_info(rabbitmq_admin: RabbitMQAdmin, queue: str, vho... function handle_delete_queue (line 188) | def handle_delete_queue(rabbitmq_admin: RabbitMQAdmin, queue: str, vhost... function handle_purge_queue (line 193) | def handle_purge_queue(rabbitmq_admin: RabbitMQAdmin, queue: str, vhost:... function handle_list_exchanges (line 201) | def handle_list_exchanges(rabbitmq_admin: RabbitMQAdmin) -> List[str]: function handle_list_exchanges_by_vhost (line 207) | def handle_list_exchanges_by_vhost(rabbitmq_admin: RabbitMQAdmin, vhost:... function handle_delete_exchange (line 213) | def handle_delete_exchange(rabbitmq_admin: RabbitMQAdmin, exchange: str,... function handle_get_exchange_info (line 218) | def handle_get_exchange_info( function handle_list_vhosts (line 228) | def handle_list_vhosts(rabbitmq_admin: RabbitMQAdmin) -> List[str]: function handle_list_shovels (line 237) | def handle_list_shovels(rabbitmq_admin: RabbitMQAdmin) -> List[dict]: function handle_shovel (line 242) | def handle_shovel(rabbitmq_admin: RabbitMQAdmin, shovel_name: str, vhost... function handle_list_users (line 250) | def handle_list_users(rabbitmq_admin: RabbitMQAdmin) -> list[dict]: FILE: src/amazon-mq-mcp-server/awslabs/amazon_mq_mcp_server/rabbitmq/module.py class RabbitMQModule (line 43) | class RabbitMQModule: method __init__ (line 46) | def __init__(self, mcp: FastMCP): method register_rabbitmq_management_tools (line 52) | def register_rabbitmq_management_tools(self, allow_mutative_tools: boo... method __register_critical_tools (line 59) | def __register_critical_tools(self): method __register_read_only_tools (line 131) | def __register_read_only_tools(self): method __register_mutative_tools (line 274) | def __register_mutative_tools(self): FILE: src/amazon-mq-mcp-server/awslabs/amazon_mq_mcp_server/server.py function create_broker_override (line 26) | def create_broker_override(mcp: FastMCP, mq_client_getter: BOTO3_CLIENT_... function create_configuration_override (line 87) | def create_configuration_override(mcp: FastMCP, mq_client_getter: BOTO3_... function allow_mutative_action_only_on_tagged_resource (line 110) | def allow_mutative_action_only_on_tagged_resource( function main (line 135) | def main(): FILE: src/amazon-mq-mcp-server/tests/rabbitmq/conftest.py function mock_rabbitmq_connection (line 22) | def mock_rabbitmq_connection(): function mock_rabbitmq_admin (line 31) | def mock_rabbitmq_admin(): function mock_mcp_server (line 37) | def mock_mcp_server(): FILE: src/amazon-mq-mcp-server/tests/rabbitmq/test_admin.py class TestRabbitMQAdmin (line 23) | class TestRabbitMQAdmin: method setup_method (line 26) | def setup_method(self): method test_init_with_tls (line 30) | def test_init_with_tls(self): method test_make_request_success (line 37) | def test_make_request_success(self, mock_request): method test_make_request_failure (line 48) | def test_make_request_failure(self, mock_request): method test_list_queues (line 57) | def test_list_queues(self, mock_request): method test_list_queues_by_vhost (line 65) | def test_list_queues_by_vhost(self, mock_request): method test_get_queue_info (line 73) | def test_get_queue_info(self, mock_request): method test_delete_queue (line 81) | def test_delete_queue(self, mock_request): method test_purge_queue (line 87) | def test_purge_queue(self, mock_request): method test_list_exchanges (line 93) | def test_list_exchanges(self, mock_request): method test_get_exchange_info (line 101) | def test_get_exchange_info(self, mock_request): method test_delete_exchange (line 109) | def test_delete_exchange(self, mock_request): method test_list_vhosts (line 115) | def test_list_vhosts(self, mock_request): method test_list_shovels (line 123) | def test_list_shovels(self, mock_request): method test_get_shovel_info (line 131) | def test_get_shovel_info(self, mock_request): method test_list_exchanges_by_vhost (line 139) | def test_list_exchanges_by_vhost(self, mock_request): method test_get_bindings_with_queue (line 147) | def test_get_bindings_with_queue(self, mock_request): method test_get_bindings_with_exchange (line 155) | def test_get_bindings_with_exchange(self, mock_request): method test_get_bindings_all (line 163) | def test_get_bindings_all(self, mock_request): method test_get_overview (line 173) | def test_get_overview(self, mock_request): method test_get_cluster_nodes (line 181) | def test_get_cluster_nodes(self, mock_request): method test_get_node_information (line 189) | def test_get_node_information(self, mock_request): method test_get_node_memory (line 197) | def test_get_node_memory(self, mock_request): method test_list_connections (line 205) | def test_list_connections(self, mock_request): method test_list_consumers (line 213) | def test_list_consumers(self, mock_request): method test_list_users (line 221) | def test_list_users(self, mock_request): method test_get_alarm_status (line 229) | def test_get_alarm_status(self, mock_request): method test_get_is_node_quorum_critical (line 237) | def test_get_is_node_quorum_critical(self, mock_request): FILE: src/amazon-mq-mcp-server/tests/rabbitmq/test_connection.py class TestRabbitMQConnection (line 12) | class TestRabbitMQConnection: method test_init_with_tls (line 15) | def test_init_with_tls(self): method test_get_channel (line 23) | def test_get_channel(self, mock_connection_class): class TestValidateRabbitMQName (line 36) | class TestValidateRabbitMQName: method test_valid_names (line 39) | def test_valid_names(self): method test_empty_name (line 45) | def test_empty_name(self): method test_invalid_characters (line 52) | def test_invalid_characters(self): method test_name_too_long (line 57) | def test_name_too_long(self): FILE: src/amazon-mq-mcp-server/tests/rabbitmq/test_handlers.py class TestAMQPHandlers (line 45) | class TestAMQPHandlers: method test_handle_enqueue (line 48) | def test_handle_enqueue(self): method test_handle_fanout (line 61) | def test_handle_fanout(self): class TestQueueHandlers (line 77) | class TestQueueHandlers: method test_handle_list_queues (line 80) | def test_handle_list_queues(self): method test_handle_list_queues_by_vhost (line 91) | def test_handle_list_queues_by_vhost(self): method test_handle_get_queue_info (line 99) | def test_handle_get_queue_info(self): method test_handle_delete_queue (line 108) | def test_handle_delete_queue(self): method test_handle_purge_queue (line 114) | def test_handle_purge_queue(self): class TestExchangeHandlers (line 121) | class TestExchangeHandlers: method test_handle_list_exchanges (line 124) | def test_handle_list_exchanges(self): method test_handle_list_exchanges_by_vhost (line 135) | def test_handle_list_exchanges_by_vhost(self): method test_handle_get_exchange_info (line 143) | def test_handle_get_exchange_info(self): method test_handle_delete_exchange (line 152) | def test_handle_delete_exchange(self): class TestVhostHandlers (line 159) | class TestVhostHandlers: method test_handle_list_vhosts (line 162) | def test_handle_list_vhosts(self): class TestShovelHandlers (line 174) | class TestShovelHandlers: method test_handle_list_shovels (line 177) | def test_handle_list_shovels(self): method test_handle_shovel (line 186) | def test_handle_shovel(self): class TestDocHandlers (line 196) | class TestDocHandlers: method test_handle_get_guidelines (line 199) | def test_handle_get_guidelines(self): class TestHealthHandlers (line 212) | class TestHealthHandlers: method test_handle_get_overview (line 215) | def test_handle_get_overview(self): method test_handle_is_broker_in_alarm (line 224) | def test_handle_is_broker_in_alarm(self): method test_handle_is_node_in_quorum_critical (line 232) | def test_handle_is_node_in_quorum_critical(self): class TestConnectionHandlers (line 241) | class TestConnectionHandlers: method test_handle_list_connections (line 244) | def test_handle_list_connections(self): method test_handle_list_consumers (line 261) | def test_handle_list_consumers(self): class TestClusterHandlers (line 271) | class TestClusterHandlers: method test_handle_get_cluster_nodes (line 274) | def test_handle_get_cluster_nodes(self): method test_handle_get_cluster_node_memory (line 299) | def test_handle_get_cluster_node_memory(self): class TestUserHandlers (line 309) | class TestUserHandlers: method test_handle_list_users (line 312) | def test_handle_list_users(self): FILE: src/amazon-mq-mcp-server/tests/rabbitmq/test_module.py class TestRabbitMQModule (line 6) | class TestRabbitMQModule: method setup_method (line 9) | def setup_method(self): method test_init (line 17) | def test_init(self): method test_register_rabbitmq_management_tools_read_only (line 28) | def test_register_rabbitmq_management_tools_read_only(self, mock_admin... method test_register_rabbitmq_management_tools_with_mutative (line 39) | def test_register_rabbitmq_management_tools_with_mutative( method test_initialize_connection_success (line 52) | def test_initialize_connection_success(self, mock_admin_class, mock_co... method test_read_only_tools_registration (line 72) | def test_read_only_tools_registration(self): method test_mutative_tools_registration (line 81) | def test_mutative_tools_registration(self): method test_mutative_tools_not_registered_when_disabled (line 90) | def test_mutative_tools_not_registered_when_disabled(self): class TestRabbitMQModuleToolFunctions (line 100) | class TestRabbitMQModuleToolFunctions: method setup_method (line 103) | def setup_method(self): method test_list_queues_tool_registration (line 111) | def test_list_queues_tool_registration(self): method test_mutative_tool_registration (line 120) | def test_mutative_tool_registration(self): method test_read_only_tools_registration_count (line 129) | def test_read_only_tools_registration_count(self): class TestRabbitMQModuleToolExecution (line 139) | class TestRabbitMQModuleToolExecution: method setup_method (line 142) | def setup_method(self): method test_connection_and_tool_execution (line 153) | def test_connection_and_tool_execution(self, mock_handle, mock_admin_c... method test_read_only_tools_execution_paths (line 174) | def test_read_only_tools_execution_paths(self): method test_mutative_tools_execution_paths (line 183) | def test_mutative_tools_execution_paths(self): class TestRabbitMQBrokerInitializeConnection (line 193) | class TestRabbitMQBrokerInitializeConnection: method setup_method (line 196) | def setup_method(self): method test_rabbimq_broker_initialize_connection_success (line 214) | def test_rabbimq_broker_initialize_connection_success(self, mock_admin... method test_rabbimq_broker_initialize_connection_failure (line 243) | def test_rabbimq_broker_initialize_connection_failure(self, mock_admin... class TestRabbitMQBrokerInitializeConnectionWithOAuth (line 256) | class TestRabbitMQBrokerInitializeConnectionWithOAuth: method setup_method (line 259) | def setup_method(self): method test_rabbimq_broker_initialize_connection_with_oauth_success (line 277) | def test_rabbimq_broker_initialize_connection_with_oauth_success( method test_rabbimq_broker_initialize_connection_with_oauth_failure (line 308) | def test_rabbimq_broker_initialize_connection_with_oauth_failure( class TestRabbitMQBrokerListQueues (line 323) | class TestRabbitMQBrokerListQueues: method setup_method (line 326) | def setup_method(self): method test_rabbitmq_broker_list_queues_success (line 340) | def test_rabbitmq_broker_list_queues_success(self, mock_handle): method test_rabbitmq_broker_list_queues_no_admin (line 351) | def test_rabbitmq_broker_list_queues_no_admin(self): method test_rabbitmq_broker_list_queues_failure (line 359) | def test_rabbitmq_broker_list_queues_failure(self, mock_handle): class TestRabbitMQBrokerListExchanges (line 370) | class TestRabbitMQBrokerListExchanges: method setup_method (line 373) | def setup_method(self): method test_rabbitmq_broker_list_exchanges_success (line 387) | def test_rabbitmq_broker_list_exchanges_success(self, mock_handle): method test_rabbitmq_broker_list_exchanges_no_admin (line 398) | def test_rabbitmq_broker_list_exchanges_no_admin(self): method test_rabbitmq_broker_list_exchanges_failure (line 406) | def test_rabbitmq_broker_list_exchanges_failure(self, mock_handle): class TestRabbitMQBrokerListVhosts (line 417) | class TestRabbitMQBrokerListVhosts: method setup_method (line 420) | def setup_method(self): method test_rabbitmq_broker_list_vhosts_success (line 434) | def test_rabbitmq_broker_list_vhosts_success(self, mock_handle): method test_rabbitmq_broker_list_vhosts_no_admin (line 445) | def test_rabbitmq_broker_list_vhosts_no_admin(self): method test_rabbitmq_broker_list_vhosts_failure (line 453) | def test_rabbitmq_broker_list_vhosts_failure(self, mock_handle): class TestRabbitMQBrokerGetQueueInfo (line 464) | class TestRabbitMQBrokerGetQueueInfo: method setup_method (line 467) | def setup_method(self): method test_rabbitmq_broker_get_queue_info_success (line 482) | def test_rabbitmq_broker_get_queue_info_success(self, mock_handle, moc... method test_rabbitmq_broker_get_queue_info_no_admin (line 494) | def test_rabbitmq_broker_get_queue_info_no_admin(self): class TestRabbitMQBrokerGetExchangeInfo (line 502) | class TestRabbitMQBrokerGetExchangeInfo: method setup_method (line 505) | def setup_method(self): method test_rabbitmq_broker_get_exchange_info_success (line 520) | def test_rabbitmq_broker_get_exchange_info_success(self, mock_handle, ... method test_rabbitmq_broker_get_exchange_info_no_admin (line 532) | def test_rabbitmq_broker_get_exchange_info_no_admin(self): class TestRabbitMQBrokerListShovels (line 540) | class TestRabbitMQBrokerListShovels: method setup_method (line 543) | def setup_method(self): method test_rabbitmq_broker_list_shovels_success (line 557) | def test_rabbitmq_broker_list_shovels_success(self, mock_handle): method test_rabbitmq_broker_list_shovels_no_admin (line 568) | def test_rabbitmq_broker_list_shovels_no_admin(self): class TestRabbitMQBrokerGetShovelInfo (line 576) | class TestRabbitMQBrokerGetShovelInfo: method setup_method (line 579) | def setup_method(self): method test_rabbitmq_broker_get_shovel_info_success (line 593) | def test_rabbitmq_broker_get_shovel_info_success(self, mock_handle): method test_rabbitmq_broker_get_shovel_info_no_admin (line 604) | def test_rabbitmq_broker_get_shovel_info_no_admin(self): class TestRabbitMQBrokerGetClusterNodesInfo (line 612) | class TestRabbitMQBrokerGetClusterNodesInfo: method setup_method (line 615) | def setup_method(self): method test_rabbitmq_broker_get_cluster_nodes_info_success (line 629) | def test_rabbitmq_broker_get_cluster_nodes_info_success(self, mock_han... method test_rabbitmq_broker_get_cluster_nodes_info_no_admin (line 640) | def test_rabbitmq_broker_get_cluster_nodes_info_no_admin(self): class TestRabbitMQBrokerListConnections (line 648) | class TestRabbitMQBrokerListConnections: method setup_method (line 651) | def setup_method(self): method test_rabbitmq_broker_list_connections_success (line 665) | def test_rabbitmq_broker_list_connections_success(self, mock_handle): method test_rabbitmq_broker_list_connections_no_admin (line 676) | def test_rabbitmq_broker_list_connections_no_admin(self): class TestRabbitMQBrokerListConsumers (line 684) | class TestRabbitMQBrokerListConsumers: method setup_method (line 687) | def setup_method(self): method test_rabbitmq_broker_list_consumers_success (line 701) | def test_rabbitmq_broker_list_consumers_success(self, mock_handle): method test_rabbitmq_broker_list_consumers_no_admin (line 712) | def test_rabbitmq_broker_list_consumers_no_admin(self): class TestRabbitMQBrokerListUsers (line 720) | class TestRabbitMQBrokerListUsers: method setup_method (line 723) | def setup_method(self): method test_rabbitmq_broker_list_users_success (line 737) | def test_rabbitmq_broker_list_users_success(self, mock_handle): method test_rabbitmq_broker_list_users_no_admin (line 748) | def test_rabbitmq_broker_list_users_no_admin(self): class TestRabbitMQBrokerIsInAlarm (line 756) | class TestRabbitMQBrokerIsInAlarm: method setup_method (line 759) | def setup_method(self): method test_rabbitmq_broker_is_in_alarm_success (line 773) | def test_rabbitmq_broker_is_in_alarm_success(self, mock_handle): method test_rabbitmq_broker_is_in_alarm_no_admin (line 784) | def test_rabbitmq_broker_is_in_alarm_no_admin(self): class TestRabbitMQBrokerIsQuorumCritical (line 792) | class TestRabbitMQBrokerIsQuorumCritical: method setup_method (line 795) | def setup_method(self): method test_rabbitmq_broker_is_quorum_critical_success (line 809) | def test_rabbitmq_broker_is_quorum_critical_success(self, mock_handle): method test_rabbitmq_broker_is_quorum_critical_no_admin (line 820) | def test_rabbitmq_broker_is_quorum_critical_no_admin(self): class TestRabbitMQBrokerDeleteQueue (line 828) | class TestRabbitMQBrokerDeleteQueue: method setup_method (line 831) | def setup_method(self): method test_rabbitmq_broker_delete_queue_success (line 846) | def test_rabbitmq_broker_delete_queue_success(self, mock_handle, mock_... method test_rabbitmq_broker_delete_queue_no_admin (line 857) | def test_rabbitmq_broker_delete_queue_no_admin(self): class TestRabbitMQBrokerPurgeQueue (line 865) | class TestRabbitMQBrokerPurgeQueue: method setup_method (line 868) | def setup_method(self): method test_rabbitmq_broker_purge_queue_success (line 883) | def test_rabbitmq_broker_purge_queue_success(self, mock_handle, mock_v... method test_rabbitmq_broker_purge_queue_no_admin (line 894) | def test_rabbitmq_broker_purge_queue_no_admin(self): class TestRabbitMQBrokerDeleteExchange (line 902) | class TestRabbitMQBrokerDeleteExchange: method setup_method (line 905) | def setup_method(self): method test_rabbitmq_broker_delete_exchange_success (line 920) | def test_rabbitmq_broker_delete_exchange_success(self, mock_handle, mo... method test_rabbitmq_broker_delete_exchange_no_admin (line 931) | def test_rabbitmq_broker_delete_exchange_no_admin(self): FILE: src/amazon-mq-mcp-server/tests/test_aws_service_mcp_generator.py class MockClientError (line 25) | class MockClientError(Exception): method __init__ (line 28) | def __init__(self, error_response, operation_name): class TestAWSToolGenerator (line 35) | class TestAWSToolGenerator(unittest.TestCase): method setUp (line 38) | def setUp(self): method test_initialization (line 49) | def test_initialization(self, mock_session): method test_generate (line 87) | def test_generate(self, mock_botocore_session, mock_boto3_session): method test_get_client (line 131) | def test_get_client(self, mock_session): method test_get_client_with_custom_aws_profile (line 171) | def test_get_client_with_custom_aws_profile(self, mock_session, mock_e... method test_get_client_with_default_aws_profile (line 194) | def test_get_client_with_default_aws_profile(self, mock_session, mock_... method test_create_operation_function (line 217) | def test_create_operation_function(self, mock_botocore_session, mock_b... method test_tool_configuration_validation (line 259) | def test_tool_configuration_validation(self, mock_session): method test_function_override (line 313) | def test_function_override(self, mock_botocore_session, mock_boto3_ses... method test_function_override_boto3_client_getter_uses_aws_profile (line 353) | def test_function_override_boto3_client_getter_uses_aws_profile( method test_function_override_boto3_client_getter_default_profile (line 406) | def test_function_override_boto3_client_getter_default_profile( method test_validator (line 458) | def test_validator(self, mock_botocore_session, mock_boto3_session): method test_client_error_handling (line 520) | def test_client_error_handling(self, mock_botocore_session, mock_boto3... method test_get_mcp (line 584) | def test_get_mcp(self, mock_session): method test_user_agent_config (line 595) | def test_user_agent_config(self, mock_session): method test_skip_param_documentation (line 617) | def test_skip_param_documentation(self, mock_botocore_session, mock_bo... method test_function_override_boto3_client_getter_service_name_parameter (line 677) | def test_function_override_boto3_client_getter_service_name_parameter( function test_hello_world (line 729) | def test_hello_world(): FILE: src/amazon-mq-mcp-server/tests/test_server.py class TestCreateBrokerOverride (line 34) | class TestCreateBrokerOverride: method test_create_broker_override_function (line 37) | def test_create_broker_override_function(self): method test_handle_create_broker (line 56) | def test_handle_create_broker(self, mock_boto3_client): method test_handle_create_broker_without_engine_version (line 122) | def test_handle_create_broker_without_engine_version(self, mock_boto3_... class TestCreateConfigurationOverride (line 182) | class TestCreateConfigurationOverride: method test_create_configuration_override_function (line 185) | def test_create_configuration_override_function(self): method test_handle_create_configuration (line 204) | def test_handle_create_configuration(self, mock_boto3_client): class TestAllowMutativeActionOnlyOnTaggedResource (line 250) | class TestAllowMutativeActionOnlyOnTaggedResource: method test_missing_broker_id (line 253) | def test_missing_broker_id(self): method test_empty_broker_id (line 266) | def test_empty_broker_id(self): method test_broker_with_mcp_tag (line 279) | def test_broker_with_mcp_tag(self): method test_broker_without_mcp_tag (line 296) | def test_broker_without_mcp_tag(self): method test_exception_handling (line 311) | def test_exception_handling(self): class TestMain (line 327) | class TestMain: method test_main_stdio (line 333) | def test_main_stdio(self, mock_parse_args, mock_mcp, mock_session): class TestAWSToolGenerator (line 342) | class TestAWSToolGenerator: method test_generator_configuration (line 345) | def test_generator_configuration(self): FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/exceptions.py class NeptuneException (line 18) | class NeptuneException(Exception): method __init__ (line 29) | def __init__(self, exception: Union[str, Dict]): method get_message (line 43) | def get_message(self) -> str: method get_details (line 51) | def get_details(self) -> Any: FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/graph_store/analytics.py class NeptuneAnalytics (line 31) | class NeptuneAnalytics(NeptuneGraph): method __init__ (line 47) | def __init__( method _refresh_schema (line 82) | def _refresh_schema(self) -> GraphSchema: method get_schema (line 126) | def get_schema(self) -> GraphSchema: method query_opencypher (line 140) | def query_opencypher(self, query: str, params: Optional[dict] = None): method query_gremlin (line 171) | def query_gremlin(self, query: str): FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/graph_store/base.py class NeptuneGraph (line 20) | class NeptuneGraph(ABC): method get_schema (line 29) | def get_schema(self) -> GraphSchema: method query_opencypher (line 38) | def query_opencypher(self, query: str, params: Optional[dict] = None) ... method query_gremlin (line 51) | def query_gremlin(self, query: str) -> dict: FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/graph_store/database.py class NeptuneDatabase (line 31) | class NeptuneDatabase(NeptuneGraph): method __init__ (line 51) | def __init__( method _get_summary (line 89) | def _get_summary(self) -> Dict: method _get_labels (line 123) | def _get_labels(self) -> Tuple[List[str], List[str]]: method _get_triples (line 136) | def _get_triples(self, e_labels: List[str]) -> List[RelationshipPattern]: method _get_node_properties (line 168) | def _get_node_properties(self, n_labels: List[str], types: Dict) -> List: method _get_edge_properties (line 206) | def _get_edge_properties(self, e_labels: List[str], types: Dict[str, A... method _refresh_schema (line 245) | def _refresh_schema(self) -> GraphSchema: method get_schema (line 272) | def get_schema(self) -> GraphSchema: method query_opencypher (line 286) | def query_opencypher(self, query: str, params: Optional[dict] = None): method query_gremlin (line 306) | def query_gremlin(self, query): FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/models.py class Property (line 28) | class Property(BaseModel): class Node (line 43) | class Node(BaseModel): class Relationship (line 58) | class Relationship(BaseModel): class RelationshipPattern (line 73) | class RelationshipPattern(BaseModel): class GraphSchema (line 90) | class GraphSchema(BaseModel): FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/neptune.py class NeptuneServer (line 34) | class NeptuneServer: method __init__ (line 47) | def __init__(self, endpoint: str, use_https: bool = True, port: int = ... method status (line 79) | def status(self) -> str: method schema (line 95) | def schema(self) -> GraphSchema: method query_opencypher (line 106) | def query_opencypher(self, query: str, parameters: Optional[dict] = No... method query_gremlin (line 121) | def query_gremlin(self, query: str) -> dict: FILE: src/amazon-neptune-mcp-server/awslabs/amazon_neptune_mcp_server/server.py function get_graph (line 41) | def get_graph(): function get_status_resource (line 74) | def get_status_resource() -> str: function get_schema_resource (line 80) | def get_schema_resource() -> GraphSchema: function get_status (line 88) | def get_status() -> str: function get_schema (line 94) | def get_schema() -> GraphSchema: function run_opencypher_query (line 102) | def run_opencypher_query(query: str, parameters: Optional[dict] = None) ... function run_gremlin_query (line 108) | def run_gremlin_query(query: str) -> dict: function main (line 113) | def main(): FILE: src/amazon-neptune-mcp-server/tests/conftest.py function tests_setup_and_teardown (line 10) | def tests_setup_and_teardown(): function mock_boto3 (line 24) | def mock_boto3(): FILE: src/amazon-neptune-mcp-server/tests/test_analytics.py class TestNeptuneAnalytics (line 28) | class TestNeptuneAnalytics: method test_init_success (line 32) | async def test_init_success(self, mock_session): method test_init_with_credentials_profile (line 64) | async def test_init_with_credentials_profile(self, mock_session): method test_init_session_error (line 94) | async def test_init_session_error(self, mock_session): method test_init_refresh_schema_error (line 110) | async def test_init_refresh_schema_error(self, mock_session): method test_refresh_schema (line 134) | async def test_refresh_schema(self, mock_session): method test_get_schema_cached (line 222) | async def test_get_schema_cached(self, mock_session): method test_get_schema_refresh (line 249) | async def test_get_schema_refresh(self, mock_session): method test_query_opencypher_success (line 284) | async def test_query_opencypher_success(self, mock_session): method test_query_opencypher_with_params (line 322) | async def test_query_opencypher_with_params(self, mock_session): method test_query_opencypher_error (line 362) | async def test_query_opencypher_error(self, mock_session): method test_query_gremlin_not_supported (line 391) | async def test_query_gremlin_not_supported(self, mock_session): FILE: src/amazon-neptune-mcp-server/tests/test_database.py class TestNeptuneDatabase (line 26) | class TestNeptuneDatabase: method test_init_success (line 30) | async def test_init_success(self, mock_session): method test_init_with_credentials_profile (line 60) | async def test_init_with_credentials_profile(self, mock_session): method test_init_with_http (line 93) | async def test_init_with_http(self, mock_session): method test_init_session_error (line 119) | async def test_init_session_error(self, mock_session): method test_init_refresh_schema_error (line 135) | async def test_init_refresh_schema_error(self, mock_session): method test_get_summary_success (line 160) | async def test_get_summary_success(self, mock_session): method test_get_summary_api_error (line 191) | async def test_get_summary_api_error(self, mock_session): method test_get_summary_invalid_response (line 220) | async def test_get_summary_invalid_response(self, mock_session): method test_get_labels (line 256) | async def test_get_labels(self, mock_session): method test_query_opencypher_without_params (line 287) | async def test_query_opencypher_without_params(self, mock_session): method test_query_opencypher_with_params (line 318) | async def test_query_opencypher_with_params(self, mock_session): method test_query_opencypher_results_format (line 352) | async def test_query_opencypher_results_format(self, mock_session): method test_query_gremlin (line 379) | async def test_query_gremlin(self, mock_session): method test_query_gremlin_results_format (line 409) | async def test_query_gremlin_results_format(self, mock_session): method test_get_schema_cached (line 436) | async def test_get_schema_cached(self, mock_session): method test_get_schema_refresh (line 464) | async def test_get_schema_refresh(self, mock_session): FILE: src/amazon-neptune-mcp-server/tests/test_exceptions.py class TestNeptuneException (line 19) | class TestNeptuneException: method test_init_with_string (line 22) | def test_init_with_string(self): method test_init_with_dict_complete (line 36) | def test_init_with_dict_complete(self): method test_init_with_dict_message_only (line 51) | def test_init_with_dict_message_only(self): method test_init_with_dict_details_only (line 66) | def test_init_with_dict_details_only(self): method test_init_with_empty_dict (line 81) | def test_init_with_empty_dict(self): method test_get_message (line 95) | def test_get_message(self): method test_get_details (line 109) | def test_get_details(self): method test_exception_inheritance (line 124) | def test_exception_inheritance(self): method test_exception_in_try_except (line 144) | def test_exception_in_try_except(self): method test_complex_details (line 161) | def test_complex_details(self): FILE: src/amazon-neptune-mcp-server/tests/test_init.py class TestInit (line 20) | class TestInit: method test_version (line 23) | def test_version(self): method test_module_reload (line 40) | def test_module_reload(self): FILE: src/amazon-neptune-mcp-server/tests/test_main.py class TestMain (line 20) | class TestMain: method test_main_default (line 25) | def test_main_default(self, mock_run): method test_module_execution (line 40) | def test_module_execution(self): FILE: src/amazon-neptune-mcp-server/tests/test_models.py class TestModels (line 25) | class TestModels: method test_property_model (line 28) | def test_property_model(self): method test_node_model (line 47) | def test_node_model(self): method test_node_model_without_properties (line 73) | def test_node_model_without_properties(self): method test_relationship_model (line 93) | def test_relationship_model(self): method test_relationship_model_without_properties (line 117) | def test_relationship_model_without_properties(self): method test_relationship_pattern_model (line 137) | def test_relationship_pattern_model(self): method test_graph_schema_model (line 159) | def test_graph_schema_model(self): FILE: src/amazon-neptune-mcp-server/tests/test_neptune.py class TestNeptuneServer (line 23) | class TestNeptuneServer: method test_init_neptune_db (line 27) | async def test_init_neptune_db(self, mock_neptune_db): method test_init_neptune_analytics (line 47) | async def test_init_neptune_analytics(self, mock_neptune_analytics): method test_init_invalid_endpoint_format (line 66) | async def test_init_invalid_endpoint_format(self): method test_init_empty_endpoint (line 79) | async def test_init_empty_endpoint(self): method test_status_available (line 92) | async def test_status_available(self, mock_neptune_db): method test_status_unavailable (line 113) | async def test_status_unavailable(self, mock_neptune_db): method test_schema (line 135) | async def test_schema(self, mock_neptune_db): method test_query_opencypher (line 157) | async def test_query_opencypher(self, mock_neptune_db): method test_query_opencypher_with_parameters (line 181) | async def test_query_opencypher_with_parameters(self, mock_neptune_db): method test_query_gremlin (line 206) | async def test_query_gremlin(self, mock_neptune_db): FILE: src/amazon-neptune-mcp-server/tests/test_server.py class TestServerTools (line 31) | class TestServerTools: method test_get_status (line 35) | async def test_get_status(self, mock_get_graph): method test_get_schema (line 55) | async def test_get_schema(self, mock_get_graph): method test_run_opencypher_query (line 76) | async def test_run_opencypher_query(self, mock_get_graph): method test_run_opencypher_query_with_parameters (line 97) | async def test_run_opencypher_query_with_parameters(self, mock_get_gra... method test_run_gremlin_query (line 121) | async def test_run_gremlin_query(self, mock_get_graph): method test_get_status_resource (line 142) | async def test_get_status_resource(self, mock_get_graph): method test_get_schema_resource (line 162) | async def test_get_schema_resource(self, mock_get_graph): class TestGraphInitialization (line 184) | class TestGraphInitialization: method test_get_graph_initialization (line 189) | async def test_get_graph_initialization(self, mock_neptune_server, moc... method test_get_graph_missing_endpoint (line 218) | async def test_get_graph_missing_endpoint(self, mock_environ_get): method test_get_graph_with_https_false (line 241) | async def test_get_graph_with_https_false(self, mock_neptune_server, m... class TestMainFunction (line 270) | class TestMainFunction: method test_main_default (line 274) | async def test_main_default(self, mock_mcp): FILE: src/amazon-qbusiness-anonymous-mcp-server/awslabs/amazon_qbusiness_anonymous_mcp_server/clients.py function get_qbiz_client (line 25) | def get_qbiz_client() -> QBusinessClient: function make_query (line 59) | def make_query(client: QBusinessClient, query: str) -> ChatSyncOutputTyp... FILE: src/amazon-qbusiness-anonymous-mcp-server/awslabs/amazon_qbusiness_anonymous_mcp_server/server.py function qbiz_local_query (line 47) | async def qbiz_local_query( function main (line 92) | def main(): FILE: src/amazon-qbusiness-anonymous-mcp-server/tests/conftest.py function tests_setup_and_teardown (line 9) | def tests_setup_and_teardown(): FILE: src/amazon-qbusiness-anonymous-mcp-server/tests/test_init.py class TestInit (line 21) | class TestInit: method test_version (line 24) | def test_version(self): method test_module_reload (line 43) | def test_module_reload(self): FILE: src/amazon-qbusiness-anonymous-mcp-server/tests/test_main.py class TestMain (line 21) | class TestMain: method test_main_default (line 26) | def test_main_default(self, mock_run): method test_module_execution (line 35) | def test_module_execution(self): FILE: src/amazon-qbusiness-anonymous-mcp-server/tests/test_server.py function test_qbiz_local_query (line 22) | async def test_qbiz_local_query(mocker): function test_qbiz_local_query1 (line 51) | async def test_qbiz_local_query1(mocker): function test_qbiz_local_query_failure2 (line 80) | async def test_qbiz_local_query_failure2(mocker): function test_qbiz_local_query_failure3 (line 109) | async def test_qbiz_local_query_failure3(mocker): function test_qbiz_local_query_failure4 (line 133) | async def test_qbiz_local_query_failure4(mocker): function test_qbiz_local_query_failure5 (line 154) | async def test_qbiz_local_query_failure5(mocker): function test_qbiz_local_query_failure6 (line 180) | async def test_qbiz_local_query_failure6(mocker): FILE: src/amazon-qindex-mcp-server/awslabs/amazon_qindex_mcp_server/clients.py class QBusinessClientError (line 30) | class QBusinessClientError(Exception): class QBusinessClient (line 36) | class QBusinessClient: method __init__ (line 39) | def __init__( method _get_client (line 60) | def _get_client(self) -> Boto3QBusinessClient: method _validate_attribute_filter (line 79) | def _validate_attribute_filter(self, attribute_filter: Dict) -> None: method _validate_content_source (line 123) | def _validate_content_source(self, content_source: Dict) -> None: method _validate_max_results (line 144) | def _validate_max_results(self, max_results: int) -> None: method _validate_string_safety (line 159) | def _validate_string_safety(self, value: str, param_name: str) -> None: method _validate_required_params (line 200) | def _validate_required_params(self, application_id: str, query_text: s... method _handle_client_error (line 222) | def _handle_client_error(self, error: ClientError, operation: str) -> ... method search_relevant_content (line 249) | def search_relevant_content( FILE: src/amazon-qindex-mcp-server/awslabs/amazon_qindex_mcp_server/server.py class SearchRelevantContentResponse (line 32) | class SearchRelevantContentResponse(BaseModel): class DocumentAttributeValue (line 44) | class DocumentAttributeValue(BaseModel): class DocumentAttribute (line 57) | class DocumentAttribute(BaseModel): class AttributeFilter (line 64) | class AttributeFilter(BaseModel): class RetrieverContentSource (line 95) | class RetrieverContentSource(BaseModel): class ContentSource (line 101) | class ContentSource(BaseModel): function authorize_qindex (line 129) | async def authorize_qindex( function create_token_with_iam (line 175) | async def create_token_with_iam( function assume_role_with_identity_context (line 248) | async def assume_role_with_identity_context( function search_relevant_content (line 313) | async def search_relevant_content( function main (line 452) | def main(): FILE: src/amazon-qindex-mcp-server/tests/test_clients.py class TestQBusinessClient (line 25) | class TestQBusinessClient: method client (line 29) | def client(self): method mock_boto3_session (line 39) | def mock_boto3_session(self): method test_init_with_credentials (line 56) | def test_init_with_credentials(self, mock_boto3_session): method test_init_without_credentials (line 73) | def test_init_without_credentials(self, mock_boto3_session): method test_validate_attribute_filter_invalid_types (line 85) | def test_validate_attribute_filter_invalid_types(self, client): method test_validate_content_source_invalid_types (line 103) | def test_validate_content_source_invalid_types(self, client): method test_validate_max_results_invalid (line 125) | def test_validate_max_results_invalid(self, client): method test_validate_string_safety (line 137) | def test_validate_string_safety(self, client): method test_validate_attribute_filter_security (line 170) | def test_validate_attribute_filter_security(self, client): method test_validate_required_params_security (line 199) | def test_validate_required_params_security(self, client): method test_validate_required_params_invalid (line 217) | def test_validate_required_params_invalid(self, client): method test_search_relevant_content_success (line 233) | def test_search_relevant_content_success(self, client, mock_boto3_sess... method test_search_relevant_content_invalid_response (line 277) | def test_search_relevant_content_invalid_response(self, client, mock_b... method test_search_relevant_content_security (line 304) | def test_search_relevant_content_security(self, client, mock_boto3_ses... method test_search_relevant_content_client_error (line 320) | def test_search_relevant_content_client_error(self, client, mock_boto3... method test_search_relevant_content_unexpected_error (line 357) | def test_search_relevant_content_unexpected_error(self, client, mock_b... method test_handle_client_error_mapping (line 379) | def test_handle_client_error_mapping(self, client): FILE: src/amazon-qindex-mcp-server/tests/test_init.py class TestInit (line 17) | class TestInit: method test_version (line 20) | def test_version(self): method test_module_reload (line 37) | def test_module_reload(self): FILE: src/amazon-qindex-mcp-server/tests/test_main.py class TestMain (line 17) | class TestMain: method test_main_default (line 22) | def test_main_default(self, mock_run): method test_module_execution (line 31) | def test_module_execution(self): FILE: src/amazon-qindex-mcp-server/tests/test_server.py class TestMCPServer (line 29) | class TestMCPServer: method setUp (line 32) | def setUp(self): method test_server_initialization (line 36) | def test_server_initialization(self): method test_tool_registration (line 44) | async def test_tool_registration(self): class TestAuthorizeQIndex (line 56) | class TestAuthorizeQIndex: method test_authorize_qindex_success (line 67) | async def test_authorize_qindex_success(self): class TestCreateTokenWithIAM (line 88) | class TestCreateTokenWithIAM: method test_create_token_with_iam_success (line 108) | async def test_create_token_with_iam_success(self, mocker): method test_create_token_with_iam_error (line 159) | async def test_create_token_with_iam_error(self, mocker): method test_create_token_with_iam_parameter_validation (line 172) | async def test_create_token_with_iam_parameter_validation(self, mocker): class TestSearchRelevantContent (line 195) | class TestSearchRelevantContent: method test_search_relevant_content_success (line 199) | async def test_search_relevant_content_success(self, mocker): class TestServerErrorHandling (line 245) | class TestServerErrorHandling: method test_invalid_parameters (line 249) | async def test_invalid_parameters(self): method test_missing_credentials (line 259) | async def test_missing_credentials(self, mocker): class TestClientConfiguration (line 283) | class TestClientConfiguration: method test_context_initialization (line 286) | def test_context_initialization(self): method test_context_handling (line 292) | async def test_context_handling(self, mocker): method test_context_error_handling (line 299) | def test_context_error_handling(self): class TestAssumeRoleWithIdentityContext (line 305) | class TestAssumeRoleWithIdentityContext: method test_assume_role_with_identity_context_success (line 316) | async def test_assume_role_with_identity_context_success(self, mocker): method test_assume_role_with_identity_context_error (line 351) | async def test_assume_role_with_identity_context_error(self, mocker): class TestMainFunction (line 362) | class TestMainFunction: method test_main (line 365) | def test_main(self, mocker): FILE: src/amazon-sns-sqs-mcp-server/awslabs/amazon_sns_sqs_mcp_server/common.py function validate_mcp_server_version_tag (line 24) | def validate_mcp_server_version_tag(tags: Dict[str, str]) -> Tuple[bool,... FILE: src/amazon-sns-sqs-mcp-server/awslabs/amazon_sns_sqs_mcp_server/generator.py class AWSToolGenerator (line 35) | class AWSToolGenerator: method __init__ (line 38) | def __init__( method generate (line 69) | def generate(self): method get_mcp (line 73) | def get_mcp(self): method __register_operations (line 77) | def __register_operations(self): method __get_client (line 102) | def __get_client(self, region: str = 'us-east-1') -> Any: method __get_operations (line 112) | def __get_operations(self) -> List[str]: method __handle_function_override (line 122) | def __handle_function_override( method __create_operation_function (line 136) | def __create_operation_function( method __get_operation_input_parameters (line 237) | def __get_operation_input_parameters( method __snake_to_camel (line 259) | def __snake_to_camel(self, snake_str: str) -> str: method __validate_tool_configuration (line 263) | def __validate_tool_configuration(self): FILE: src/amazon-sns-sqs-mcp-server/awslabs/amazon_sns_sqs_mcp_server/server.py function main (line 31) | def main(): FILE: src/amazon-sns-sqs-mcp-server/awslabs/amazon_sns_sqs_mcp_server/sns.py function create_topic_override (line 28) | def create_topic_override(mcp: FastMCP, sns_client_getter: BOTO3_CLIENT_... function is_mutative_action_allowed (line 60) | def is_mutative_action_allowed( function is_unsubscribe_allowed (line 79) | def is_unsubscribe_allowed( function register_sns_tools (line 99) | def register_sns_tools(mcp: FastMCP, disallow_resource_creation: bool = ... FILE: src/amazon-sns-sqs-mcp-server/awslabs/amazon_sns_sqs_mcp_server/sqs.py function create_queue_override (line 28) | def create_queue_override(mcp: FastMCP, sqs_client_getter: BOTO3_CLIENT_... function is_mutative_action_allowed (line 61) | def is_mutative_action_allowed( function register_sqs_tools (line 76) | def register_sqs_tools(mcp: FastMCP, disallow_resource_creation: bool = ... FILE: src/amazon-sns-sqs-mcp-server/print_tools.py function print_tool_info (line 22) | async def print_tool_info(mcp): function main (line 47) | async def main(): FILE: src/amazon-sns-sqs-mcp-server/tests/test_common.py class TestCommonUtils (line 9) | class TestCommonUtils: method test_validate_mcp_server_version_tag_with_tag (line 12) | def test_validate_mcp_server_version_tag_with_tag(self): method test_validate_mcp_server_version_tag_without_tag (line 20) | def test_validate_mcp_server_version_tag_without_tag(self): method test_validate_mcp_server_version_tag_empty_tags (line 28) | def test_validate_mcp_server_version_tag_empty_tags(self): FILE: src/amazon-sns-sqs-mcp-server/tests/test_generator.py class MockClientError (line 8) | class MockClientError(Exception): method __init__ (line 11) | def __init__(self, error_response, operation_name): class TestAWSToolGenerator (line 24) | class TestAWSToolGenerator(unittest.TestCase): method setUp (line 27) | def setUp(self): method test_initialization (line 38) | def test_initialization(self, mock_session): method test_generate (line 81) | def test_generate(self, mock_botocore_session, mock_boto3_session): method test_get_client (line 128) | def test_get_client(self, mock_session): method test_create_operation_function (line 171) | def test_create_operation_function(self, mock_botocore_session, mock_b... method test_tool_configuration_validation (line 215) | def test_tool_configuration_validation(self, mock_session): method test_function_override (line 273) | def test_function_override(self, mock_botocore_session, mock_boto3_ses... method test_validator (line 313) | def test_validator(self, mock_botocore_session, mock_boto3_session): method test_client_error_handling (line 374) | def test_client_error_handling(self, mock_botocore_session, mock_boto3... method test_get_mcp (line 438) | def test_get_mcp(self, mock_session): method test_skip_param_documentation (line 453) | def test_skip_param_documentation(self, mock_botocore_session, mock_bo... method test_boto3_client_getter (line 515) | def test_boto3_client_getter(self, mock_session): method test_annotated_field_for_optional_params (line 542) | def test_annotated_field_for_optional_params(self, mock_botocore_sessi... function test_hello_world (line 620) | def test_hello_world(): FILE: src/amazon-sns-sqs-mcp-server/tests/test_server.py class TestSNSTools (line 19) | class TestSNSTools: method test_create_topic_override (line 22) | def test_create_topic_override(self): method test_allow_mutative_action_only_on_tagged_sns_resource (line 38) | def test_allow_mutative_action_only_on_tagged_sns_resource(self): class TestServerModule (line 73) | class TestServerModule: method test_mcp_initialization (line 76) | def test_mcp_initialization(self): method test_main_without_sse (line 91) | def test_main_without_sse(self, mock_parse_args, mock_mcp, mock_session): method test_main_with_allow_resource_creation (line 113) | def test_main_with_allow_resource_creation( method test_main_without_allow_resource_creation (line 140) | def test_main_without_allow_resource_creation( class TestSQSTools (line 163) | class TestSQSTools: method test_create_queue_override (line 166) | def test_create_queue_override(self): method test_allow_mutative_action_only_on_tagged_sqs_resource (line 182) | def test_allow_mutative_action_only_on_tagged_sqs_resource(self): FILE: src/amazon-sns-sqs-mcp-server/tests/test_sns.py class TestSNSTools (line 14) | class TestSNSTools: method test_create_topic_override (line 17) | def test_create_topic_override(self): method test_allow_mutative_action_only_on_tagged_sns_resource (line 33) | def test_allow_mutative_action_only_on_tagged_sns_resource(self): method test_create_topic_override_implementation (line 67) | def test_create_topic_override_implementation(self): method test_is_mutative_action_allowed_exception (line 128) | def test_is_mutative_action_allowed_exception(self): method test_is_unsubscribe_allowed_exception (line 146) | def test_is_unsubscribe_allowed_exception(self): method test_register_sns_tools (line 166) | def test_register_sns_tools(self, mock_aws_tool_generator, mock_boto3_... method test_register_sns_tools_with_disallow_resource_creation (line 190) | def test_register_sns_tools_with_disallow_resource_creation( method test_validator_with_different_operations (line 223) | def test_validator_with_different_operations(self): method test_unsubscribe_validator (line 264) | def test_unsubscribe_validator(self): FILE: src/amazon-sns-sqs-mcp-server/tests/test_sqs.py class TestSQSTools (line 13) | class TestSQSTools: method test_create_queue_override (line 16) | def test_create_queue_override(self): method test_allow_mutative_action_only_on_tagged_sqs_resource (line 32) | def test_allow_mutative_action_only_on_tagged_sqs_resource(self): method test_register_sqs_tools (line 66) | def test_register_sqs_tools(self, mock_aws_tool_generator, mock_boto3_... method test_register_sqs_tools_with_disallow_resource_creation (line 86) | def test_register_sqs_tools_with_disallow_resource_creation( method test_validator_with_different_operations (line 119) | def test_validator_with_different_operations(self): method test_create_queue_override_implementation (line 172) | def test_create_queue_override_implementation(self): method test_create_queue_override_with_fifo_and_custom_attributes (line 240) | def test_create_queue_override_with_fifo_and_custom_attributes(self): method test_is_mutative_action_allowed_exception (line 293) | def test_is_mutative_action_allowed_exception(self): FILE: src/aurora-dsql-mcp-server/awslabs/aurora_dsql_mcp_server/mutable_sql_detector.py function detect_mutating_keywords (line 133) | def detect_mutating_keywords(sql: str) -> list[str]: function check_sql_injection_risk (line 158) | def check_sql_injection_risk(sql: str) -> list[dict]: function detect_transaction_bypass_attempt (line 181) | def detect_transaction_bypass_attempt(sql: str) -> bool: FILE: src/aurora-dsql-mcp-server/awslabs/aurora_dsql_mcp_server/server.py function readonly_query (line 140) | async def readonly_query( function transact (line 266) | async def transact( function get_schema (line 355) | async def get_schema( function dsql_search_documentation (line 391) | async def dsql_search_documentation( function dsql_read_documentation (line 416) | async def dsql_read_documentation( function dsql_recommend (line 447) | async def dsql_recommend( function _proxy_to_knowledge_server (line 466) | async def _proxy_to_knowledge_server( class NoOpCtx (line 522) | class NoOpCtx: method error (line 525) | async def error(self, message): function get_password_token (line 533) | async def get_password_token(): # noqa: D103 function get_connection (line 542) | async def get_connection(ctx): # noqa: D103 function execute_query (line 583) | async def execute_query(ctx, conn_to_use, query: str, params=None) -> Li... function main (line 632) | def main(): FILE: src/aurora-dsql-mcp-server/tests/test_connection_reuse.py function reset_persistent_connection (line 11) | async def reset_persistent_connection(): function create_mock_connection (line 18) | def create_mock_connection(): function test_connection_reuse (line 32) | async def test_connection_reuse(mocker, reset_persistent_connection): function test_connection_reuse_with_broken_connection (line 57) | async def test_connection_reuse_with_broken_connection(mocker, reset_per... FILE: src/aurora-dsql-mcp-server/tests/test_error_paths.py function test_readonly_query_transaction_bypass_attempt (line 10) | async def test_readonly_query_transaction_bypass_attempt(): function test_readonly_query_write_error (line 36) | async def test_readonly_query_write_error(): function test_transact_not_allowed (line 59) | async def test_transact_not_allowed(): function test_proxy_tool_timeout (line 75) | async def test_proxy_tool_timeout(): FILE: src/aurora-dsql-mcp-server/tests/test_graceful_startup.py class MockContext (line 21) | class MockContext: method __init__ (line 24) | def __init__(self): method error (line 27) | async def error(self, message): function test_readonly_query_without_cluster_config (line 32) | async def test_readonly_query_without_cluster_config(): function test_transact_without_cluster_config (line 50) | async def test_transact_without_cluster_config(): function test_get_schema_without_cluster_config (line 68) | async def test_get_schema_without_cluster_config(): FILE: src/aurora-dsql-mcp-server/tests/test_init.py class TestInit (line 20) | class TestInit: method test_version (line 23) | def test_version(self): method test_module_reload (line 40) | def test_module_reload(self): FILE: src/aurora-dsql-mcp-server/tests/test_main.py class TestMain (line 22) | class TestMain: method test_main_with_required_arguments (line 37) | def test_main_with_required_arguments(self, mocker): method test_main_with_optional_arguments (line 63) | def test_main_with_optional_arguments(self, mocker): method test_module_execution (line 72) | def test_module_execution(self): method test_main_rejects_non_https_knowledge_server (line 111) | def test_main_rejects_non_https_knowledge_server(self): method test_main_rejects_malformed_knowledge_server_url (line 134) | def test_main_rejects_malformed_knowledge_server_url(self): method test_main_handles_url_parsing_exception (line 158) | def test_main_handles_url_parsing_exception(self, mock_urlparse): method test_main_rejects_zero_timeout (line 183) | def test_main_rejects_zero_timeout(self): method test_main_rejects_negative_timeout (line 206) | def test_main_rejects_negative_timeout(self): method test_main_with_custom_knowledge_parameters (line 231) | def test_main_with_custom_knowledge_parameters(self, mocker): method test_main_uses_default_knowledge_parameters (line 257) | def test_main_uses_default_knowledge_parameters(self, mocker): method test_main_starts_without_cluster_config (line 272) | def test_main_starts_without_cluster_config(self, mocker): method test_main_starts_with_partial_config (line 296) | def test_main_starts_with_partial_config(self, mocker): method test_main_starts_with_invalid_cluster (line 323) | def test_main_starts_with_invalid_cluster(self, mocker): FILE: src/aurora-dsql-mcp-server/tests/test_profile_option.py class TestProfileOption (line 21) | class TestProfileOption: method test_main_with_profile_argument (line 38) | def test_main_with_profile_argument(self, mocker): method test_main_without_profile_argument (line 74) | def test_main_without_profile_argument(self, mocker): FILE: src/aurora-dsql-mcp-server/tests/test_proxy_tools.py function mock_ctx (line 14) | def mock_ctx(): function test_proxy_to_knowledge_server_success (line 22) | async def test_proxy_to_knowledge_server_success(mock_ctx): function test_proxy_to_knowledge_server_uses_timeout (line 39) | async def test_proxy_to_knowledge_server_uses_timeout(mock_ctx): function test_proxy_to_knowledge_server_error (line 67) | async def test_proxy_to_knowledge_server_error(mock_ctx): function test_proxy_to_knowledge_server_unavailable (line 83) | async def test_proxy_to_knowledge_server_unavailable(mock_ctx): function test_dsql_search_documentation (line 97) | async def test_dsql_search_documentation(mock_ctx): function test_dsql_search_documentation_with_limit (line 113) | async def test_dsql_search_documentation_with_limit(mock_ctx): function test_dsql_read_documentation (line 129) | async def test_dsql_read_documentation(mock_ctx): function test_dsql_read_documentation_with_start_index (line 145) | async def test_dsql_read_documentation_with_start_index(mock_ctx): function test_dsql_read_documentation_with_max_length (line 161) | async def test_dsql_read_documentation_with_max_length(mock_ctx): function test_dsql_read_documentation_with_all_parameters (line 177) | async def test_dsql_read_documentation_with_all_parameters(mock_ctx): function test_dsql_recommend (line 193) | async def test_dsql_recommend(mock_ctx): function test_proxy_uses_configured_server_endpoint (line 209) | async def test_proxy_uses_configured_server_endpoint(mock_ctx): function test_proxy_to_knowledge_server_content_text_response (line 239) | async def test_proxy_to_knowledge_server_content_text_response(mock_ctx): function test_proxy_to_knowledge_server_content_non_text_response (line 259) | async def test_proxy_to_knowledge_server_content_non_text_response(mock_... function test_proxy_to_knowledge_server_empty_content_response (line 279) | async def test_proxy_to_knowledge_server_empty_content_response(mock_ctx): FILE: src/aurora-dsql-mcp-server/tests/test_readonly_enforcement.py class TestReadonlyEnforcement (line 42) | class TestReadonlyEnforcement: method test_detect_transaction_bypass_complex_query (line 45) | def test_detect_transaction_bypass_complex_query(self): method test_detect_mutating_keywords_create_table (line 57) | def test_detect_mutating_keywords_create_table(self): method test_detect_mutating_keywords_insert (line 64) | def test_detect_mutating_keywords_insert(self): method test_detect_mutating_keywords_update (line 70) | def test_detect_mutating_keywords_update(self): method test_detect_mutating_keywords_delete (line 76) | def test_detect_mutating_keywords_delete(self): method test_detect_mutating_keywords_drop (line 82) | def test_detect_mutating_keywords_drop(self): method test_safe_select_queries (line 89) | def test_safe_select_queries(self): method test_sql_injection_patterns (line 109) | def test_sql_injection_patterns(self): method test_transaction_bypass_variations (line 123) | def test_transaction_bypass_variations(self): method test_permission_statements (line 135) | def test_permission_statements(self): method test_system_statements (line 148) | def test_system_statements(self): method test_case_insensitive_detection (line 161) | def test_case_insensitive_detection(self): method test_postgresql_specific_patterns (line 175) | def test_postgresql_specific_patterns(self): method test_comment_handling (line 189) | def test_comment_handling(self): method test_empty_and_whitespace_sql_handling (line 199) | def test_empty_and_whitespace_sql_handling(self): method test_mutating_keywords_combinations (line 253) | def test_mutating_keywords_combinations(self): method test_transaction_bypass_edge_cases (line 277) | def test_transaction_bypass_edge_cases(self): method test_readonly_query_blocks_mutating_keywords (line 301) | async def test_readonly_query_blocks_mutating_keywords(self): method test_readonly_query_blocks_injection_risks (line 321) | async def test_readonly_query_blocks_injection_risks(self): method test_readonly_query_blocks_transaction_bypass_server_level (line 349) | async def test_readonly_query_blocks_transaction_bypass_server_level(s... method test_readonly_query_allows_safe_queries (line 379) | async def test_readonly_query_allows_safe_queries(self): method test_readonly_query_security_checks_order (line 400) | async def test_readonly_query_security_checks_order(self): method test_readonly_query_complex_bypass_attempt (line 410) | async def test_readonly_query_complex_bypass_attempt(self): method test_readonly_query_case_insensitive_detection (line 419) | async def test_readonly_query_case_insensitive_detection(self): method test_readonly_query_with_comments (line 433) | async def test_readonly_query_with_comments(self): method test_readonly_query_postgresql_specific_patterns (line 451) | async def test_readonly_query_postgresql_specific_patterns(self): method test_readonly_query_permission_statements (line 468) | async def test_readonly_query_permission_statements(self): method test_readonly_query_system_statements (line 482) | async def test_readonly_query_system_statements(self): method test_transact_allows_read_queries_in_read_only_mode (line 502) | async def test_transact_allows_read_queries_in_read_only_mode(self): method test_transact_rejects_write_queries_in_read_only_mode (line 523) | async def test_transact_rejects_write_queries_in_read_only_mode(self): method test_transact_rejects_mixed_queries_in_read_only_mode (line 541) | async def test_transact_rejects_mixed_queries_in_read_only_mode(self): method test_transact_rejects_injection_in_read_only_mode (line 555) | async def test_transact_rejects_injection_in_read_only_mode(self): method test_transact_rejects_transaction_bypass_in_read_only_mode (line 569) | async def test_transact_rejects_transaction_bypass_in_read_only_mode(s... method test_transact_rejects_stacked_queries_in_read_only_mode (line 586) | async def test_transact_rejects_stacked_queries_in_read_only_mode(self): method test_transact_validates_all_statements_before_execution (line 599) | async def test_transact_validates_all_statements_before_execution(self): method test_transact_handles_readonly_sql_transaction_error (line 613) | async def test_transact_handles_readonly_sql_transaction_error(self): method test_transact_case_insensitive_validation (line 634) | async def test_transact_case_insensitive_validation(self): method test_transact_permission_statements_in_read_only_mode (line 648) | async def test_transact_permission_statements_in_read_only_mode(self): method test_transact_system_statements_in_read_only_mode (line 662) | async def test_transact_system_statements_in_read_only_mode(self): FILE: src/aurora-dsql-mcp-server/tests/test_server.py function create_mock_connection (line 49) | def create_mock_connection(): function reset_persistent_connection (line 62) | async def reset_persistent_connection(): function test_readonly_query_throws_exception_on_empty_input (line 70) | async def test_readonly_query_throws_exception_on_empty_input(): function test_transact_throws_exception_on_empty_input (line 77) | async def test_transact_throws_exception_on_empty_input(): function test_transact_uses_read_only_transaction (line 84) | async def test_transact_uses_read_only_transaction(mocker): function test_transact_error_on_failed_begin_read_only (line 106) | async def test_transact_error_on_failed_begin_read_only(mocker): function test_get_schema_throws_exception_on_empty_input (line 128) | async def test_get_schema_throws_exception_on_empty_input(): function test_get_password_token_for_admin_user (line 137) | async def test_get_password_token_for_admin_user(mocker): function test_get_password_token_for_non_admin_user (line 151) | async def test_get_password_token_for_non_admin_user(mocker): function test_get_connection (line 164) | async def test_get_connection(mocker, reset_persistent_connection): function test_get_connection_failure (line 191) | async def test_get_connection_failure(mocker, reset_persistent_connection): function test_get_schema (line 202) | async def test_get_schema(mocker): function test_get_schema_failure (line 223) | async def test_get_schema_failure(mocker): function test_readonly_query_commit_on_success (line 243) | async def test_readonly_query_commit_on_success(mocker): function test_readonly_query_rollback_on_failure (line 267) | async def test_readonly_query_rollback_on_failure(mocker): function test_readonly_query_internal_error_on_failed_begin (line 290) | async def test_readonly_query_internal_error_on_failed_begin(mocker): function test_readonly_query_error_on_write_sql (line 308) | async def test_readonly_query_error_on_write_sql(mocker): function test_transact_commit_on_success (line 331) | async def test_transact_commit_on_success(mocker): function test_transact_rollback_on_failure (line 360) | async def test_transact_rollback_on_failure(mocker): function test_transact_error_on_failed_begin (line 386) | async def test_transact_error_on_failed_begin(mocker): function test_readonly_query_rollback_error_logging (line 404) | async def test_readonly_query_rollback_error_logging(mocker): function test_transact_rollback_error_logging (line 423) | async def test_transact_rollback_error_logging(mocker): function test_execute_query_connection_retry (line 441) | async def test_execute_query_connection_retry(mocker): function test_execute_query_returns_empty_on_no_rows (line 479) | async def test_execute_query_returns_empty_on_no_rows(mocker): function test_execute_query_with_interface_error_retry (line 506) | async def test_execute_query_with_interface_error_retry(mocker): function test_execute_query_retry_returns_empty (line 543) | async def test_execute_query_retry_returns_empty(mocker): FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/agent_scripts/manager.py class AgentScriptsManager (line 23) | class AgentScriptsManager: method __init__ (line 26) | def __init__( method get_script (line 71) | def get_script(self, script_name: str) -> Script | None: method pretty_print_scripts (line 75) | def pretty_print_scripts(self) -> str: FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/agent_scripts/models.py class Script (line 20) | class Script(BaseModel): FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/aws/driver.py function get_local_credentials (line 31) | def get_local_credentials(profile: str | None = None) -> Credentials: function translate_cli_to_ir (line 49) | def translate_cli_to_ir( function interpret_command (line 82) | def interpret_command( FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/aws/pagination.py function _merge_page_into_result (line 25) | def _merge_page_into_result( function _finalize_result (line 59) | def _finalize_result( function build_result (line 81) | def build_result( FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/aws/regions.py function get_active_regions (line 36) | def get_active_regions(profile_name: str | None = None) -> list[str]: FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/aws/service.py function request_consent (line 52) | async def request_consent(cli_command: str, ctx: Context): function is_operation_read_only (line 76) | def is_operation_read_only(ir: IRTranslation, read_only_operations: Read... function check_security_policy (line 92) | def check_security_policy( function validate (line 122) | def validate(ir: IRTranslation) -> ProgramValidationResponse: function get_help_document (line 130) | async def get_help_document( function execute_awscli_customization (line 148) | def execute_awscli_customization( function interpret_command (line 188) | def interpret_command( function _ir_metadata (line 238) | def _ir_metadata(program: InterpretedProgram | None) -> InterpretationMe... function _to_missing_context_failures (line 250) | def _to_missing_context_failures( function _to_validation_failures (line 262) | def _to_validation_failures(failures: list[Failure] | None) -> list[Fail... function _to_context (line 272) | def _to_context(context: dict[str, Any] | None) -> ContextAPIModel | None: function expand_regions_if_needed (line 286) | def expand_regions_if_needed(cli_command: str) -> list[str]: FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/aws/services.py class ConfigResult (line 47) | class ConfigResult(NamedTuple): function _validate_streaming_blob_path (line 57) | def _validate_streaming_blob_path(cli_argument: CLIArgument, value: Any,... function get_awscli_driver (line 62) | def get_awscli_driver(credentials: Credentials | None = None) -> awscli.... class OperationFilters (line 80) | class OperationFilters: method __init__ (line 83) | def __init__(self, filter_keys: Set[str], filter_set: Set[str], allows... method filter_keys (line 90) | def filter_keys(self) -> frozenset[str]: method allows_filter (line 94) | def allows_filter(self, filter_name: str) -> bool: function get_operation_filters (line 154) | def get_operation_filters(operation: OperationModel) -> OperationFilters: function extract_pagination_config (line 195) | def extract_pagination_config( FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/command.py class OutputFile (line 24) | class OutputFile: method from_operation (line 31) | def from_operation(cls, path: str, operation_model: OperationModel) ->... class IRCommand (line 39) | class IRCommand: method operation_python_name (line 53) | def operation_python_name(self): method operation_cli_name (line 58) | def operation_cli_name(self): method operation_name (line 63) | def operation_name(self): method service_name (line 68) | def service_name(self): method service_full_name (line 74) | def service_full_name(self): method has_streaming_output (line 79) | def has_streaming_output(self): FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/command_metadata.py class CommandMetadata (line 19) | class CommandMetadata: FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/config.py class FileAccessMode (line 35) | class FileAccessMode(str, Enum): function get_region (line 43) | def get_region(profile_name: str | None = None) -> str: function get_server_directory (line 56) | def get_server_directory(): function get_env_bool (line 68) | def get_env_bool(env_key: str, default: bool) -> bool: function get_file_access_mode (line 73) | def get_file_access_mode() -> FileAccessMode: function get_transport_from_env (line 89) | def get_transport_from_env() -> Literal['stdio', 'streamable-http']: function get_user_agent_extra (line 98) | def get_user_agent_extra() -> str: function get_working_directory (line 119) | def get_working_directory() -> Path: function get_server_auth (line 141) | def get_server_auth(): FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/errors.py class Failure (line 29) | class Failure: class AwsApiMcpError (line 36) | class AwsApiMcpError(Exception): method as_failure (line 39) | def as_failure(self) -> Failure: class CliParsingError (line 44) | class CliParsingError(AwsApiMcpError): class CommandValidationError (line 48) | class CommandValidationError(AwsApiMcpError): class MissingContextError (line 57) | class MissingContextError(AwsApiMcpError): method __init__ (line 60) | def __init__(self, message: str, command_metadata: CommandMetadata) ->... class ProhibitedOperatorsError (line 66) | class ProhibitedOperatorsError(CliParsingError): method __init__ (line 71) | def __init__(self, operators: list[str]): method as_failure (line 77) | def as_failure(self) -> Failure: class InvalidChoiceForParameterError (line 82) | class InvalidChoiceForParameterError(CliParsingError): method __init__ (line 87) | def __init__(self, parameter: str, choice: str): method as_failure (line 94) | def as_failure(self) -> Failure: class ServiceNotAllowedError (line 101) | class ServiceNotAllowedError(CliParsingError): method __init__ (line 106) | def __init__(self, service: str): method as_failure (line 112) | def as_failure(self) -> Failure: class OperationNotAllowedError (line 117) | class OperationNotAllowedError(CliParsingError): method __init__ (line 122) | def __init__(self, service: str, operation: str): method as_failure (line 129) | def as_failure(self) -> Failure: class InvalidServiceError (line 136) | class InvalidServiceError(CliParsingError): method __init__ (line 141) | def __init__(self, service: str): method as_failure (line 147) | def as_failure(self) -> Failure: class MissingOperationError (line 152) | class MissingOperationError(CliParsingError): method __init__ (line 160) | def __init__(self): method as_failure (line 164) | def as_failure(self) -> Failure: class InvalidServiceOperationError (line 169) | class InvalidServiceOperationError(CliParsingError): method __init__ (line 174) | def __init__(self, service: str, operation: str): method as_failure (line 181) | def as_failure(self) -> Failure: class InvalidParametersReceivedError (line 188) | class InvalidParametersReceivedError(CommandValidationError): method __init__ (line 197) | def __init__( method as_failure (line 217) | def as_failure(self) -> Failure: class MissingRequiredParametersError (line 230) | class MissingRequiredParametersError(MissingContextError): method __init__ (line 238) | def __init__( method as_failure (line 254) | def as_failure(self) -> Failure: class MisspelledParametersError (line 266) | class MisspelledParametersError(CommandValidationError): method __init__ (line 274) | def __init__( method as_failure (line 288) | def as_failure(self) -> Failure: class UnknownArgumentsError (line 299) | class UnknownArgumentsError(CommandValidationError): method __init__ (line 308) | def __init__( method as_failure (line 325) | def as_failure(self) -> Failure: class DeniedGlobalArgumentsError (line 337) | class DeniedGlobalArgumentsError(CommandValidationError): method __init__ (line 342) | def __init__(self, service: str, args: list[str]): method as_failure (line 349) | def as_failure(self) -> Failure: class UnknownFiltersError (line 360) | class UnknownFiltersError(CommandValidationError): method __init__ (line 365) | def __init__(self, service: str, filters: list[str]): method as_failure (line 372) | def as_failure(self) -> Failure: class UnsupportedFilterError (line 383) | class UnsupportedFilterError(CommandValidationError): method __init__ (line 388) | def __init__(self, service: str, operation: str, keys: Set[str]): method as_failure (line 396) | def as_failure(self) -> Failure: class MalformedFilterError (line 408) | class MalformedFilterError(CommandValidationError): method __init__ (line 413) | def __init__(self, service: str, operation: str, keys: Set[str], expec... method as_failure (line 422) | def as_failure(self) -> Failure: class InvalidTypeForParameterError (line 435) | class InvalidTypeForParameterError(CommandValidationError): method __init__ (line 440) | def __init__(self, parameter: str, param_type: Callable[[str], Any] | ... method as_failure (line 447) | def as_failure(self) -> Failure: class ExpectedArgumentError (line 454) | class ExpectedArgumentError(MissingContextError): method __init__ (line 459) | def __init__(self, parameter: str, msg: str, command_metadata: Command... method as_failure (line 466) | def as_failure(self) -> Failure: class ShortHandParserError (line 471) | class ShortHandParserError(CommandValidationError): method __init__ (line 476) | def __init__(self, parameter: str, msg: str): method as_failure (line 483) | def as_failure(self) -> Failure: class ParameterValidationErrorRecord (line 489) | class ParameterValidationErrorRecord: method format_message (line 495) | def format_message(self): class ParameterSchemaValidationError (line 500) | class ParameterSchemaValidationError(CommandValidationError): method __init__ (line 503) | def __init__(self, errors: Iterable[ParameterValidationErrorRecord]): method as_failure (line 509) | def as_failure(self) -> Failure: class RequestSerializationError (line 514) | class RequestSerializationError(CommandValidationError): method __init__ (line 519) | def __init__(self, service: str, operation: str, msg: str): method as_failure (line 527) | def as_failure(self) -> Failure: class ClientSideFilterError (line 535) | class ClientSideFilterError(CommandValidationError): method __init__ (line 540) | def __init__(self, service: str, operation: str, client_side_query: st... method as_failure (line 549) | def as_failure(self) -> Failure: class FilePathValidationError (line 562) | class FilePathValidationError(CommandValidationError): method __init__ (line 571) | def __init__(self, file_path: str, reason: str): method as_failure (line 578) | def as_failure(self) -> Failure: class LocalFileAccessDisabledError (line 589) | class LocalFileAccessDisabledError(FilePathValidationError): method __init__ (line 594) | def __init__(self, file_path: str): class FileParameterError (line 600) | class FileParameterError(CommandValidationError): method __init__ (line 605) | def __init__(self, service: str, operation: str, file_path: str, reaso... method as_failure (line 616) | def as_failure(self) -> Failure: class OperationIsNotSupportedInTheRegionError (line 629) | class OperationIsNotSupportedInTheRegionError(CommandValidationError): method __init__ (line 634) | def __init__(self, service: str, operation: str, region: str): method as_failure (line 642) | def as_failure(self) -> Failure: class AwsRegionResolutionError (line 654) | class AwsRegionResolutionError(AwsApiMcpError): method __init__ (line 670) | def __init__(self, reason: str, profile_name: str | None = None): FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/file_system_controls.py function is_streaming_blob_argument (line 110) | def is_streaming_blob_argument(cli_argument: CLIArgument) -> bool: function get_file_validated (line 116) | def get_file_validated(prefix, path, mode): function validate_file_path (line 124) | def validate_file_path(file_path: str) -> str: function extract_file_paths_from_parameters (line 167) | def extract_file_paths_from_parameters( function _is_remote_path (line 233) | def _is_remote_path(path: str) -> bool: FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/help_command.py function _clean_text (line 27) | def _clean_text(text: str) -> str: function _clean_description (line 32) | def _clean_description(description: str) -> str: function generate_help_document (line 38) | def generate_help_document(service_name: str, operation_name: str) -> di... FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/helpers.py function operation_timer (line 31) | def operation_timer(service: str, operation: str, region: str): class Boto3Encoder (line 46) | class Boto3Encoder(json.JSONEncoder): method _decode_bytes (line 49) | def _decode_bytes(self, data: bytes) -> str: method default (line 56) | def default(self, o): function as_json (line 70) | def as_json(boto_response: dict[str, Any]) -> str: function expand_user_home_directory (line 75) | def expand_user_home_directory(args: list[str]) -> list[str]: function is_help_operation (line 80) | def is_help_operation(args: list[Any]) -> bool: function validate_aws_region (line 85) | def validate_aws_region(region: str): function get_requests_session (line 95) | def get_requests_session() -> requests.Session: FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/common/models.py class ProgramValidationRequest (line 23) | class ProgramValidationRequest(BaseModel): class Context (line 30) | class Context(BaseModel): class ValidationFailure (line 41) | class ValidationFailure(BaseModel): class InterpretationMetadata (line 48) | class InterpretationMetadata(BaseModel): class ProgramValidationResponse (line 57) | class ProgramValidationResponse(BaseModel): method validation_failed (line 64) | def validation_failed(self) -> bool: class Credentials (line 74) | class Credentials(BaseModel): class InterpretationResponse (line 85) | class InterpretationResponse(BaseModel): class AwsCliAliasResponse (line 104) | class AwsCliAliasResponse(BaseModel): class ProgramInterpretationResponse (line 111) | class ProgramInterpretationResponse(BaseModel): class Consent (line 121) | class Consent(BaseModel): class IRTranslation (line 128) | class IRTranslation: method validation_or_translation_failures (line 160) | def validation_or_translation_failures(self) -> list[Failure] | None: method __eq__ (line 166) | def __eq__(self, other): class InterpretedProgram (line 178) | class InterpretedProgram: method as_dict (line 205) | def as_dict(self) -> dict[str, Any]: function _normalize_program (line 210) | def _normalize_program(str) -> list[str]: class CallAWSResponse (line 214) | class CallAWSResponse(BaseModel): method check_response_or_error (line 222) | def check_response_or_error(self) -> 'CallAWSResponse': method serialize_model (line 229) | def serialize_model(self) -> dict: FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/metadata/read_only_operations_list.py class ServiceReferenceUrlsByService (line 47) | class ServiceReferenceUrlsByService(dict): method __init__ (line 50) | def __init__(self): class ReadOnlyOperations (line 62) | class ReadOnlyOperations(dict): method __init__ (line 65) | def __init__(self, service_reference_urls_by_service: dict[str, str]): method has (line 79) | def has(self, service, operation) -> bool: method _cache_ready_only_operations_for_service (line 95) | def _cache_ready_only_operations_for_service(self, service: str): method _get_known_readonly_operations_from_metadata (line 108) | def _get_known_readonly_operations_from_metadata(self) -> dict[str, Li... method _get_custom_readonly_operations (line 124) | def _get_custom_readonly_operations() -> dict[str, List[str]]: function get_read_only_operations (line 143) | def get_read_only_operations() -> ReadOnlyOperations: FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/custom_validators/botocore_param_validator.py function pattern_check (line 20) | def pattern_check(name, value, shape, error_type, errors): class BotoCoreValidationErrors (line 30) | class BotoCoreValidationErrors(ValidationErrors): method _format_error (line 33) | def _format_error(self, error): class BotoCoreParamValidator (line 52) | class BotoCoreParamValidator(ParamValidator): method validate (line 55) | def validate(self, params, shape): method _validate_string (line 62) | def _validate_string(self, param, shape, errors, name): FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/custom_validators/ec2_validator.py function validate_ec2_parameter_values (line 64) | def validate_ec2_parameter_values(parameters: dict[str, Any]): FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/custom_validators/s3_express_one_validator.py function validate_s3_express_one_region (line 34) | def validate_s3_express_one_region(service: str, operation: str, region:... FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/custom_validators/ssm_validator.py function _get_platform_name_and_platform_version (line 45) | def _get_platform_name_and_platform_version(string: str) -> Iterable[tup... function _validate_platform_name_used_correctly (line 56) | def _validate_platform_name_used_correctly( function _validate_platform_type_used_correctly (line 121) | def _validate_platform_type_used_correctly( function _validate_filters (line 174) | def _validate_filters(filters: list[dict[str, Any]]): function _validate_syncname (line 195) | def _validate_syncname(parameters, filters): function perform_ssm_validations (line 219) | def perform_ssm_validations(operation: str, parameters: dict[str, Any]): FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/interpretation.py function interpret (line 39) | def interpret( function _handle_streaming_output (line 98) | def _handle_streaming_output(response: dict[str, Any], output_file: Outp... function _apply_filter (line 112) | def _apply_filter(response: dict[str, Any], client_side_filter: ParsedRe... FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/lexer.py function split_cli_command (line 38) | def split_cli_command(cli_command: str) -> list[str]: FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/parser/parser.py class ParsedOperationArgs (line 176) | class ParsedOperationArgs(NamedTuple): function _on_error_in_argparse (line 187) | def _on_error_in_argparse(message: str): class ArgTableParser (line 191) | class ArgTableParser(ArgTableArgParser): method parse_operation_args (line 194) | def parse_operation_args(self, command_metadata: CommandMetadata, args... method _check_if_misspelled (line 220) | def _check_if_misspelled(self, service, operation, supported_args, unk... method error (line 233) | def error(self, message): # type: ignore[override] method _identify_missing_parameters (line 238) | def _identify_missing_parameters(self, operation_args: Namespace) -> G... method _get_value (line 266) | def _get_value(self, action, arg_string): method _match_argument (line 272) | def _match_argument(self, action, arg_strings_pattern): function _fetch_error_from_number_of_args (line 282) | def _fetch_error_from_number_of_args(nargs: str) -> str: class GlobalArgParser (line 286) | class GlobalArgParser(MainArgParser): method _check_value (line 289) | def _check_value(self, action, value): method _build (line 302) | def _build(self, command_table, version_string, argument_table): # no... method get_parser (line 310) | def get_parser(): method error (line 320) | def error(self, message): # type: ignore[override] function is_custom_operation (line 325) | def is_custom_operation(service, operation): function is_denied_custom_service (line 344) | def is_denied_custom_service(service): function is_denied_custom_operation (line 349) | def is_denied_custom_operation(service, operation): function parse (line 375) | def parse(cli_command: str, default_region_override: str | None = None) ... function _handle_service_command (line 396) | def _handle_service_command( function _handle_awscli_customization (line 476) | def _handle_awscli_customization( function contains_subcommand (line 519) | def contains_subcommand(operation_command, remaining: list[str]) -> bool: function _parse_customization_parameters (line 529) | def _parse_customization_parameters( function _validate_customization_arguments (line 554) | def _validate_customization_arguments( function _handle_invalid_parameters (line 627) | def _handle_invalid_parameters( function _validate_global_args (line 660) | def _validate_global_args(service: str, global_args: argparse.Namespace): function _validate_parameters (line 672) | def _validate_parameters( function _run_custom_validations (line 703) | def _run_custom_validations( function _validate_request_serialization (line 715) | def _validate_request_serialization( function _validate_s3_file_paths (line 736) | def _validate_s3_file_paths(service: str, operation: str, parameters: di... function _validate_s3_file_path (line 749) | def _validate_s3_file_path( function _validate_customization_file_paths (line 769) | def _validate_customization_file_paths( function _validate_outfile (line 798) | def _validate_outfile( function _validate_file_path (line 814) | def _validate_file_path(file_path: str, service: str, operation: str): function _validate_endpoint (line 826) | def _validate_endpoint(endpoint: str | None): function _fetch_region_from_arn (line 851) | def _fetch_region_from_arn(parameters: dict[str, Any]) -> str | None: function _construct_command (line 860) | def _construct_command( function _service_full_name (line 918) | def _service_full_name(service_model: ServiceModel) -> str | None: FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/core/security/policy.py class PolicyDecision (line 24) | class PolicyDecision(Enum): function check_elicitation_support (line 32) | def check_elicitation_support(ctx) -> bool: class SecurityPolicy (line 42) | class SecurityPolicy: method __init__ (line 45) | def __init__(self, ctx=None): method _load_policy (line 56) | def _load_policy(self): method _load_customizations (line 89) | def _load_customizations(self): method determine_policy_effect (line 109) | def determine_policy_effect( method check_customization (line 141) | def check_customization(self, ir, is_read_only_func) -> Optional[Polic... FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/middleware/http_header_validation_middleware.py class HTTPHeaderValidationMiddleware (line 23) | class HTTPHeaderValidationMiddleware(Middleware): method on_request (line 26) | async def on_request( FILE: src/aws-api-mcp-server/awslabs/aws_api_mcp_server/server.py function suggest_aws_commands (line 146) | async def suggest_aws_commands( function call_aws (line 243) | async def call_aws( function _execute_single_command (line 274) | async def _execute_single_command( function call_aws_helper (line 284) | async def call_aws_helper( function get_execution_plan (line 403) | async def get_execution_plan( function main (line 425) | def main(): FILE: src/aws-api-mcp-server/tests/agent_scripts/test_manager.py function test_registry_dir (line 10) | def test_registry_dir(): function test_get_script_existing (line 15) | def test_get_script_existing(test_registry_dir): function test_get_script_another_valid (line 26) | def test_get_script_another_valid(test_registry_dir): function test_initialization_with_valid_scripts (line 37) | def test_initialization_with_valid_scripts(test_registry_dir): function test_initialization_with_non_existent_directory (line 47) | def test_initialization_with_non_existent_directory(): function test_initialization_with_empty_directory (line 55) | def test_initialization_with_empty_directory(): function test_initialization_with_script_missing_description (line 63) | def test_initialization_with_script_missing_description(): function test_initialization_with_malformed_frontmatter (line 81) | def test_initialization_with_malformed_frontmatter(): function test_script_name_extraction (line 100) | def test_script_name_extraction(test_registry_dir): function test_script_content_parsing (line 109) | def test_script_content_parsing(test_registry_dir): function test_pretty_print_scripts (line 123) | def test_pretty_print_scripts(test_registry_dir): function test_pretty_print_scripts_empty (line 136) | def test_pretty_print_scripts_empty(test_registry_dir): function test_pretty_print_scripts_single (line 147) | def test_pretty_print_scripts_single(test_registry_dir): function test_manager_scripts_property (line 165) | def test_manager_scripts_property(test_registry_dir): function test_script_with_complex_content (line 179) | def test_script_with_complex_content(test_registry_dir): function test_script_with_multiline_description (line 191) | def test_script_with_multiline_description(): function test_script_with_special_characters_in_name (line 217) | def test_script_with_special_characters_in_name(): function test_custom_scripts_dir_valid (line 237) | def test_custom_scripts_dir_valid(): function test_custom_scripts_dir_nonexistent (line 273) | def test_custom_scripts_dir_nonexistent(): function test_custom_scripts_dir_no_read_permission (line 286) | def test_custom_scripts_dir_no_read_permission(): function test_custom_scripts_dir_none (line 301) | def test_custom_scripts_dir_none(): FILE: src/aws-api-mcp-server/tests/aws/test_driver.py function test_get_local_credentials_success_with_aws_mcp_profile (line 28) | def test_get_local_credentials_success_with_aws_mcp_profile(mock_session... function test_get_local_credentials_success_with_default_creds (line 51) | def test_get_local_credentials_success_with_default_creds(mock_session_c... function test_get_local_credentials_raises_no_credentials_error (line 74) | def test_get_local_credentials_raises_no_credentials_error(mock_session_... function test_driver (line 281) | def test_driver(command, program): function test_invalid_region (line 304) | def test_invalid_region(command): function test_interpret_command_with_credentials_parameter (line 311) | def test_interpret_command_with_credentials_parameter(mock_get_local_cre... function test_interpret_command_without_credentials_parameter (line 328) | def test_interpret_command_without_credentials_parameter(mock_get_local_... function test_interpret_command_credentials_precedence (line 344) | def test_interpret_command_credentials_precedence(mock_get_local_credent... FILE: src/aws-api-mcp-server/tests/aws/test_pagination.py function get_pages (line 6) | def get_pages(): function test_build_result (line 48) | def test_build_result(): function test_build_result_with_client_side_filter (line 75) | def test_build_result_with_client_side_filter(): function test_build_result_with_max_results (line 100) | def test_build_result_with_max_results(): FILE: src/aws-api-mcp-server/tests/aws/test_regions.py function test_get_active_regions_with_profile (line 9) | def test_get_active_regions_with_profile(mock_session): function test_get_active_regions_without_profile (line 34) | def test_get_active_regions_without_profile(mock_session): function test_get_active_regions_multiple_pages (line 56) | def test_get_active_regions_multiple_pages(mock_session): function test_get_active_regions_empty_response (line 83) | def test_get_active_regions_empty_response(mock_session): function test_get_active_regions_access_denied_error (line 98) | def test_get_active_regions_access_denied_error(mock_session): function test_get_active_regions_other_client_error (line 116) | def test_get_active_regions_other_client_error(mock_session): function test_get_active_regions_unexpected_error (line 134) | def test_get_active_regions_unexpected_error(mock_session): FILE: src/aws-api-mcp-server/tests/aws/test_service.py function test_interpret_returns_validation_failures (line 62) | def test_interpret_returns_validation_failures(cli_command, reason, serv... function test_interpret_returns_missing_context_failures (line 83) | def test_interpret_returns_missing_context_failures(): function test_interpret_returns_valid_response (line 211) | def test_interpret_returns_valid_response( function test_interpret_injects_region (line 235) | def test_interpret_injects_region(mock_get_region): function test_region_picked_up_from_arn (line 285) | def test_region_picked_up_from_arn(cli, region): function test_validate_success (line 298) | def test_validate_success(): function test_validate_returns_validation_failures (line 313) | def test_validate_returns_validation_failures(cli_command, validate_resp... function test_validate_returns_missing_context_failures (line 321) | def test_validate_returns_missing_context_failures(): function test_validate_returns_ec2_validation_failures (line 369) | def test_validate_returns_ec2_validation_failures(cli_command, validatio... function test_is_operation_read_only_returns_true_for_read_only_operation (line 379) | def test_is_operation_read_only_returns_true_for_read_only_operation(): function test_is_operation_read_only_returns_false_for_non_read_only_operation (line 397) | def test_is_operation_read_only_returns_false_for_non_read_only_operatio... function test_is_operation_read_only_returns_false_for_unknown_service (line 415) | def test_is_operation_read_only_returns_false_for_unknown_service(): function test_is_operation_read_only_raises_error_for_missing_command_metadata (line 433) | def test_is_operation_read_only_raises_error_for_missing_command_metadat... function test_is_operation_read_only_raises_error_for_missing_service_name (line 442) | def test_is_operation_read_only_raises_error_for_missing_service_name(): function test_is_operation_read_only_raises_error_for_missing_operation_name (line 457) | def test_is_operation_read_only_raises_error_for_missing_operation_name(): function test_execute_awscli_customization_success (line 471) | def test_execute_awscli_customization_success(mock_get_driver): function test_execute_awscli_customization_error (line 497) | def test_execute_awscli_customization_error(mock_get_driver): function test_profile_not_added_when_env_var_none (line 520) | def test_profile_not_added_when_env_var_none(mock_get_driver): function test_profile_added_when_env_var_set (line 538) | def test_profile_added_when_env_var_set(mock_get_driver): function test_profile_not_added_if_present_for_customizations (line 558) | def test_profile_not_added_if_present_for_customizations(mock_get_region... function test_interpret_command_creates_output_file_for_streaming_operations (line 590) | def test_interpret_command_creates_output_file_for_streaming_operations( function test_interpret_command_with_credentials_parameter (line 620) | def test_interpret_command_with_credentials_parameter(): function test_interpret_command_without_credentials_parameter (line 637) | def test_interpret_command_without_credentials_parameter(): function test_interpret_command_with_region_parameter (line 653) | def test_interpret_command_with_region_parameter(mock_interpret): function test_execute_awscli_customization_uses_explicit_region_overrides_ir (line 675) | def test_execute_awscli_customization_uses_explicit_region_overrides_ir(... function test_execute_awscli_customization_with_credentials (line 713) | def test_execute_awscli_customization_with_credentials(mock_get_driver): function test_execute_awscli_customization_without_credentials (line 746) | def test_execute_awscli_customization_without_credentials(mock_get_driver): function test_execute_awscli_customization_raises_error (line 777) | def test_execute_awscli_customization_raises_error(mock_get_driver): function test_expand_regions_if_needed_without_expansion (line 819) | def test_expand_regions_if_needed_without_expansion(command): function test_expand_regions_if_needed_with_invalid_region (line 834) | def test_expand_regions_if_needed_with_invalid_region(command): function test_expand_regions_if_needed_wildcard (line 866) | def test_expand_regions_if_needed_wildcard(mock_get_active_regions, comm... function test_expand_regions_if_needed_with_api_mcp_profile_name (line 875) | def test_expand_regions_if_needed_with_api_mcp_profile_name(mock_get_act... function test_expand_regions_if_needed_with_profile (line 895) | def test_expand_regions_if_needed_with_profile(mock_get_active_regions, ... function test_expand_regions_if_needed_get_regions_fails (line 903) | def test_expand_regions_if_needed_get_regions_fails(mock_get_active_regi... FILE: src/aws-api-mcp-server/tests/aws/test_services.py function test_max_results (line 23) | def test_max_results(max_result_config, max_result_param, expected_max_r... function test_session_user_agent_in_boto_request (line 37) | def test_session_user_agent_in_boto_request(mock_send, mock_env): function test_get_awscli_driver_with_credentials (line 66) | def test_get_awscli_driver_with_credentials(mock_create_driver): function test_get_awscli_driver_without_credentials (line 86) | def test_get_awscli_driver_without_credentials(mock_create_driver): function test_get_awscli_driver_user_agent_configuration (line 100) | def test_get_awscli_driver_user_agent_configuration(mock_create_driver): FILE: src/aws-api-mcp-server/tests/common/test_command.py function test_operation_cli_name (line 19) | def test_operation_cli_name(): function test_operation_cli_name_ec2 (line 31) | def test_operation_cli_name_ec2(): function test_operation_cli_name_with_s3 (line 43) | def test_operation_cli_name_with_s3(): FILE: src/aws-api-mcp-server/tests/common/test_config.py function test_get_server_directory_windows_macos (line 27) | def test_get_server_directory_windows_macos( function test_get_region_parametrized (line 68) | def test_get_region_parametrized( function test_get_transport_from_env_default_value (line 97) | def test_get_transport_from_env_default_value(monkeypatch): function test_get_transport_from_env_invalid_values (line 120) | def test_get_transport_from_env_invalid_values(monkeypatch, invalid_tran... function test_get_transport_from_env_streamable_http_with_no_auth (line 128) | def test_get_transport_from_env_streamable_http_with_no_auth(monkeypatch): function test_user_agent_without_telemetry (line 137) | def test_user_agent_without_telemetry(): function test_user_agent_with_context (line 147) | def test_user_agent_with_context(mock_get_context): function test_user_agent_with_context_no_client_params (line 167) | def test_user_agent_with_context_no_client_params(mock_get_context): function test_package_version_in_user_agent (line 186) | def test_package_version_in_user_agent(): function test_get_file_access_mode_unrestricted (line 205) | def test_get_file_access_mode_unrestricted(monkeypatch, env_value, expec... function test_get_file_access_mode_workdir (line 225) | def test_get_file_access_mode_workdir(monkeypatch, env_value, expected_m... function test_get_file_access_mode_no_access (line 240) | def test_get_file_access_mode_no_access(monkeypatch, env_value, expected... function test_get_file_access_mode_default (line 247) | def test_get_file_access_mode_default(monkeypatch): function test_get_file_access_mode_unknown_defaults_to_workdir (line 264) | def test_get_file_access_mode_unknown_defaults_to_workdir(monkeypatch, e... function test_get_working_directory_default (line 273) | def test_get_working_directory_default(mock_makedirs, mock_get_server_di... function test_get_working_directory_custom_valid_path (line 293) | def test_get_working_directory_custom_valid_path( function test_get_working_directory_path_does_not_exist (line 315) | def test_get_working_directory_path_does_not_exist( function test_get_working_directory_path_is_not_directory (line 336) | def test_get_working_directory_path_is_not_directory( function test_get_working_directory_path_is_relative (line 357) | def test_get_working_directory_path_is_relative(mock_exists, mock_isdir,... FILE: src/aws-api-mcp-server/tests/common/test_file_system_controls.py function test_safe_path_allowed (line 29) | def test_safe_path_allowed(): function test_unsafe_path_blocked (line 36) | def test_unsafe_path_blocked(): function test_unrestricted_access_allows_unsafe_path (line 47) | def test_unrestricted_access_allows_unsafe_path(): function test_all_custom_operations_have_file_path_arguments_entry (line 54) | def test_all_custom_operations_have_file_path_arguments_entry(): function test_extract_file_paths_service_non_custom_operation (line 90) | def test_extract_file_paths_service_non_custom_operation(): function test_extract_file_paths_param_value_is_list (line 106) | def test_extract_file_paths_param_value_is_list(): function test_extract_file_paths_parameter_none_value (line 127) | def test_extract_file_paths_parameter_none_value(): FILE: src/aws-api-mcp-server/tests/common/test_help_command.py class MockDoc (line 10) | class MockDoc: method __init__ (line 13) | def __init__(self, content=b''): method getvalue (line 17) | def getvalue(self): function test_clean_text (line 22) | def test_clean_text(): function test_clean_description (line 28) | def test_clean_description(): function test_generate_help_document_unknown_command (line 38) | def test_generate_help_document_unknown_command(mock_driver): function test_generate_help_document_real_aws_commands (line 77) | def test_generate_help_document_real_aws_commands( FILE: src/aws-api-mcp-server/tests/common/test_helpers.py function test_validate_aws_region_valid_regions (line 61) | def test_validate_aws_region_valid_regions(valid_region: str): function test_validate_aws_region_invalid_regions (line 86) | def test_validate_aws_region_invalid_regions(mock_logger: MagicMock, inv... function test_get_requests_session (line 100) | def test_get_requests_session(): function test_is_help_operation (line 146) | def test_is_help_operation(args, expected): function test_as_json_basic_dict (line 151) | def test_as_json_basic_dict(): function test_as_json_encodes_streaming_body_with_utf8_content (line 158) | def test_as_json_encodes_streaming_body_with_utf8_content(): function test_as_json_encodes_streaming_body_with_non_utf8_content (line 166) | def test_as_json_encodes_streaming_body_with_non_utf8_content(): function test_as_json_encodes_bytes_with_utf8_content (line 176) | def test_as_json_encodes_bytes_with_utf8_content(): function test_as_json_encodes_bytes_with_non_utf8_content (line 183) | def test_as_json_encodes_bytes_with_non_utf8_content(): function test_as_json_raises_type_error_for_unsupported_type (line 192) | def test_as_json_raises_type_error_for_unsupported_type(): FILE: src/aws-api-mcp-server/tests/common/test_models.py function test_call_aws_response_with_response (line 10) | def test_call_aws_response_with_response(): function test_call_aws_response_with_error (line 23) | def test_call_aws_response_with_error(): function test_call_aws_response_with_both (line 32) | def test_call_aws_response_with_both(): function test_call_aws_response_validation_error (line 44) | def test_call_aws_response_validation_error(): function test_call_aws_response_serialization_with_response (line 50) | def test_call_aws_response_serialization_with_response(): function test_call_aws_response_serialization_with_error (line 64) | def test_call_aws_response_serialization_with_error(): FILE: src/aws-api-mcp-server/tests/fixtures.py class MockStreamingBody (line 194) | class MockStreamingBody: method __init__ (line 197) | def __init__(self, content): method iter_chunks (line 201) | def iter_chunks(self, chunk_size=1024): method read (line 205) | def read(self): function raise_ (line 221) | def raise_(ex): function mock_make_api_call (line 239) | def mock_make_api_call(self, operation_name, kwarg): function create_file_open_mock (line 257) | def create_file_open_mock(*target_files): function patch_boto3 (line 274) | def patch_boto3(): function patch_botocore (line 285) | def patch_botocore(): class DummyCtx (line 296) | class DummyCtx(Context): method __init__ (line 299) | def __init__(self): method error (line 303) | async def error(self, message, logger_name=None, extra=None): FILE: src/aws-api-mcp-server/tests/history_handler.py class Boto3HistoryHandler (line 4) | class Boto3HistoryHandler: method __init__ (line 7) | def __init__(self): method emit (line 11) | def emit( FILE: src/aws-api-mcp-server/tests/metadata/test_read_only_operations_list.py function sample_service_reference_list_response (line 20) | def sample_service_reference_list_response(): function sample_service_reference_response (line 26) | def sample_service_reference_response(): function test_read_only_operations_initialization (line 75) | def test_read_only_operations_initialization( function test_read_only_operations_has_method_missing_service (line 94) | def test_read_only_operations_has_method_missing_service( function test_read_only_operations_has_method_second_call_for_service_queries_local_cache (line 124) | def test_read_only_operations_has_method_second_call_for_service_queries... function test_read_only_operations_has_method_error (line 157) | def test_read_only_operations_has_method_error( function test_service_reference_urls_by_service_error (line 183) | def test_service_reference_urls_by_service_error(mocked_requests_get): function test_read_only_operations_has_method_custom_operation (line 194) | def test_read_only_operations_has_method_custom_operation(): function test_read_only_operations_has_method_operation_from_metadata (line 202) | def test_read_only_operations_has_method_operation_from_metadata(): function test_read_only_operations_overrides (line 213) | def test_read_only_operations_overrides(): FILE: src/aws-api-mcp-server/tests/middleware/test_http_header_validation_middleware.py function test_origin_header_validation_passes (line 22) | async def test_origin_header_validation_passes( function test_origin_header_validation_fails (line 53) | async def test_origin_header_validation_fails( function test_host_header_validation_passes (line 89) | async def test_host_header_validation_passes( function test_host_header_validation_fails (line 123) | async def test_host_header_validation_fails( function test_both_headers_validated_independently (line 147) | async def test_both_headers_validated_independently(mock_get_headers: Ma... function test_host_fails_validation_when_both_present (line 177) | async def test_host_fails_validation_when_both_present(mock_get_headers:... function test_origin_fails_validation_when_both_present (line 207) | async def test_origin_fails_validation_when_both_present(mock_get_header... function test_no_origin_or_host_headers (line 237) | async def test_no_origin_or_host_headers(mock_get_headers: MagicMock): function test_port_removal_from_origin (line 262) | async def test_port_removal_from_origin( function test_empty_allowed_origins (line 285) | async def test_empty_allowed_origins(mock_get_headers: MagicMock): FILE: src/aws-api-mcp-server/tests/parser/test_lexer.py function test_split_cli_command_successfully (line 21) | def test_split_cli_command_successfully(command, expected_tokens): function test_split_cli_command_unsuccessfully (line 37) | def test_split_cli_command_unsuccessfully(command, error, error_args): FILE: src/aws-api-mcp-server/tests/parser/test_parser.py function test_service_not_expecting_parameters (line 32) | def test_service_not_expecting_parameters(command): function test_invalid_service (line 45) | def test_invalid_service(command, service): function test_service_not_allowed (line 58) | def test_service_not_allowed(command, service): function test_invalid_operation (line 76) | def test_invalid_operation(command, operation): function test_missing_operation (line 89) | def test_missing_operation(command): function test_missing_required_parameters (line 111) | def test_missing_required_parameters(command, message): function test_hallucinated_parameters_are_detected (line 174) | def test_hallucinated_parameters_are_detected(command, message): function test_for_valid_regions (line 197) | def test_for_valid_regions(command): function test_invalid_choice_for_option (line 211) | def test_invalid_choice_for_option(command, message): function test_invalid_type_for_parameter (line 226) | def test_invalid_type_for_parameter(command, message): function test_schema_validation (line 254) | def test_schema_validation(command, messages): function test_expected_required_argument (line 275) | def test_expected_required_argument(command, message): function test_does_not_crash_on_parameter_without_value (line 287) | def test_does_not_crash_on_parameter_without_value(command): function test_does_not_crash_on_invalid_command (line 302) | def test_does_not_crash_on_invalid_command(command, error, params): function test_tag_key_filter (line 316) | def test_tag_key_filter(command): function test_filter_validation_is_bypassed_when_docs_are_missing (line 330) | def test_filter_validation_is_bypassed_when_docs_are_missing(command): function test_ssm_list_documents_filters (line 354) | def test_ssm_list_documents_filters(command): function test_plural_singular_params (line 366) | def test_plural_singular_params(command): function test_should_pass_for_valid_equal_sign_params (line 381) | def test_should_pass_for_valid_equal_sign_params(command): function test_should_pass_for_valid_equal_sign_params_with_file_output (line 390) | def test_should_pass_for_valid_equal_sign_params_with_file_output(): function test_prefix_parameter (line 407) | def test_prefix_parameter(command): function test_valid_ssm_cli_commands_only_filters (line 432) | def test_valid_ssm_cli_commands_only_filters(command: str): function test_valid_ssm_cli_commands_filters_and_attributes (line 456) | def test_valid_ssm_cli_commands_filters_and_attributes(command: str): function test_ssm_cli_raises_parameter_schema_validation_error_when_windows_server_shorthand_used (line 461) | def test_ssm_cli_raises_parameter_schema_validation_error_when_windows_s... function test_ssm_cli_raises_parameter_schema_validation_error_when_platform_type_should_be_used_instead_of_platform_name (line 482) | def test_ssm_cli_raises_parameter_schema_validation_error_when_platform_... function test_ssm_cli_raises_parameter_schema_validation_error_when_platform_name_should_be_used_instead_of_platform_type (line 501) | def test_ssm_cli_raises_parameter_schema_validation_error_when_platform_... function test_ssm_cli_raises_parameter_schema_validation_error_when_sync_name_is_expected_but_missing (line 522) | def test_ssm_cli_raises_parameter_schema_validation_error_when_sync_name... function test_ssm_cli_validation_is_case_insensitive (line 546) | def test_ssm_cli_validation_is_case_insensitive(command: str): function test_ssm_cli_raises_parameter_schema_validation_error_when_platform_version_missing (line 551) | def test_ssm_cli_raises_parameter_schema_validation_error_when_platform_... function test_client_side_filter_error (line 572) | def test_client_side_filter_error(): function test_profile (line 583) | def test_profile(mock_boto3_session): function test_validate_endpoint_valid_loopback (line 607) | def test_validate_endpoint_valid_loopback(endpoint): function test_validate_endpoint_invalid (line 627) | def test_validate_endpoint_invalid(endpoint, expected_error): function test_validate_endpoint_empty_string (line 633) | def test_validate_endpoint_empty_string(): function test_validate_endpoint_localhost_conversion (line 638) | def test_validate_endpoint_localhost_conversion(): function test_validate_endpoint_ipv6_loopback (line 643) | def test_validate_endpoint_ipv6_loopback(): function test_validate_endpoint_protocol_handling (line 649) | def test_validate_endpoint_protocol_handling(): function test_validate_endpoint_non_http_protocols (line 655) | def test_validate_endpoint_non_http_protocols(): function test_allowed_custom_operations_when_file_access_disabled_is_subset (line 661) | def test_allowed_custom_operations_when_file_access_disabled_is_subset(): function test_s3_express_one_in_unsupported_region (line 700) | def test_s3_express_one_in_unsupported_region(): FILE: src/aws-api-mcp-server/tests/parser/test_parser_customizations.py function test_wait_is_custom_operation (line 20) | def test_wait_is_custom_operation(): function test_custom_operation_is_detected (line 25) | def test_custom_operation_is_detected(): function test_s3api_list_buckets_not_custom (line 36) | def test_s3api_list_buckets_not_custom(): function test_non_custom_operation_not_denied (line 41) | def test_non_custom_operation_not_denied(): function test_custom_command_not_in_allow_list_denied (line 57) | def test_custom_command_not_in_allow_list_denied(service, operation): function test_s3_ls_no_args (line 63) | def test_s3_ls_no_args(): function test_s3_ls_with_bucket (line 79) | def test_s3_ls_with_bucket(): function test_s3_ls_with_bucket_and_prefix (line 90) | def test_s3_ls_with_bucket_and_prefix(): function test_s3_ls_with_flags (line 101) | def test_s3_ls_with_flags(): function test_s3_ls_with_bucket_and_flags (line 112) | def test_s3_ls_with_bucket_and_flags(): function test_s3_cp_no_args (line 125) | def test_s3_cp_no_args(): function test_s3_cp_with_source_and_dest (line 133) | def test_s3_cp_with_source_and_dest(): function test_s3_mv_with_source_and_dest (line 149) | def test_s3_mv_with_source_and_dest(): function test_s3_sync_with_source_and_dest (line 160) | def test_s3_sync_with_source_and_dest(): function test_s3_rm_with_bucket (line 171) | def test_s3_rm_with_bucket(): function test_s3_cp_stdin_as_source_blocked (line 184) | def test_s3_cp_stdin_as_source_blocked(): function test_s3_cp_stdout_as_destination_allowed (line 200) | def test_s3_cp_stdout_as_destination_allowed(): function test_s3_sync_stdin_as_source_blocked (line 211) | def test_s3_sync_stdin_as_source_blocked(): function test_s3_mv_stdin_as_source_blocked (line 227) | def test_s3_mv_stdin_as_source_blocked(): function test_configservice_get_status_no_args (line 244) | def test_configservice_get_status_no_args(): function test_configservice_get_status_with_region (line 255) | def test_configservice_get_status_with_region(): function test_custom_operation_not_in_allow_list_denied (line 266) | def test_custom_operation_not_in_allow_list_denied(): function test_emr_describe_cluster_no_args (line 275) | def test_emr_describe_cluster_no_args(): function test_emr_add_steps_with_cluster_id (line 283) | def test_emr_add_steps_with_cluster_id(): function test_emr_describe_cluster_with_cluster_id (line 291) | def test_emr_describe_cluster_with_cluster_id(): function test_rds_generate_db_auth_token_no_args (line 303) | def test_rds_generate_db_auth_token_no_args(): function test_rds_generate_db_auth_token_with_all_required_args (line 314) | def test_rds_generate_db_auth_token_with_all_required_args(): function test_rds_generate_db_auth_token_with_region (line 327) | def test_rds_generate_db_auth_token_with_region(): function test_datapipeline_list_runs_no_args (line 344) | def test_datapipeline_list_runs_no_args(): function test_datapipeline_list_runs_with_pipeline_id (line 352) | def test_datapipeline_list_runs_with_pipeline_id(): function test_datapipeline_list_runs_with_pipeline_id_and_region (line 363) | def test_datapipeline_list_runs_with_pipeline_id_and_region(): function test_invalid_s3_operation (line 376) | def test_invalid_s3_operation(): function test_invalid_configservice_operation (line 384) | def test_invalid_configservice_operation(): function test_invalid_emr_operation (line 392) | def test_invalid_emr_operation(): function test_invalid_rds_operation (line 400) | def test_invalid_rds_operation(): function test_s3_ls_with_empty_bucket (line 409) | def test_s3_ls_with_empty_bucket(): function test_s3_ls_with_special_characters_in_bucket (line 420) | def test_s3_ls_with_special_characters_in_bucket(): function test_rds_generate_db_auth_token_with_numeric_port (line 431) | def test_rds_generate_db_auth_token_with_numeric_port(): function test_local_file_uri (line 445) | def test_local_file_uri(): function test_local_file_uri_validation_failure (line 486) | def test_local_file_uri_validation_failure(): FILE: src/aws-api-mcp-server/tests/parser/test_parser_file_access.py class TestDefaultFileAccessBehavior (line 78) | class TestDefaultFileAccessBehavior: method test_valid_expand_user_home_directory (line 85) | def test_valid_expand_user_home_directory(self): method test_valid_expand_user_home_directory_in_outfile_arg (line 97) | def test_valid_expand_user_home_directory_in_outfile_arg(self): method test_unexpanded_tilde_path_raises_error (line 111) | def test_unexpanded_tilde_path_raises_error(self): method test_validate_output_file_raises_error_for_relative_paths_outside_workdir (line 123) | def test_validate_output_file_raises_error_for_relative_paths_outside_... method test_parse_raises_error_for_relative_paths_in_blob_args_outside_workdir (line 136) | def test_parse_raises_error_for_relative_paths_in_blob_args_outside_wo... method test_custom_file_path_arguments_outside_working_directory_rejected (line 173) | def test_custom_file_path_arguments_outside_working_directory_rejected... class TestDisabledLocalFileAccess (line 190) | class TestDisabledLocalFileAccess: method test_rejects_commands_with_local_paths (line 205) | def test_rejects_commands_with_local_paths(self, command): method test_rejects_file_blob_arguments (line 222) | def test_rejects_file_blob_arguments(self, command): method test_rejects_streaming_blob_arguments (line 235) | def test_rejects_streaming_blob_arguments(self, command): method test_allows_s3_uris_and_stdout_redirect (line 257) | def test_allows_s3_uris_and_stdout_redirect( method test_allowed_custom_operations_work_with_disabled_file_access (line 338) | def test_allowed_custom_operations_work_with_disabled_file_access( method test_file_based_custom_operations_rejected_with_disabled_file_access (line 415) | def test_file_based_custom_operations_rejected_with_disabled_file_access( function test_shorthand_paramfile_rejected_when_file_access_disabled (line 442) | def test_shorthand_paramfile_rejected_when_file_access_disabled(command): class TestUnrestrictedLocalFileAccess (line 456) | class TestUnrestrictedLocalFileAccess: method test_allows_local_files_in_unrestricted_mode (line 459) | def test_allows_local_files_in_unrestricted_mode(self): FILE: src/aws-api-mcp-server/tests/test_security_policy.py function create_mock_ir (line 23) | def create_mock_ir(service: str, operation: str): function create_mock_ctx (line 32) | def create_mock_ctx(supports_elicitation=True): function test_security_policy_file_loading_success (line 45) | def test_security_policy_file_loading_success(): function test_security_policy_file_loading_empty (line 59) | def test_security_policy_file_loading_empty(): function test_security_policy_customization_file_loading (line 72) | def test_security_policy_customization_file_loading(): function test_security_policy_file_not_found (line 94) | def test_security_policy_file_not_found(): function test_security_policy_file_error_handling (line 105) | def test_security_policy_file_error_handling(): function test_security_policy_customization_file_not_found (line 170) | def test_security_policy_customization_file_not_found(): function test_security_policy_customization_missing_api_calls (line 187) | def test_security_policy_customization_missing_api_calls(): function test_security_policy_deny_takes_priority (line 208) | def test_security_policy_deny_takes_priority(): function test_security_policy_default_behavior (line 220) | def test_security_policy_default_behavior(): function test_security_policy_operation_name_conversion (line 236) | def test_security_policy_operation_name_conversion(): function test_security_policy_customization_parent_deny (line 256) | def test_security_policy_customization_parent_deny(): function test_security_policy_customization_parent_elicit (line 272) | def test_security_policy_customization_parent_elicit(): function test_security_policy_customization_parent_elicit_no_support (line 288) | def test_security_policy_customization_parent_elicit_no_support(): function test_security_policy_customization_child_deny (line 304) | def test_security_policy_customization_child_deny(): function test_security_policy_customization_child_elicit (line 319) | def test_security_policy_customization_child_elicit(): function test_security_policy_customization_child_elicit_no_support (line 334) | def test_security_policy_customization_child_elicit_no_support(): function test_security_policy_customization_mixed_decisions_deny_wins (line 350) | def test_security_policy_customization_mixed_decisions_deny_wins(): function test_security_policy_customization_all_allowed (line 366) | def test_security_policy_customization_all_allowed(): function test_security_policy_customization_no_match (line 380) | def test_security_policy_customization_no_match(): function test_security_policy_customization_invalid_command (line 394) | def test_security_policy_customization_invalid_command(): function test_security_policy_customization_invalid_api_call (line 418) | def test_security_policy_customization_invalid_api_call(): function test_check_security_policy_customization_deny (line 433) | def test_check_security_policy_customization_deny(): function test_check_security_policy_no_customization (line 458) | def test_check_security_policy_no_customization(): function test_security_policy_customization_missing_customizations_key (line 484) | def test_security_policy_customization_missing_customizations_key(): function test_call_aws_security_policy_deny (line 509) | async def test_call_aws_security_policy_deny( function test_call_aws_security_policy_elicit (line 543) | async def test_call_aws_security_policy_elicit( function test_check_elicitation_support (line 592) | async def test_check_elicitation_support(): function test_check_security_policy_missing_metadata_with_elicitation (line 614) | def test_check_security_policy_missing_metadata_with_elicitation(): function test_check_security_policy_missing_metadata_without_elicitation (line 636) | def test_check_security_policy_missing_metadata_without_elicitation(): function test_check_security_policy_is_read_only_func_called (line 657) | def test_check_security_policy_is_read_only_func_called(): function test_determine_policy_effect_s3_elicit_no_support (line 687) | def test_determine_policy_effect_s3_elicit_no_support(): function test_determine_policy_effect_non_s3_elicit_no_support (line 699) | def test_determine_policy_effect_non_s3_elicit_no_support(): function test_check_customization_elicit_decision (line 711) | def test_check_customization_elicit_decision(): function test_determine_policy_effect_read_operations_only_mode (line 727) | def test_determine_policy_effect_read_operations_only_mode(): function test_determine_policy_effect_require_mutation_consent (line 742) | def test_determine_policy_effect_require_mutation_consent(): FILE: src/aws-api-mcp-server/tests/test_server.py function test_main_read_operations_index_load_failure (line 32) | def test_main_read_operations_index_load_failure(mock_server, mock_get_r... function test_call_aws_success (line 49) | async def test_call_aws_success( function test_suggest_aws_commands_success (line 95) | async def test_suggest_aws_commands_success(mock_get_session): function test_suggest_aws_commands_empty_query (line 135) | async def test_suggest_aws_commands_empty_query(): function test_suggest_aws_commands_exception (line 144) | async def test_suggest_aws_commands_exception(mock_get_session): function test_call_aws_helper_passes_region_to_customization (line 167) | async def test_call_aws_helper_passes_region_to_customization( function test_call_aws_helper_passes_region_to_interpret (line 210) | async def test_call_aws_helper_passes_region_to_interpret( function test_call_aws_with_consent_and_accept (line 262) | async def test_call_aws_with_consent_and_accept( function test_call_aws_with_consent_and_reject (line 321) | async def test_call_aws_with_consent_and_reject( function test_call_aws_without_consent (line 364) | async def test_call_aws_without_consent( function test_call_aws_validation_error_awsmcp_error (line 414) | async def test_call_aws_validation_error_awsmcp_error(mock_translate_cli... function test_call_aws_validation_error_generic_exception (line 433) | async def test_call_aws_validation_error_generic_exception(mock_translat... function test_call_aws_no_credentials_error (line 450) | async def test_call_aws_no_credentials_error( function test_call_aws_execution_error_awsmcp_error (line 485) | async def test_call_aws_execution_error_awsmcp_error( function test_call_aws_execution_error_generic_exception (line 529) | async def test_call_aws_execution_error_generic_exception( function test_call_aws_non_aws_command (line 565) | async def test_call_aws_non_aws_command(): function test_when_operation_is_not_allowed (line 584) | async def test_when_operation_is_not_allowed( function test_call_aws_validation_failures (line 625) | async def test_call_aws_validation_failures(mock_translate_cli_to_ir, mo... function test_call_aws_failed_constraints (line 661) | async def test_call_aws_failed_constraints(mock_translate_cli_to_ir, moc... function test_call_aws_both_validation_failures_and_constraints (line 697) | async def test_call_aws_both_validation_failures_and_constraints( function test_call_aws_awscli_customization_success (line 737) | async def test_call_aws_awscli_customization_success( function test_call_aws_awscli_customization_error (line 778) | async def test_call_aws_awscli_customization_error( function test_main_missing_aws_region (line 819) | def test_main_missing_aws_region(): function test_main_success_with_read_only_mode (line 832) | def test_main_success_with_read_only_mode( function test_main_success_with_http_transport (line 859) | def test_main_success_with_http_transport( function test_get_execution_plan_is_available_when_env_var_is_set (line 882) | async def test_get_execution_plan_is_available_when_env_var_is_set(): function test_get_execution_plan_is_available_when_env_var_is_not_set (line 898) | async def test_get_execution_plan_is_available_when_env_var_is_not_set(): function test_get_execution_plan_script_not_found (line 914) | async def test_get_execution_plan_script_not_found(): function test_get_execution_plan_exception_handling (line 938) | async def test_get_execution_plan_exception_handling(): function test_call_aws_helper_with_credentials (line 964) | async def test_call_aws_helper_with_credentials(mock_translate, mock_val... function test_call_aws_helper_without_credentials (line 1002) | async def test_call_aws_helper_without_credentials(mock_translate, mock_... function test_call_aws_delegates_to_helper (line 1036) | async def test_call_aws_delegates_to_helper(mock_call_aws_helper): function test_call_aws_runs_multiple_commands (line 1058) | async def test_call_aws_runs_multiple_commands(mock_call_aws_helper): function test_call_aws_wildcard_region_expansion (line 1085) | async def test_call_aws_wildcard_region_expansion(mock_call_aws_helper, ... function test_call_aws_mixed_valid_invalid_commands (line 1110) | async def test_call_aws_mixed_valid_invalid_commands(): function test_call_aws_exceeds_max_batch_commands (line 1141) | async def test_call_aws_exceeds_max_batch_commands(): function test_call_aws_expand_regions_exception (line 1156) | async def test_call_aws_expand_regions_exception(): function test_call_aws_help_command_success (line 1199) | async def test_call_aws_help_command_success(service, operation): function test_call_aws_help_command_failure (line 1220) | async def test_call_aws_help_command_failure( function test_get_server_auth_non_streamable_http (line 1253) | def test_get_server_auth_non_streamable_http(): function test_get_server_auth_streamable_http_no_auth (line 1262) | def test_get_server_auth_streamable_http_no_auth(): function test_get_server_auth_auth_type_not_set (line 1271) | def test_get_server_auth_auth_type_not_set(): function test_get_server_auth_invalid_auth_type (line 1282) | def test_get_server_auth_invalid_auth_type(): function test_get_server_auth_oauth_missing_issuer (line 1295) | def test_get_server_auth_oauth_missing_issuer(): function test_get_server_auth_oauth_missing_jwks_uri (line 1308) | def test_get_server_auth_oauth_missing_jwks_uri(): function test_get_server_auth_oauth_missing_both (line 1321) | def test_get_server_auth_oauth_missing_both(): function test_get_server_auth_oauth_valid (line 1334) | def test_get_server_auth_oauth_valid(): function test_execute_single_command_success (line 1346) | async def test_execute_single_command_success(mock_call_aws_helper): function test_execute_single_command_error (line 1362) | async def test_execute_single_command_error(mock_call_aws_helper): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/decorators.py function set_write_allowed (line 25) | def set_write_allowed(allowed: bool) -> None: function is_write_allowed (line 35) | def is_write_allowed() -> bool: function write_operation (line 44) | def write_operation(func: Callable) -> Callable: FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/helpers.py function get_appsync_client (line 25) | def get_appsync_client(): function _sanitize_error_message (line 41) | def _sanitize_error_message(message: str) -> str: function handle_exceptions (line 55) | def handle_exceptions(func): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/operations/create_api.py function create_api_operation (line 22) | async def create_api_operation( FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/operations/create_api_cache.py function create_api_cache_operation (line 22) | async def create_api_cache_operation( FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/operations/create_api_key.py function create_api_key_operation (line 22) | async def create_api_key_operation( FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/operations/create_channel_namespace.py function create_channel_namespace_operation (line 22) | async def create_channel_namespace_operation( FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/operations/create_datasource.py function _validate_service_role_arn (line 24) | def _validate_service_role_arn(arn: str) -> bool: function _is_private_ip (line 30) | def _is_private_ip(ip_str: str) -> bool: function _validate_http_config (line 41) | def _validate_http_config(http_config: Dict) -> None: function create_datasource_operation (line 76) | async def create_datasource_operation( FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/operations/create_domain_name.py function create_domain_name_operation (line 22) | async def create_domain_name_operation( FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/operations/create_function.py function create_function_operation (line 22) | async def create_function_operation( FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/operations/create_graphql_api.py function create_graphql_api_operation (line 24) | async def create_graphql_api_operation( function _validate_inputs (line 106) | def _validate_inputs( FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/operations/create_resolver.py function create_resolver_operation (line 22) | async def create_resolver_operation( FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/operations/create_schema.py function create_schema_operation (line 26) | async def create_schema_operation( FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/server.py function main (line 63) | def main(): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/tools/create_api.py function register_create_api_tool (line 24) | def register_create_api_tool(mcp): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/tools/create_api_cache.py function register_create_api_cache_tool (line 24) | def register_create_api_cache_tool(mcp): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/tools/create_api_key.py function register_create_api_key_tool (line 24) | def register_create_api_key_tool(mcp): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/tools/create_channel_namespace.py function register_create_channel_namespace_tool (line 26) | def register_create_channel_namespace_tool(mcp): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/tools/create_datasource.py function register_create_datasource_tool (line 24) | def register_create_datasource_tool(mcp): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/tools/create_domain_name.py function register_create_domain_name_tool (line 26) | def register_create_domain_name_tool(mcp): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/tools/create_function.py function register_create_function_tool (line 24) | def register_create_function_tool(mcp): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/tools/create_graphql_api.py function register_create_graphql_api_tool (line 26) | def register_create_graphql_api_tool(mcp): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/tools/create_resolver.py function register_create_resolver_tool (line 24) | def register_create_resolver_tool(mcp): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/tools/create_schema.py function register_create_schema_tool (line 24) | def register_create_schema_tool(mcp): FILE: src/aws-appsync-mcp-server/awslabs/aws_appsync_mcp_server/validators.py function validate_graphql_schema (line 21) | def validate_graphql_schema(definition: str) -> List[str]: function get_dangerous_patterns (line 55) | def get_dangerous_patterns() -> List[str]: FILE: src/aws-appsync-mcp-server/tests/test_all_create_tools_write_protection.py class TestAllCreateToolsWriteProtection (line 22) | class TestAllCreateToolsWriteProtection: method setup_and_teardown (line 26) | def setup_and_teardown(self): method test_create_api_write_protection (line 34) | async def test_create_api_write_protection(self): method test_create_graphql_api_write_protection (line 54) | async def test_create_graphql_api_write_protection(self): method test_create_api_key_write_protection (line 73) | async def test_create_api_key_write_protection(self): method test_create_api_cache_write_protection (line 92) | async def test_create_api_cache_write_protection(self): method test_create_datasource_write_protection (line 111) | async def test_create_datasource_write_protection(self): method test_create_function_write_protection (line 130) | async def test_create_function_write_protection(self): method test_create_channel_namespace_write_protection (line 149) | async def test_create_channel_namespace_write_protection(self): method test_create_domain_name_write_protection (line 168) | async def test_create_domain_name_write_protection(self): method test_create_resolver_write_protection (line 187) | async def test_create_resolver_write_protection(self): method test_create_schema_write_protection (line 206) | async def test_create_schema_write_protection(self): method test_all_create_tools_work_when_write_enabled (line 225) | async def test_all_create_tools_work_when_write_enabled(self): method test_write_operation_decorator_exists (line 236) | def test_write_operation_decorator_exists(self): method test_decorator_state_management (line 242) | def test_decorator_state_management(self): FILE: src/aws-appsync-mcp-server/tests/test_create_api.py function test_create_api (line 25) | async def test_create_api(): function test_create_api_minimal (line 55) | async def test_create_api_minimal(): function test_create_api_with_event_config (line 78) | async def test_create_api_with_event_config(): function test_create_api_write_operation_blocked (line 103) | async def test_create_api_write_operation_blocked(): function test_create_api_write_operation_allowed (line 119) | async def test_create_api_write_operation_allowed(): function test_register_create_api_tool (line 132) | def test_register_create_api_tool(): function test_create_api_tool_execution (line 140) | async def test_create_api_tool_execution(): FILE: src/aws-appsync-mcp-server/tests/test_create_api_cache.py function test_create_api_cache_minimal (line 24) | async def test_create_api_cache_minimal(): function test_create_api_cache_with_encryption (line 55) | async def test_create_api_cache_with_encryption(): function test_create_api_cache_with_health_metrics (line 95) | async def test_create_api_cache_with_health_metrics(): function test_create_api_cache_full (line 132) | async def test_create_api_cache_full(): function test_create_api_cache_with_disabled_encryption (line 175) | async def test_create_api_cache_with_disabled_encryption(): function test_create_api_cache_with_disabled_health_metrics (line 215) | async def test_create_api_cache_with_disabled_health_metrics(): function test_create_api_cache_empty_response (line 252) | async def test_create_api_cache_empty_response(): function test_create_api_cache_large_instance (line 276) | async def test_create_api_cache_large_instance(): function test_register_create_api_cache_tool (line 318) | def test_register_create_api_cache_tool(): function test_create_api_cache_tool_execution (line 326) | async def test_create_api_cache_tool_execution(): FILE: src/aws-appsync-mcp-server/tests/test_create_api_key.py function test_create_api_key_minimal (line 24) | async def test_create_api_key_minimal(): function test_create_api_key_with_description (line 48) | async def test_create_api_key_with_description(): function test_create_api_key_with_expiration (line 74) | async def test_create_api_key_with_expiration(): function test_create_api_key_full (line 101) | async def test_create_api_key_full(): function test_create_api_key_empty_response (line 130) | async def test_create_api_key_empty_response(): function test_register_create_api_key_tool (line 146) | def test_register_create_api_key_tool(): function test_create_api_key_tool_execution (line 154) | async def test_create_api_key_tool_execution(): FILE: src/aws-appsync-mcp-server/tests/test_create_channel_namespace.py function test_create_channel_namespace_minimal (line 28) | async def test_create_channel_namespace_minimal(): function test_create_channel_namespace_with_handler_configs (line 57) | async def test_create_channel_namespace_with_handler_configs(): function test_create_channel_namespace_with_auth_modes (line 119) | async def test_create_channel_namespace_with_auth_modes(): function test_create_channel_namespace_full_configuration (line 162) | async def test_create_channel_namespace_full_configuration(): function test_create_channel_namespace_empty_response (line 233) | async def test_create_channel_namespace_empty_response(): function test_register_create_channel_namespace_tool (line 253) | def test_register_create_channel_namespace_tool(): function test_create_channel_namespace_tool_execution (line 261) | async def test_create_channel_namespace_tool_execution(): FILE: src/aws-appsync-mcp-server/tests/test_create_datasource.py class TestValidateServiceRoleArn (line 26) | class TestValidateServiceRoleArn: method test_valid_arn (line 29) | def test_valid_arn(self): method test_invalid_arn_format (line 33) | def test_invalid_arn_format(self): class TestValidateHttpConfig (line 39) | class TestValidateHttpConfig: method test_valid_https_endpoint (line 42) | def test_valid_https_endpoint(self): method test_localhost_blocked (line 47) | def test_localhost_blocked(self): method test_private_ips_blocked (line 60) | def test_private_ips_blocked(self): method test_link_local_blocked (line 72) | def test_link_local_blocked(self): method test_reserved_ips_blocked (line 82) | def test_reserved_ips_blocked(self): method test_ipv6_private_blocked (line 88) | def test_ipv6_private_blocked(self): method test_decimal_ip_encoding_blocked (line 99) | def test_decimal_ip_encoding_blocked(self): method test_hex_ip_encoding_blocked (line 105) | def test_hex_ip_encoding_blocked(self): method test_octal_ip_encoding_blocked (line 111) | def test_octal_ip_encoding_blocked(self): method test_http_protocol_rejected (line 122) | def test_http_protocol_rejected(self): method test_empty_endpoint (line 128) | def test_empty_endpoint(self): method test_invalid_url (line 134) | def test_invalid_url(self): class TestCreateDatasourceOperation (line 141) | class TestCreateDatasourceOperation: method test_create_datasource_success (line 146) | async def test_create_datasource_success(self, mock_client): method test_invalid_service_role_arn (line 165) | async def test_invalid_service_role_arn(self): method test_invalid_http_config (line 173) | async def test_invalid_http_config(self): method test_all_optional_params (line 182) | async def test_all_optional_params(self, mock_client): FILE: src/aws-appsync-mcp-server/tests/test_create_datasource_tool.py class TestCreateDatasourceTool (line 22) | class TestCreateDatasourceTool: method test_tool_execution (line 27) | async def test_tool_execution(self, mock_operation): FILE: src/aws-appsync-mcp-server/tests/test_create_domain_name.py function test_create_domain_name (line 28) | async def test_create_domain_name(): function test_create_domain_name_minimal (line 63) | async def test_create_domain_name_minimal(): function test_create_domain_name_with_tags_only (line 93) | async def test_create_domain_name_with_tags_only(): function test_create_domain_name_empty_response (line 125) | async def test_create_domain_name_empty_response(): function test_register_create_domain_name_tool (line 147) | def test_register_create_domain_name_tool(): function test_create_domain_name_tool_execution (line 155) | async def test_create_domain_name_tool_execution(): FILE: src/aws-appsync-mcp-server/tests/test_create_function.py function test_create_function_minimal (line 24) | async def test_create_function_minimal(): function test_create_function_with_description (line 52) | async def test_create_function_with_description(): function test_create_function_with_mapping_templates (line 87) | async def test_create_function_with_mapping_templates(): function test_create_function_with_function_version (line 128) | async def test_create_function_with_function_version(): function test_create_function_with_sync_config (line 163) | async def test_create_function_with_sync_config(): function test_create_function_with_max_batch_size (line 203) | async def test_create_function_with_max_batch_size(): function test_create_function_with_runtime (line 238) | async def test_create_function_with_runtime(): function test_create_function_with_code (line 275) | async def test_create_function_with_code(): function test_create_function_full_configuration (line 312) | async def test_create_function_full_configuration(): function test_create_function_empty_response (line 375) | async def test_create_function_empty_response(): function test_create_function_with_javascript_runtime (line 396) | async def test_create_function_with_javascript_runtime(): function test_register_create_function_tool (line 463) | def test_register_create_function_tool(): function test_create_function_tool_execution (line 471) | async def test_create_function_tool_execution(): FILE: src/aws-appsync-mcp-server/tests/test_create_graphql_api.py function test_create_graphql_api_minimal_non_api_key (line 29) | async def test_create_graphql_api_minimal_non_api_key(): function test_create_graphql_api_with_api_key_auth (line 64) | async def test_create_graphql_api_with_api_key_auth(): function test_create_graphql_api_api_key_auth_missing_api_id (line 123) | async def test_create_graphql_api_api_key_auth_missing_api_id(): function test_create_graphql_api_full (line 156) | async def test_create_graphql_api_full(): function test_create_graphql_api_with_openid_connect (line 238) | async def test_create_graphql_api_with_openid_connect(): function test_create_graphql_api_with_lambda_auth (line 273) | async def test_create_graphql_api_with_lambda_auth(): function test_create_graphql_api_merged_api (line 313) | async def test_create_graphql_api_merged_api(): function test_create_graphql_api_api_key_auth_with_additional_params (line 349) | async def test_create_graphql_api_api_key_auth_with_additional_params(): function test_create_graphql_api_api_key_creation_failure (line 413) | async def test_create_graphql_api_api_key_creation_failure(): function test_create_graphql_api_multiple_auth_types (line 444) | async def test_create_graphql_api_multiple_auth_types(): function test_create_graphql_api_api_key_empty_response (line 480) | async def test_create_graphql_api_api_key_empty_response(): function test_register_create_graphql_api_tool (line 518) | def test_register_create_graphql_api_tool(): function test_create_graphql_api_tool_execution (line 526) | async def test_create_graphql_api_tool_execution(): class TestValidateInputs (line 557) | class TestValidateInputs: method test_validate_inputs_valid_minimal (line 560) | def test_validate_inputs_valid_minimal(self): method test_validate_inputs_empty_name (line 565) | def test_validate_inputs_empty_name(self): method test_validate_inputs_whitespace_name (line 570) | def test_validate_inputs_whitespace_name(self): method test_validate_inputs_name_too_long (line 575) | def test_validate_inputs_name_too_long(self): method test_validate_inputs_invalid_auth_type (line 581) | def test_validate_inputs_invalid_auth_type(self): method test_validate_inputs_valid_auth_types (line 586) | def test_validate_inputs_valid_auth_types(self): method test_validate_inputs_invalid_visibility (line 598) | def test_validate_inputs_invalid_visibility(self): method test_validate_inputs_valid_visibility (line 603) | def test_validate_inputs_valid_visibility(self): method test_validate_inputs_invalid_api_type (line 608) | def test_validate_inputs_invalid_api_type(self): method test_validate_inputs_valid_api_type (line 613) | def test_validate_inputs_valid_api_type(self): method test_validate_inputs_invalid_introspection_config (line 618) | def test_validate_inputs_invalid_introspection_config(self): method test_validate_inputs_valid_introspection_config (line 625) | def test_validate_inputs_valid_introspection_config(self): method test_validate_inputs_query_depth_limit_negative (line 630) | def test_validate_inputs_query_depth_limit_negative(self): method test_validate_inputs_query_depth_limit_too_high (line 635) | def test_validate_inputs_query_depth_limit_too_high(self): method test_validate_inputs_valid_query_depth_limits (line 640) | def test_validate_inputs_valid_query_depth_limits(self): method test_validate_inputs_resolver_count_limit_negative (line 645) | def test_validate_inputs_resolver_count_limit_negative(self): method test_validate_inputs_resolver_count_limit_too_high (line 650) | def test_validate_inputs_resolver_count_limit_too_high(self): method test_validate_inputs_valid_resolver_count_limits (line 655) | def test_validate_inputs_valid_resolver_count_limits(self): method test_validate_inputs_invalid_arn_format (line 660) | def test_validate_inputs_invalid_arn_format(self): method test_validate_inputs_valid_arn_formats (line 672) | def test_validate_inputs_valid_arn_formats(self): method test_validate_inputs_all_valid_parameters (line 682) | def test_validate_inputs_all_valid_parameters(self): FILE: src/aws-appsync-mcp-server/tests/test_create_resolver.py function test_create_resolver_minimal (line 24) | async def test_create_resolver_minimal(): function test_create_resolver_unit_resolver (line 51) | async def test_create_resolver_unit_resolver(): function test_create_resolver_pipeline_resolver (line 94) | async def test_create_resolver_pipeline_resolver(): function test_create_resolver_with_sync_config (line 133) | async def test_create_resolver_with_sync_config(): function test_create_resolver_with_caching_config (line 175) | async def test_create_resolver_with_caching_config(): function test_create_resolver_with_runtime_and_code (line 214) | async def test_create_resolver_with_runtime_and_code(): function test_create_resolver_with_max_batch_size (line 257) | async def test_create_resolver_with_max_batch_size(): function test_create_resolver_with_metrics_config (line 294) | async def test_create_resolver_with_metrics_config(): function test_create_resolver_all_parameters (line 331) | async def test_create_resolver_all_parameters(): function test_create_resolver_empty_response (line 400) | async def test_create_resolver_empty_response(): function test_register_create_resolver_tool (line 420) | def test_register_create_resolver_tool(): function test_create_resolver_tool_execution (line 428) | async def test_create_resolver_tool_execution(): FILE: src/aws-appsync-mcp-server/tests/test_create_schema.py class TestCreateSchemaOperation (line 22) | class TestCreateSchemaOperation: method test_validation_failure_empty_schema (line 26) | async def test_validation_failure_empty_schema(self): method test_validation_failure_missing_query (line 34) | async def test_validation_failure_missing_query(self): method test_validation_failure_unbalanced_braces (line 43) | async def test_validation_failure_unbalanced_braces(self): method test_validation_failure_multiple_issues (line 50) | async def test_validation_failure_multiple_issues(self): method test_successful_schema_creation (line 58) | async def test_successful_schema_creation(self, mock_get_client): method test_failed_schema_creation (line 85) | async def test_failed_schema_creation(self, mock_get_client): method test_timeout_handling (line 105) | async def test_timeout_handling(self, mock_time, mock_get_client): method test_polling_until_success (line 127) | async def test_polling_until_success(self, mock_sleep, mock_get_client): method test_all_terminal_statuses (line 154) | async def test_all_terminal_statuses(self, mock_get_client): FILE: src/aws-appsync-mcp-server/tests/test_create_schema_tool.py class TestCreateSchemaTool (line 22) | class TestCreateSchemaTool: method test_tool_execution (line 27) | async def test_tool_execution(self, mock_operation): FILE: src/aws-appsync-mcp-server/tests/test_helpers.py class TestSanitizeErrorMessage (line 27) | class TestSanitizeErrorMessage: method test_sanitize_account_id (line 30) | def test_sanitize_account_id(self): method test_sanitize_arn (line 36) | def test_sanitize_arn(self): method test_sanitize_access_key (line 42) | def test_sanitize_access_key(self): method test_sanitize_multiple_patterns (line 48) | def test_sanitize_multiple_patterns(self): method test_no_sensitive_data (line 56) | def test_no_sensitive_data(self): class TestHandleExceptions (line 63) | class TestHandleExceptions: method test_client_error_handling (line 67) | async def test_client_error_handling(self): method test_generic_exception_handling (line 88) | async def test_generic_exception_handling(self): method test_successful_execution (line 99) | async def test_successful_execution(self): class TestGetAppSyncClient (line 110) | class TestGetAppSyncClient: method test_get_appsync_client_success (line 114) | def test_get_appsync_client_success(self, mock_session): method test_get_appsync_client_exception (line 123) | def test_get_appsync_client_exception(self, mock_session): FILE: src/aws-appsync-mcp-server/tests/test_server.py function test_main_with_allow_write (line 23) | def test_main_with_allow_write(): function test_main_without_allow_write (line 41) | def test_main_without_allow_write(): function test_main_registers_all_tools (line 59) | def test_main_registers_all_tools(): function test_main_with_help_flag (line 102) | def test_main_with_help_flag(): function teardown_function (line 108) | def teardown_function(): FILE: src/aws-appsync-mcp-server/tests/test_validators.py class TestValidateGraphQLSchema (line 23) | class TestValidateGraphQLSchema: method test_empty_schema (line 26) | def test_empty_schema(self): method test_whitespace_only_schema (line 31) | def test_whitespace_only_schema(self): method test_valid_schema (line 36) | def test_valid_schema(self): method test_missing_query_type (line 46) | def test_missing_query_type(self): method test_unbalanced_braces_more_open (line 57) | def test_unbalanced_braces_more_open(self): method test_unbalanced_braces_more_close (line 67) | def test_unbalanced_braces_more_close(self): method test_single_dangerous_pattern (line 77) | def test_single_dangerous_pattern(self): method test_multiple_dangerous_patterns (line 91) | def test_multiple_dangerous_patterns(self): method test_no_dangerous_patterns (line 112) | def test_no_dangerous_patterns(self): method test_case_insensitive_query_detection (line 130) | def test_case_insensitive_query_detection(self): method test_complex_valid_schema (line 140) | def test_complex_valid_schema(self): class TestGetDangerousPatterns (line 172) | class TestGetDangerousPatterns: method test_returns_list (line 175) | def test_returns_list(self): method test_contains_expected_patterns (line 180) | def test_contains_expected_patterns(self): method test_non_empty_list (line 187) | def test_non_empty_list(self): method test_contains_unix_patterns (line 192) | def test_contains_unix_patterns(self): method test_contains_windows_patterns (line 199) | def test_contains_windows_patterns(self): FILE: src/aws-appsync-mcp-server/tests/test_write_operation.py function test_write_operation_allowed (line 26) | async def test_write_operation_allowed(): function test_write_operation_not_allowed (line 40) | async def test_write_operation_not_allowed(): function test_write_operation_with_args_and_kwargs (line 56) | async def test_write_operation_with_args_and_kwargs(): function test_write_operation_preserves_function_metadata (line 70) | async def test_write_operation_preserves_function_metadata(): function test_write_allowed_state_management (line 82) | def test_write_allowed_state_management(): FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/client.py class BedrockModelImportClient (line 27) | class BedrockModelImportClient: method __init__ (line 30) | def __init__(self, region_name: str, profile_name: str | None = None): method _create_bedrock_client (line 43) | def _create_bedrock_client(self) -> Any: method _create_s3_client (line 55) | def _create_s3_client(self) -> Any: method create_model_import_job (line 67) | def create_model_import_job(self, create_args: Dict[str, Any]) -> Dict... method get_model_import_job (line 87) | def get_model_import_job(self, job_identifier: str) -> Dict[str, Any]: method list_model_import_jobs (line 130) | def list_model_import_jobs(self, **kwargs) -> Dict[str, Any]: method get_imported_model (line 149) | def get_imported_model(self, model_identifier: str) -> Dict[str, Any]: method list_imported_models (line 194) | def list_imported_models(self, **kwargs) -> Dict[str, Any]: method delete_imported_model (line 213) | def delete_imported_model(self, model_identifier: str) -> None: method _paginate_results (line 229) | def _paginate_results(self, paginator, **kwargs) -> list: method _find_model_in_s3 (line 265) | def _find_model_in_s3(self, bucket_name: str, model_name: str) -> Opti... method _find_job_by_approximate_match (line 344) | def _find_job_by_approximate_match(self, job_name: str) -> Optional[str]: method _find_model_by_approximate_match (line 419) | def _find_model_by_approximate_match(self, model_name: str) -> Optiona... FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/llm_context.py function build_list_model_import_jobs_context (line 27) | def build_list_model_import_jobs_context(response: ListModelImportJobsRe... function build_list_imported_models_context (line 59) | def build_list_imported_models_context(response: ListImportedModelsRespo... function build_model_import_job_details_context (line 90) | def build_model_import_job_details_context(job: ModelImportJob) -> str: function build_imported_model_details_context (line 144) | def build_imported_model_details_context(model: ImportedModel) -> str: function build_bedrock_knowledge (line 167) | def build_bedrock_knowledge() -> Dict[str, str]: function build_model_import_knowledge (line 185) | def build_model_import_knowledge() -> Dict[str, str]: function build_model_guidance (line 203) | def build_model_guidance(model: ImportedModel) -> Dict[str, str]: function dict_to_markdown (line 229) | def dict_to_markdown(data: Dict[str, Any], level: int = 0) -> str: FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/models.py class S3DataSource (line 23) | class S3DataSource(BaseModel): class ModelDataSource (line 29) | class ModelDataSource(BaseModel): class VpcConfig (line 35) | class VpcConfig(BaseModel): class Tag (line 44) | class Tag(BaseModel): class CreateModelImportJobRequest (line 51) | class CreateModelImportJobRequest(BaseModel): class JobStatus (line 93) | class JobStatus(str, Enum): class ModelImportJobSummary (line 101) | class ModelImportJobSummary(BaseModel): class ModelImportJob (line 114) | class ModelImportJob(BaseModel): class CustomModelUnits (line 132) | class CustomModelUnits(BaseModel): class ImportedModel (line 139) | class ImportedModel(BaseModel): class ListModelImportJobsRequest (line 154) | class ListModelImportJobsRequest(BaseModel): class ListModelImportJobsResponse (line 179) | class ListModelImportJobsResponse(BaseModel): class ModelSummary (line 188) | class ModelSummary(BaseModel): class ListImportedModelsRequest (line 198) | class ListImportedModelsRequest(BaseModel): class ListImportedModelsResponse (line 218) | class ListImportedModelsResponse(BaseModel): FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/prompts.py class Prompts (line 20) | class Prompts: method __init__ (line 27) | def __init__(self, mcp: FastMCP) -> None: method create_model_import_job (line 40) | def create_model_import_job(self): method list_model_import_jobs (line 51) | def list_model_import_jobs(self): method list_imported_models (line 62) | def list_imported_models(self): method get_model_import_job (line 73) | def get_model_import_job(self): method get_imported_model (line 84) | def get_imported_model(self): method delete_imported_model (line 95) | def delete_imported_model(self): FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/server.py function main (line 80) | def main() -> None: FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/services/imported_model_service.py class ImportedModelService (line 32) | class ImportedModelService: method __init__ (line 35) | def __init__(self, client: BedrockModelImportClient, config: AppConfig): method list_imported_models (line 46) | async def list_imported_models( method _prepare_list_models_kwargs (line 74) | def _prepare_list_models_kwargs( method get_imported_model (line 104) | async def get_imported_model(self, model_identifier: str) -> ImportedM... method _create_imported_model_from_response (line 126) | def _create_imported_model_from_response(self, response: Dict[str, Any... method delete_imported_model (line 148) | async def delete_imported_model(self, model_identifier: str) -> None: method _create_model_summary (line 172) | def _create_model_summary(self, model: Dict[str, Any]) -> ModelSummary: FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/services/model_import_service.py class ModelImportService (line 40) | class ModelImportService: method __init__ (line 43) | def __init__(self, client: BedrockModelImportClient, config: AppConfig): method create_model_import_job (line 54) | async def create_model_import_job( method _prepare_create_job_args (line 135) | def _prepare_create_job_args(self, request: CreateModelImportJobReques... method list_model_import_jobs (line 171) | async def list_model_import_jobs( method _prepare_list_jobs_kwargs (line 201) | def _prepare_list_jobs_kwargs( method get_model_import_job (line 234) | async def get_model_import_job(self, job_identifier: str) -> ModelImpo... method _create_model_import_job_from_response (line 256) | def _create_model_import_job_from_response(self, job_info: Dict[str, A... method _create_job_summary (line 281) | def _create_job_summary(self, job: Dict[str, Any]) -> ModelImportJobSu... method _append_datetime_suffix (line 301) | def _append_datetime_suffix(self, name: str) -> str: FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/tools/create_model_import_job.py class CreateModelImportJob (line 32) | class CreateModelImportJob: method __init__ (line 48) | def __init__(self, mcp: FastMCP, model_import_service: ModelImportServ... method create_model_import_job (line 58) | async def create_model_import_job( method _format_response (line 118) | def _format_response(self, job: ModelImportJob) -> str: FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/tools/delete_imported_model.py class DeleteImportedModel (line 25) | class DeleteImportedModel: method __init__ (line 40) | def __init__(self, mcp: FastMCP, imported_model_service: ImportedModel... method delete_imported_model (line 50) | async def delete_imported_model(self, ctx: Optional[Context], model_id... method _format_response (line 98) | def _format_response(self, model_identifier: str) -> str: FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/tools/get_imported_model.py class GetImportedModel (line 30) | class GetImportedModel: method __init__ (line 46) | def __init__(self, mcp: FastMCP, imported_model_service: ImportedModel... method get_imported_model (line 56) | async def get_imported_model( method _format_response (line 121) | def _format_response(self, model: ImportedModel) -> str: FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/tools/get_model_import_job.py class GetModelImportJob (line 30) | class GetModelImportJob: method __init__ (line 47) | def __init__(self, mcp: FastMCP, model_import_service: ModelImportServ... method get_model_import_job (line 57) | async def get_model_import_job( method _format_response (line 125) | def _format_response(self, job: ModelImportJob) -> str: FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/tools/list_imported_models.py class ListImportedModels (line 32) | class ListImportedModels: method __init__ (line 50) | def __init__(self, mcp: FastMCP, imported_model_service: ImportedModel... method list_imported_models (line 60) | async def list_imported_models( method _format_response (line 122) | def _format_response(self, response: ListImportedModelsResponse) -> str: FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/tools/list_model_import_jobs.py class ListModelImportJobs (line 33) | class ListModelImportJobs: method __init__ (line 50) | def __init__(self, mcp: FastMCP, model_import_service: ModelImportServ... method list_model_import_jobs (line 60) | async def list_model_import_jobs( method _format_response (line 125) | def _format_response(self, response: ListModelImportJobsResponse) -> str: FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/utils/aws.py function get_aws_client (line 28) | def get_aws_client( function get_iam_role_arn_from_sts (line 59) | def get_iam_role_arn_from_sts() -> str: FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/utils/config.py class AWSConfig (line 29) | class AWSConfig: method from_env (line 38) | def from_env(cls): class LoggingConfig (line 49) | class LoggingConfig: method from_env (line 56) | def from_env(cls): class AppConfig (line 65) | class AppConfig: method from_env (line 73) | def from_env(cls, allow_write: bool = False): FILE: src/aws-bedrock-custom-model-import-mcp-server/awslabs/aws_bedrock_custom_model_import_mcp_server/utils/matching.py function normalize_name (line 24) | def normalize_name(name: str) -> str: function approximate_match (line 45) | def approximate_match( FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/services/test_imported_model_service.py class TestImportedModelService (line 30) | class TestImportedModelService: method mock_client (line 34) | def mock_client(self): method mock_config (line 44) | def mock_config(self) -> AppConfig: method service (line 55) | def service(self, mock_client, mock_config): method test_initialization (line 59) | def test_initialization(self, mock_client, mock_config): method test_list_imported_models_with_filters (line 65) | async def test_list_imported_models_with_filters(self, service): method test_list_imported_models_without_filters (line 116) | async def test_list_imported_models_without_filters(self, service): method test_get_imported_model_success (line 146) | async def test_get_imported_model_success(self, service): method test_get_imported_model_other_client_error (line 183) | async def test_get_imported_model_other_client_error(self, service): method test_delete_imported_model (line 204) | async def test_delete_imported_model(self, service): method test_delete_imported_model_failure (line 216) | async def test_delete_imported_model_failure(self, service): FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/services/test_model_import_service.py class TestModelImportService (line 36) | class TestModelImportService: method mock_client (line 40) | def mock_client(self): method mock_config (line 50) | def mock_config(self) -> AppConfig: method service (line 61) | def service(self, mock_client, mock_config): method test_initialization (line 65) | def test_initialization(self, mock_client, mock_config): method test_create_model_import_job_with_s3_bucket_env (line 71) | async def test_create_model_import_job_with_s3_bucket_env(self, servic... method test_create_model_import_job_with_sts_role (line 125) | async def test_create_model_import_job_with_sts_role( method test_create_model_import_job_with_all_parameters (line 177) | async def test_create_model_import_job_with_all_parameters(self, servi... method test_create_model_import_job_missing_model_data_source (line 246) | async def test_create_model_import_job_missing_model_data_source(self,... method test_create_model_import_job_prepare_args_assertion (line 273) | def test_create_model_import_job_prepare_args_assertion(self, service): method test_list_model_import_jobs_with_filters (line 296) | async def test_list_model_import_jobs_with_filters(self, service): method test_list_model_import_jobs_without_filters (line 353) | async def test_list_model_import_jobs_without_filters(self, service): method test_get_model_import_job_success (line 386) | async def test_get_model_import_job_success(self, service): method test_get_model_import_job_other_client_error (line 419) | async def test_get_model_import_job_other_client_error(self, service): method test_append_datetime_suffix (line 439) | def test_append_datetime_suffix(self, service): FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/test_client.py class TestBedrockModelImportClient (line 25) | class TestBedrockModelImportClient: method mock_aws_client (line 29) | def mock_aws_client(self): method client (line 37) | def client(self, mock_aws_client): method test_initialization (line 50) | def test_initialization(self, mock_aws_client): method test_create_model_import_job_success (line 68) | async def test_create_model_import_job_success(self, client: BedrockMo... method test_create_model_import_job_failure (line 89) | async def test_create_model_import_job_failure(self, client: BedrockMo... method test_get_model_import_job_success (line 106) | async def test_get_model_import_job_success(self, client: BedrockModel... method test_get_model_import_job_with_approximate_match (line 124) | async def test_get_model_import_job_with_approximate_match( method test_get_model_import_job_approximate_match_failure (line 164) | async def test_get_model_import_job_approximate_match_failure( method test_list_model_import_jobs (line 195) | async def test_list_model_import_jobs(self, client: BedrockModelImport... method test_get_imported_model_success (line 216) | async def test_get_imported_model_success(self, client: BedrockModelIm... method test_get_imported_model_with_approximate_match (line 235) | async def test_get_imported_model_with_approximate_match( method test_list_imported_models (line 274) | async def test_list_imported_models(self, client: BedrockModelImportCl... method test_delete_imported_model (line 293) | async def test_delete_imported_model(self, client: BedrockModelImportC... method test_delete_imported_model_failure (line 307) | async def test_delete_imported_model_failure(self, client: BedrockMode... method test_find_model_in_s3 (line 326) | async def test_find_model_in_s3(self, client: BedrockModelImportClient): method test_find_job_by_approximate_match (line 416) | async def test_find_job_by_approximate_match(self, client: BedrockMode... method test_find_model_by_approximate_match (line 497) | async def test_find_model_by_approximate_match(self, client: BedrockMo... method test_paginate_results (line 578) | async def test_paginate_results(self, client: BedrockModelImportClient): FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/test_init.py class TestInit (line 21) | class TestInit: method test_version (line 24) | def test_version(self): method test_module_reload (line 43) | def test_module_reload(self): FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/test_llm_context.py class TestLlmContext (line 42) | class TestLlmContext: method model_import_job (line 46) | def model_import_job(self): method imported_model (line 67) | def imported_model(self): method list_model_import_jobs_response (line 88) | def list_model_import_jobs_response(self): method list_imported_models_response (line 106) | def list_imported_models_response(self): method test_build_bedrock_knowledge (line 120) | def test_build_bedrock_knowledge(self): method test_build_model_import_knowledge (line 131) | def test_build_model_import_knowledge(self): method test_build_list_model_import_jobs_context (line 143) | def test_build_list_model_import_jobs_context(self, list_model_import_... method test_build_list_imported_models_context (line 157) | def test_build_list_imported_models_context(self, list_imported_models... method test_build_model_import_job_details_context (line 171) | def test_build_model_import_job_details_context(self, model_import_job): method test_build_model_import_job_details_context_completed (line 185) | def test_build_model_import_job_details_context_completed(self, model_... method test_build_model_import_job_details_context_failed (line 200) | def test_build_model_import_job_details_context_failed(self, model_imp... method test_build_imported_model_details_context (line 216) | def test_build_imported_model_details_context(self, imported_model): method test_dict_to_markdown (line 232) | def test_dict_to_markdown(self): FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/test_prompts.py class TestPrompts (line 22) | class TestPrompts: method mock_mcp (line 26) | def mock_mcp(self): method prompts (line 32) | def prompts(self, mock_mcp): method test_initialization (line 36) | def test_initialization(self, mock_mcp): method test_create_model_import_job (line 43) | def test_create_model_import_job(self, prompts): method test_list_model_import_jobs (line 48) | def test_list_model_import_jobs(self, prompts): method test_list_imported_models (line 53) | def test_list_imported_models(self, prompts): method test_get_model_import_job (line 58) | def test_get_model_import_job(self, prompts): method test_get_imported_model (line 63) | def test_get_imported_model(self, prompts): method test_delete_imported_model (line 68) | def test_delete_imported_model(self, prompts): FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/test_server.py class TestServer (line 22) | class TestServer: method mock_fastmcp (line 26) | def mock_fastmcp(self): method mock_bedrock_client (line 37) | def mock_bedrock_client(self): method mock_config (line 46) | def mock_config(self): method test_initialization (line 60) | def test_initialization(self, mock_fastmcp, mock_bedrock_client, mock_... method test_module_execution (line 133) | def test_module_execution(self): FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/tools/test_create_model_import_job.py class TestCreateModelImportJob (line 36) | class TestCreateModelImportJob: method mock_mcp (line 40) | def mock_mcp(self): method mock_service (line 47) | def mock_service(self): method tool (line 54) | def tool(self, mock_mcp, mock_service): method mock_context (line 59) | def mock_context(self): method sample_job (line 67) | def sample_job(self): method test_initialization (line 87) | def test_initialization(self, mock_mcp, mock_service): method test_create_model_import_job_with_context (line 94) | async def test_create_model_import_job_with_context(self, tool, mock_c... method test_create_model_import_job_without_context (line 124) | async def test_create_model_import_job_without_context(self, tool, sam... method test_create_model_import_job_with_vpc_and_kms (line 153) | async def test_create_model_import_job_with_vpc_and_kms(self, tool, mo... method test_create_model_import_job_completed (line 204) | async def test_create_model_import_job_completed(self, tool, mock_cont... method test_create_model_import_job_error (line 249) | async def test_create_model_import_job_error(self, tool, mock_context): method test_create_model_import_job_allow_write_enabled (line 277) | async def test_create_model_import_job_allow_write_enabled( method test_create_model_import_job_allow_write_disabled (line 331) | async def test_create_model_import_job_allow_write_disabled( FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/tools/test_delete_imported_model.py class TestDeleteImportedModel (line 28) | class TestDeleteImportedModel: method mock_mcp (line 32) | def mock_mcp(self): method mock_service (line 39) | def mock_service(self): method tool (line 46) | def tool(self, mock_mcp, mock_service): method mock_context (line 51) | def mock_context(self): method test_initialization (line 58) | def test_initialization(self, mock_mcp, mock_service): method test_delete_imported_model_with_context (line 65) | async def test_delete_imported_model_with_context(self, tool, mock_con... method test_delete_imported_model_without_context (line 80) | async def test_delete_imported_model_without_context(self, tool): method test_delete_imported_model_not_found (line 94) | async def test_delete_imported_model_not_found(self, tool, mock_context): method test_delete_imported_model_access_denied (line 112) | async def test_delete_imported_model_access_denied(self, tool, mock_co... method test_delete_imported_model_other_error (line 130) | async def test_delete_imported_model_other_error(self, tool, mock_cont... method test_delete_imported_model_allow_write_enabled (line 146) | async def test_delete_imported_model_allow_write_enabled( method test_delete_imported_model_allow_write_disabled (line 168) | async def test_delete_imported_model_allow_write_disabled( FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/tools/test_get_imported_model.py class TestGetImportedModel (line 33) | class TestGetImportedModel: method mock_mcp (line 37) | def mock_mcp(self): method mock_service (line 44) | def mock_service(self): method tool (line 51) | def tool(self, mock_mcp, mock_service): method mock_context (line 56) | def mock_context(self): method sample_model (line 64) | def sample_model(self): method test_initialization (line 81) | def test_initialization(self, mock_mcp, mock_service): method test_get_imported_model_with_context (line 88) | async def test_get_imported_model_with_context(self, tool, mock_contex... method test_get_imported_model_without_context (line 109) | async def test_get_imported_model_without_context(self, tool, sample_m... method test_get_imported_model_with_kms_and_units (line 129) | async def test_get_imported_model_with_kms_and_units(self, tool, mock_... method test_get_imported_model_not_found (line 162) | async def test_get_imported_model_not_found(self, tool, mock_context): method test_get_imported_model_access_denied (line 180) | async def test_get_imported_model_access_denied(self, tool, mock_conte... method test_get_imported_model_other_error (line 198) | async def test_get_imported_model_other_error(self, tool, mock_context): FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/tools/test_get_model_import_job.py class TestGetModelImportJob (line 34) | class TestGetModelImportJob: method mock_mcp (line 38) | def mock_mcp(self): method mock_service (line 45) | def mock_service(self): method tool (line 52) | def tool(self, mock_mcp, mock_service): method mock_context (line 57) | def mock_context(self): method sample_job (line 65) | def sample_job(self): method test_initialization (line 85) | def test_initialization(self, mock_mcp, mock_service): method test_get_model_import_job_with_context (line 92) | async def test_get_model_import_job_with_context(self, tool, mock_cont... method test_get_model_import_job_without_context (line 110) | async def test_get_model_import_job_without_context(self, tool, sample... method test_get_model_import_job_completed (line 127) | async def test_get_model_import_job_completed(self, tool, mock_context): method test_get_model_import_job_failed (line 158) | async def test_get_model_import_job_failed(self, tool, mock_context): method test_get_model_import_job_with_vpc_and_kms (line 190) | async def test_get_model_import_job_with_vpc_and_kms(self, tool, mock_... method test_get_model_import_job_not_found (line 226) | async def test_get_model_import_job_not_found(self, tool, mock_context): method test_get_model_import_job_access_denied (line 244) | async def test_get_model_import_job_access_denied(self, tool, mock_con... method test_get_model_import_job_other_error (line 262) | async def test_get_model_import_job_other_error(self, tool, mock_conte... FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/tools/test_list_imported_models.py class TestListImportedModels (line 32) | class TestListImportedModels: method mock_mcp (line 36) | def mock_mcp(self): method mock_service (line 43) | def mock_service(self): method tool (line 50) | def tool(self, mock_mcp, mock_service): method mock_context (line 55) | def mock_context(self): method sample_response (line 63) | def sample_response(self): method test_initialization (line 85) | def test_initialization(self, mock_mcp, mock_service): method test_list_imported_models_with_context (line 92) | async def test_list_imported_models_with_context(self, tool, mock_cont... method test_list_imported_models_without_context (line 113) | async def test_list_imported_models_without_context(self, tool, sample... method test_list_imported_models_with_filters (line 129) | async def test_list_imported_models_with_filters(self, tool, mock_cont... method test_list_imported_models_no_results (line 152) | async def test_list_imported_models_no_results(self, tool, mock_context): method test_list_imported_models_access_denied (line 167) | async def test_list_imported_models_access_denied(self, tool, mock_con... method test_list_imported_models_other_error (line 184) | async def test_list_imported_models_other_error(self, tool, mock_conte... FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/tools/test_list_model_import_jobs.py class TestListModelImportJobs (line 33) | class TestListModelImportJobs: method mock_mcp (line 37) | def mock_mcp(self): method mock_service (line 44) | def mock_service(self): method tool (line 51) | def tool(self, mock_mcp, mock_service): method mock_context (line 56) | def mock_context(self): method sample_response (line 64) | def sample_response(self): method test_initialization (line 102) | def test_initialization(self, mock_mcp, mock_service): method test_list_model_import_jobs_with_context (line 109) | async def test_list_model_import_jobs_with_context(self, tool, mock_co... method test_list_model_import_jobs_without_context (line 127) | async def test_list_model_import_jobs_without_context(self, tool, samp... method test_list_model_import_jobs_with_filters (line 144) | async def test_list_model_import_jobs_with_filters(self, tool, mock_co... method test_list_model_import_jobs_no_results (line 167) | async def test_list_model_import_jobs_no_results(self, tool, mock_cont... method test_list_model_import_jobs_access_denied (line 182) | async def test_list_model_import_jobs_access_denied(self, tool, mock_c... method test_list_model_import_jobs_other_error (line 199) | async def test_list_model_import_jobs_other_error(self, tool, mock_con... FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/utils/test_aws.py class TestAWSClient (line 26) | class TestAWSClient: method test_get_aws_client_with_region (line 30) | def test_get_aws_client_with_region(self, mock_boto3_session): method test_get_aws_client_with_default_region (line 47) | def test_get_aws_client_with_default_region(self, mock_boto3_session): method test_get_aws_client_expired_token (line 64) | def test_get_aws_client_expired_token(self, mock_boto3_session): method test_get_aws_client_no_credentials (line 79) | def test_get_aws_client_no_credentials(self, mock_boto3_session): method test_get_aws_client_other_error (line 94) | def test_get_aws_client_other_error(self, mock_boto3_session): method test_get_iam_role_arn_from_sts_success (line 109) | def test_get_iam_role_arn_from_sts_success(self, mock_boto3_session): method test_get_iam_role_arn_from_sts_invalid_arn_format (line 131) | def test_get_iam_role_arn_from_sts_invalid_arn_format(self, mock_boto3... method test_get_iam_role_arn_from_sts_malformed_arn (line 151) | def test_get_iam_role_arn_from_sts_malformed_arn(self, mock_boto3_sess... method test_get_iam_role_arn_from_sts_api_error (line 171) | def test_get_iam_role_arn_from_sts_api_error(self, mock_boto3_session): FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/utils/test_config.py class TestAWSConfig (line 32) | class TestAWSConfig: method test_from_env_with_defaults (line 35) | def test_from_env_with_defaults(self): method test_from_env_with_custom_values (line 46) | def test_from_env_with_custom_values(self): class TestLoggingConfig (line 85) | class TestLoggingConfig: method test_from_env_with_defaults (line 88) | def test_from_env_with_defaults(self): method test_from_env_with_custom_values (line 96) | def test_from_env_with_custom_values(self): class TestAppConfig (line 122) | class TestAppConfig: method test_from_env_with_defaults (line 125) | def test_from_env_with_defaults(self): method test_from_env_with_custom_values (line 142) | def test_from_env_with_custom_values(self): FILE: src/aws-bedrock-custom-model-import-mcp-server/tests/utils/test_matching.py class TestApproximateMatch (line 20) | class TestApproximateMatch: method test_exact_match (line 23) | def test_exact_match(self): method test_approximate_match (line 34) | def test_approximate_match(self): method test_case_insensitive_match (line 46) | def test_case_insensitive_match(self): method test_token_order_match (line 57) | def test_token_order_match(self): method test_partial_match (line 68) | def test_partial_match(self): method test_threshold_filtering (line 79) | def test_threshold_filtering(self): method test_empty_candidates (line 100) | def test_empty_candidates(self): method test_no_matches_above_threshold (line 109) | def test_no_matches_above_threshold(self): method test_multiple_equal_matches (line 118) | def test_multiple_equal_matches(self): method test_special_characters (line 130) | def test_special_characters(self): method test_whitespace_handling (line 142) | def test_whitespace_handling(self): FILE: src/aws-bedrock-data-automation-mcp-server/awslabs/aws_bedrock_data_automation_mcp_server/helpers.py function get_region (line 34) | def get_region() -> str: function get_account_id (line 39) | def get_account_id() -> str: function get_bucket_name (line 51) | def get_bucket_name() -> Optional[str]: function get_base_dir (line 59) | def get_base_dir() -> Optional[str]: function get_aws_session (line 68) | def get_aws_session(region_name=None): function get_profile_arn (line 81) | def get_profile_arn() -> Optional[str]: function get_bedrock_data_automation_client (line 88) | def get_bedrock_data_automation_client(): function get_bedrock_data_automation_runtime_client (line 94) | def get_bedrock_data_automation_runtime_client(): function get_s3_client (line 102) | def get_s3_client(): function list_projects (line 108) | async def list_projects() -> list: function get_project (line 115) | async def get_project(project_arn: str) -> Dict[str, Any]: function sanitize_path (line 129) | def sanitize_path(file_path: str, base_dir: Optional[str] = None) -> Path: function upload_to_s3 (line 162) | async def upload_to_s3(asset_path: str) -> str: function get_bucket_and_key_from_s3_uri (line 192) | def get_bucket_and_key_from_s3_uri(s3_uri: str) -> Tuple[str, str]: function download_from_s3 (line 207) | async def download_from_s3(s3_uri: str) -> Optional[Dict[str, Any]]: function invoke_data_automation_and_get_results (line 227) | async def invoke_data_automation_and_get_results( FILE: src/aws-bedrock-data-automation-mcp-server/awslabs/aws_bedrock_data_automation_mcp_server/server.py function get_projects_tool (line 60) | async def get_projects_tool() -> dict: function get_project_details_tool (line 98) | async def get_project_details_tool( function analyze_asset_tool (line 141) | async def analyze_asset_tool( function main (line 201) | def main(): FILE: src/aws-bedrock-data-automation-mcp-server/tests/test_helpers.py function test_get_region (line 29) | def test_get_region(): function test_get_account_id (line 38) | def test_get_account_id(): function test_get_account_id_exception (line 57) | def test_get_account_id_exception(): function test_get_bucket_name (line 74) | def test_get_bucket_name(): function test_get_base_dir (line 84) | def test_get_base_dir(): function test_get_profile_arn (line 93) | def test_get_profile_arn(): function test_get_aws_session (line 116) | def test_get_aws_session(): function test_get_bedrock_data_automation_client (line 138) | def test_get_bedrock_data_automation_client(): function test_get_bedrock_data_automation_runtime_client (line 155) | def test_get_bedrock_data_automation_runtime_client(): function test_get_s3_client (line 172) | def test_get_s3_client(): function test_list_projects (line 188) | async def test_list_projects(): function test_get_project (line 205) | async def test_get_project(): function test_upload_to_s3 (line 220) | async def test_upload_to_s3(): function test_upload_to_s3_no_bucket (line 246) | async def test_upload_to_s3_no_bucket(): function test_upload_to_s3_file_not_exists (line 254) | async def test_upload_to_s3_file_not_exists(): function test_upload_to_s3_uses_sanitized_path_not_raw_input (line 268) | async def test_upload_to_s3_uses_sanitized_path_not_raw_input(): function test_get_bucket_and_key_from_s3_uri (line 314) | def test_get_bucket_and_key_from_s3_uri(): function test_sanitize_path (line 321) | def test_sanitize_path(): function test_sanitize_path_invalid_path (line 341) | def test_sanitize_path_invalid_path(): function test_download_from_s3 (line 350) | async def test_download_from_s3(): function test_download_from_s3_error (line 369) | async def test_download_from_s3_error(): function test_invoke_data_automation_and_get_results (line 383) | async def test_invoke_data_automation_and_get_results(): function test_invoke_data_automation_and_get_results_default_project (line 462) | async def test_invoke_data_automation_and_get_results_default_project(): function test_invoke_data_automation_and_get_results_no_profile_arn (line 536) | async def test_invoke_data_automation_and_get_results_no_profile_arn(): function test_invoke_data_automation_and_get_results_no_bucket (line 555) | async def test_invoke_data_automation_and_get_results_no_bucket(): function test_invoke_data_automation_and_get_results_job_failed (line 563) | async def test_invoke_data_automation_and_get_results_job_failed(): function test_invoke_data_automation_and_get_results_no_output_uri (line 591) | async def test_invoke_data_automation_and_get_results_no_output_uri(): function test_invoke_data_automation_and_get_results_no_job_metadata (line 622) | async def test_invoke_data_automation_and_get_results_no_job_metadata(): function test_invoke_data_automation_and_get_results_invalid_metadata (line 661) | async def test_invoke_data_automation_and_get_results_invalid_metadata(): function test_invoke_data_automation_and_get_results_no_output_paths (line 700) | async def test_invoke_data_automation_and_get_results_no_output_paths(): function test_invoke_data_automation_and_get_results_only_standard_output (line 752) | async def test_invoke_data_automation_and_get_results_only_standard_outp... function test_invoke_data_automation_and_get_results_only_custom_output (line 808) | async def test_invoke_data_automation_and_get_results_only_custom_output(): FILE: src/aws-bedrock-data-automation-mcp-server/tests/test_init.py class TestInit (line 17) | class TestInit: method test_version (line 20) | def test_version(self): method test_module_reload (line 39) | def test_module_reload(self): FILE: src/aws-bedrock-data-automation-mcp-server/tests/test_main.py class TestMain (line 17) | class TestMain: method test_main_default (line 22) | def test_main_default(self, mock_run): method test_module_execution (line 31) | def test_module_execution(self): FILE: src/aws-bedrock-data-automation-mcp-server/tests/test_server.py function test_get_projects_tool (line 15) | async def test_get_projects_tool(): function test_get_project_details_tool (line 28) | async def test_get_project_details_tool(): function test_analyze_asset_tool (line 45) | async def test_analyze_asset_tool(): function test_analyze_asset_tool_with_project_arn (line 58) | async def test_analyze_asset_tool_with_project_arn(): function test_get_projects_tool_error (line 77) | async def test_get_projects_tool_error(): function test_get_project_details_tool_error (line 88) | async def test_get_project_details_tool_error(): function test_analyze_asset_tool_error (line 99) | async def test_analyze_asset_tool_error(): function test_main_emits_deprecation_warning (line 109) | def test_main_emits_deprecation_warning(): FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/core/glue_data_catalog/data_catalog_database_manager.py class DataCatalogDatabaseManager (line 41) | class DataCatalogDatabaseManager: method __init__ (line 49) | def __init__(self, allow_write: bool = False, allow_sensitive_data_acc... method create_database (line 60) | async def create_database( method delete_database (line 146) | async def delete_database( method get_database (line 238) | async def get_database( method list_databases (line 299) | async def list_databases( method update_database (line 385) | async def update_database( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/core/glue_data_catalog/data_catalog_handler.py class DataCatalogManager (line 53) | class DataCatalogManager: method __init__ (line 61) | def __init__(self, allow_write: bool = False, allow_sensitive_data_acc... method create_connection (line 72) | async def create_connection( method delete_connection (line 146) | async def delete_connection( method get_connection (line 235) | async def get_connection( method list_connections (line 326) | async def list_connections( method update_connection (line 423) | async def update_connection( method create_partition (line 518) | async def create_partition( method delete_partition (line 597) | async def delete_partition( method get_partition (line 708) | async def get_partition( method list_partitions (line 818) | async def list_partitions( method update_partition (line 933) | async def update_partition( method create_catalog (line 1056) | async def create_catalog( method delete_catalog (line 1130) | async def delete_catalog(self, ctx: Context, catalog_id: str) -> CallT... method get_catalog (line 1211) | async def get_catalog(self, ctx: Context, catalog_id: str) -> CallTool... method import_catalog_to_glue (line 1288) | async def import_catalog_to_glue( method list_catalogs (line 1345) | async def list_catalogs( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/core/glue_data_catalog/data_catalog_table_manager.py class DataCatalogTableManager (line 43) | class DataCatalogTableManager: method __init__ (line 51) | def __init__(self, allow_write: bool = False, allow_sensitive_data_acc... method create_table (line 62) | async def create_table( method delete_table (line 156) | async def delete_table( method get_table (line 257) | async def get_table( method list_tables (line 355) | async def list_tables( method update_table (line 471) | async def update_table( method search_tables (line 601) | async def search_tables( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/athena/athena_data_catalog_handler.py class AthenaDataCatalogHandler (line 39) | class AthenaDataCatalogHandler: method __init__ (line 42) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method manage_aws_athena_data_catalogs (line 61) | async def manage_aws_athena_data_catalogs( method manage_aws_athena_databases_and_tables (line 390) | async def manage_aws_athena_databases_and_tables( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/athena/athena_query_handler.py class AthenaQueryHandler (line 44) | class AthenaQueryHandler: method __init__ (line 47) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method manage_aws_athena_queries (line 64) | async def manage_aws_athena_queries( method manage_aws_athena_named_queries (line 457) | async def manage_aws_athena_named_queries( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/athena/athena_workgroup_handler.py class AthenaWorkGroupHandler (line 33) | class AthenaWorkGroupHandler: method __init__ (line 36) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method manage_aws_athena_workgroups (line 52) | async def manage_aws_athena_workgroups( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/commons/common_resource_handler.py class CommonResourceHandler (line 43) | class CommonResourceHandler: method __init__ (line 52) | def __init__(self, mcp, allow_write: bool = False): method get_policies_for_role (line 81) | async def get_policies_for_role( method add_inline_policy (line 173) | async def add_inline_policy( method create_data_processing_role (line 315) | async def create_data_processing_role( method get_roles_for_service (line 487) | async def get_roles_for_service( method list_s3_buckets (line 595) | async def list_s3_buckets( method upload_to_s3 (line 773) | async def upload_to_s3( method analyze_s3_usage_for_data_processing (line 917) | async def analyze_s3_usage_for_data_processing( method _get_trust_relationship_for_service (line 1193) | def _get_trust_relationship_for_service(self, service_type: str) -> Di... method _get_managed_policies (line 1219) | def _get_managed_policies(self, ctx, role_name): method _get_inline_policies (line 1259) | def _get_inline_policies(self, ctx, role_name): method _create_inline_policy (line 1287) | def _create_inline_policy(self, ctx, role_name, policy_name, permissio... method _get_service_principal (line 1362) | def _get_service_principal(self, service_type: str) -> str: method _can_be_assumed_by_service (line 1391) | def _can_be_assumed_by_service( method _add_permissions_to_document (line 1438) | def _add_permissions_to_document(self, policy_document, permissions): FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/emr/emr_ec2_cluster_handler.py class EMREc2ClusterHandler (line 44) | class EMREc2ClusterHandler: method __init__ (line 47) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method _create_error_response (line 63) | def _create_error_response(self, operation: str, error_message: str): method manage_aws_emr_clusters (line 70) | async def manage_aws_emr_clusters( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/emr/emr_ec2_instance_handler.py class EMREc2InstanceHandler (line 41) | class EMREc2InstanceHandler: method __init__ (line 44) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method manage_aws_emr_ec2_instances (line 60) | async def manage_aws_emr_ec2_instances( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/emr/emr_ec2_steps_handler.py class EMREc2StepsHandler (line 37) | class EMREc2StepsHandler: method __init__ (line 40) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method manage_aws_emr_ec2_steps (line 56) | async def manage_aws_emr_ec2_steps( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/emr/emr_serverless_application_handler.py class EMRServerlessApplicationHandler (line 40) | class EMRServerlessApplicationHandler: method __init__ (line 43) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method _create_error_response (line 61) | def _create_error_response(self, operation: str, error_message: str): method manage_aws_emr_serverless_applications (line 68) | async def manage_aws_emr_serverless_applications( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/emr/emr_serverless_job_run_handler.py class EMRServerlessJobRunHandler (line 38) | class EMRServerlessJobRunHandler: method __init__ (line 41) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method _create_error_response (line 59) | def _create_error_response(self, operation: str, error_message: str): method manage_aws_emr_serverless_job_runs (line 66) | async def manage_aws_emr_serverless_job_runs( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/glue/crawler_handler.py class CrawlerHandler (line 49) | class CrawlerHandler: method __init__ (line 52) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method manage_aws_glue_crawlers (line 72) | async def manage_aws_glue_crawlers( method manage_aws_glue_classifiers (line 510) | async def manage_aws_glue_classifiers( method manage_aws_glue_crawler_management (line 789) | async def manage_aws_glue_crawler_management( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/glue/data_catalog_handler.py class GlueDataCatalogHandler (line 36) | class GlueDataCatalogHandler: method __init__ (line 39) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method manage_aws_glue_data_catalog_databases (line 73) | async def manage_aws_glue_data_catalog_databases( method manage_aws_glue_data_catalog_tables (line 238) | async def manage_aws_glue_data_catalog_tables( method manage_aws_glue_data_catalog_connections (line 438) | async def manage_aws_glue_data_catalog_connections( method manage_aws_glue_data_catalog_partitions (line 612) | async def manage_aws_glue_data_catalog_partitions( method manage_aws_glue_data_catalog (line 813) | async def manage_aws_glue_data_catalog( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/glue/glue_commons_handler.py class GlueCommonsHandler (line 43) | class GlueCommonsHandler: method __init__ (line 46) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method manage_aws_glue_usage_profiles (line 69) | async def manage_aws_glue_usage_profiles( method manage_aws_glue_security (line 343) | async def manage_aws_glue_security( method manage_aws_glue_encryption (line 535) | async def manage_aws_glue_encryption( method manage_aws_glue_resource_policies (line 689) | async def manage_aws_glue_resource_policies( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/glue/glue_etl_handler.py class GlueEtlJobsHandler (line 44) | class GlueEtlJobsHandler: method __init__ (line 47) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method manage_aws_glue_jobs (line 63) | async def manage_aws_glue_jobs( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/glue/interactive_sessions_handler.py class GlueInteractiveSessionsHandler (line 40) | class GlueInteractiveSessionsHandler: method __init__ (line 43) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method manage_aws_glue_sessions (line 60) | async def manage_aws_glue_sessions( method manage_aws_glue_statements (line 506) | async def manage_aws_glue_statements( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/handlers/glue/worklows_handler.py class GlueWorkflowAndTriggerHandler (line 42) | class GlueWorkflowAndTriggerHandler: method __init__ (line 45) | def __init__(self, mcp, allow_write: bool = False, allow_sensitive_dat... method manage_aws_glue_workflows (line 62) | async def manage_aws_glue_workflows( method manage_aws_glue_triggers (line 399) | async def manage_aws_glue_triggers( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/models/athena_models.py class BatchGetQueryExecutionData (line 20) | class BatchGetQueryExecutionData(BaseModel): class GetQueryExecutionData (line 30) | class GetQueryExecutionData(BaseModel): class GetQueryResultsData (line 41) | class GetQueryResultsData(BaseModel): class GetQueryRuntimeStatisticsData (line 59) | class GetQueryRuntimeStatisticsData(BaseModel): class ListQueryExecutionsData (line 72) | class ListQueryExecutionsData(BaseModel): class StartQueryExecutionData (line 81) | class StartQueryExecutionData(BaseModel): class StopQueryExecutionData (line 88) | class StopQueryExecutionData(BaseModel): class BatchGetNamedQueryData (line 98) | class BatchGetNamedQueryData(BaseModel): class CreateNamedQueryData (line 108) | class CreateNamedQueryData(BaseModel): class DeleteNamedQueryData (line 115) | class DeleteNamedQueryData(BaseModel): class GetNamedQueryData (line 122) | class GetNamedQueryData(BaseModel): class ListNamedQueriesData (line 133) | class ListNamedQueriesData(BaseModel): class UpdateNamedQueryData (line 142) | class UpdateNamedQueryData(BaseModel): class CreateDataCatalogData (line 152) | class CreateDataCatalogData(BaseModel): class DeleteDataCatalogData (line 159) | class DeleteDataCatalogData(BaseModel): class GetDataCatalogData (line 166) | class GetDataCatalogData(BaseModel): class ListDataCatalogsData (line 176) | class ListDataCatalogsData(BaseModel): class UpdateDataCatalogData (line 188) | class UpdateDataCatalogData(BaseModel): class GetDatabaseData (line 195) | class GetDatabaseData(BaseModel): class GetTableMetadataData (line 204) | class GetTableMetadataData(BaseModel): class ListDatabasesData (line 214) | class ListDatabasesData(BaseModel): class ListTableMetadataData (line 226) | class ListTableMetadataData(BaseModel): class CreateWorkGroupData (line 241) | class CreateWorkGroupData(BaseModel): class DeleteWorkGroupData (line 248) | class DeleteWorkGroupData(BaseModel): class GetWorkGroupData (line 255) | class GetWorkGroupData(BaseModel): class ListWorkGroupsData (line 262) | class ListWorkGroupsData(BaseModel): class UpdateWorkGroupData (line 271) | class UpdateWorkGroupData(BaseModel): FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/models/common_resource_models.py class RoleSummary (line 26) | class RoleSummary(BaseModel): class PolicySummary (line 36) | class PolicySummary(BaseModel): class ServiceRolesData (line 49) | class ServiceRolesData(BaseModel): class RoleDescriptionData (line 57) | class RoleDescriptionData(BaseModel): class AddInlinePolicyData (line 68) | class AddInlinePolicyData(BaseModel): class CreateRoleData (line 77) | class CreateRoleData(BaseModel): class BucketInfo (line 90) | class BucketInfo(BaseModel): class ListS3BucketsData (line 101) | class ListS3BucketsData(BaseModel): class UploadToS3Data (line 110) | class UploadToS3Data(BaseModel): class AnalyzeS3UsageData (line 119) | class AnalyzeS3UsageData(BaseModel): FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/models/data_catalog_models.py class GlueOperation (line 20) | class GlueOperation(str, Enum): class DatabaseSummary (line 32) | class DatabaseSummary(BaseModel): class TableSummary (line 42) | class TableSummary(BaseModel): class ConnectionSummary (line 61) | class ConnectionSummary(BaseModel): class PartitionSummary (line 78) | class PartitionSummary(BaseModel): class CatalogSummary (line 94) | class CatalogSummary(BaseModel): class CreateDatabaseData (line 106) | class CreateDatabaseData(BaseModel): class DeleteDatabaseData (line 113) | class DeleteDatabaseData(BaseModel): class GetDatabaseData (line 120) | class GetDatabaseData(BaseModel): class ListDatabasesData (line 132) | class ListDatabasesData(BaseModel): class UpdateDatabaseData (line 142) | class UpdateDatabaseData(BaseModel): class CreateTableData (line 150) | class CreateTableData(BaseModel): class DeleteTableData (line 158) | class DeleteTableData(BaseModel): class GetTableData (line 166) | class GetTableData(BaseModel): class ListTablesData (line 185) | class ListTablesData(BaseModel): class UpdateTableData (line 194) | class UpdateTableData(BaseModel): class SearchTablesData (line 202) | class SearchTablesData(BaseModel): class CreateConnectionData (line 213) | class CreateConnectionData(BaseModel): class DeleteConnectionData (line 221) | class DeleteConnectionData(BaseModel): class GetConnectionData (line 229) | class GetConnectionData(BaseModel): class ListConnectionsData (line 258) | class ListConnectionsData(BaseModel): class UpdateConnectionData (line 268) | class UpdateConnectionData(BaseModel): class CreatePartitionData (line 277) | class CreatePartitionData(BaseModel): class DeletePartitionData (line 286) | class DeletePartitionData(BaseModel): class GetPartitionData (line 297) | class GetPartitionData(BaseModel): class ListPartitionsData (line 315) | class ListPartitionsData(BaseModel): class UpdatePartitionData (line 327) | class UpdatePartitionData(BaseModel): class CreateCatalogData (line 339) | class CreateCatalogData(BaseModel): class DeleteCatalogData (line 346) | class DeleteCatalogData(BaseModel): class GetCatalogData (line 353) | class GetCatalogData(BaseModel): class ListCatalogsData (line 366) | class ListCatalogsData(BaseModel): class ImportCatalogData (line 374) | class ImportCatalogData(BaseModel): class GlueJobRun (line 382) | class GlueJobRun(BaseModel): class BatchOperationResult (line 394) | class BatchOperationResult(BaseModel): class DataQualityResult (line 405) | class DataQualityResult(BaseModel): class CrawlerRun (line 417) | class CrawlerRun(BaseModel): class BatchCreateTablesData (line 430) | class BatchCreateTablesData(BaseModel): class BatchDeleteTablesData (line 439) | class BatchDeleteTablesData(BaseModel): class TableSchemaComparisonData (line 448) | class TableSchemaComparisonData(BaseModel): class DataLineageData (line 460) | class DataLineageData(BaseModel): class PartitionProjectionData (line 477) | class PartitionProjectionData(BaseModel): class CatalogEncryptionData (line 490) | class CatalogEncryptionData(BaseModel): class ResourceLinkData (line 503) | class ResourceLinkData(BaseModel): FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/models/emr_models.py class AddInstanceFleetData (line 25) | class AddInstanceFleetData(BaseModel): class AddInstanceGroupsData (line 34) | class AddInstanceGroupsData(BaseModel): class ModifyInstanceFleetData (line 44) | class ModifyInstanceFleetData(BaseModel): class ModifyInstanceGroupsData (line 52) | class ModifyInstanceGroupsData(BaseModel): class ListInstanceFleetsData (line 60) | class ListInstanceFleetsData(BaseModel): class ListInstancesData (line 70) | class ListInstancesData(BaseModel): class ListSupportedInstanceTypesData (line 80) | class ListSupportedInstanceTypesData(BaseModel): class AddStepsData (line 95) | class AddStepsData(BaseModel): class CancelStepsData (line 104) | class CancelStepsData(BaseModel): class DescribeStepData (line 116) | class DescribeStepData(BaseModel): class ListStepsData (line 127) | class ListStepsData(BaseModel): class CreateClusterData (line 144) | class CreateClusterData(BaseModel): class DescribeClusterData (line 152) | class DescribeClusterData(BaseModel): class ModifyClusterData (line 159) | class ModifyClusterData(BaseModel): class ModifyClusterAttributesData (line 167) | class ModifyClusterAttributesData(BaseModel): class TerminateClustersData (line 174) | class TerminateClustersData(BaseModel): class ListClustersData (line 181) | class ListClustersData(BaseModel): class WaitClusterData (line 190) | class WaitClusterData(BaseModel): class CreateApplicationData (line 201) | class CreateApplicationData(BaseModel): class GetApplicationData (line 210) | class GetApplicationData(BaseModel): class UpdateApplicationData (line 217) | class UpdateApplicationData(BaseModel): class DeleteApplicationData (line 224) | class DeleteApplicationData(BaseModel): class ListApplicationsData (line 231) | class ListApplicationsData(BaseModel): class StartApplicationData (line 240) | class StartApplicationData(BaseModel): class StopApplicationData (line 247) | class StopApplicationData(BaseModel): class StartJobRunData (line 254) | class StartJobRunData(BaseModel): class GetJobRunData (line 263) | class GetJobRunData(BaseModel): class CancelJobRunData (line 270) | class CancelJobRunData(BaseModel): class ListJobRunsData (line 278) | class ListJobRunsData(BaseModel): class GetDashboardForJobRunData (line 287) | class GetDashboardForJobRunData(BaseModel): class CreateSecurityConfigurationData (line 294) | class CreateSecurityConfigurationData(BaseModel): class DeleteSecurityConfigurationData (line 302) | class DeleteSecurityConfigurationData(BaseModel): class DescribeSecurityConfigurationData (line 309) | class DescribeSecurityConfigurationData(BaseModel): class ListSecurityConfigurationsData (line 318) | class ListSecurityConfigurationsData(BaseModel): FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/models/glue_models.py class CreateJobData (line 21) | class CreateJobData(BaseModel): class DeleteJobData (line 29) | class DeleteJobData(BaseModel): class GetJobData (line 36) | class GetJobData(BaseModel): class GetJobsData (line 44) | class GetJobsData(BaseModel): class StartJobRunData (line 53) | class StartJobRunData(BaseModel): class StopJobRunData (line 61) | class StopJobRunData(BaseModel): class UpdateJobData (line 69) | class UpdateJobData(BaseModel): class CreateWorkflowData (line 77) | class CreateWorkflowData(BaseModel): class DeleteWorkflowData (line 84) | class DeleteWorkflowData(BaseModel): class GetWorkflowData (line 91) | class GetWorkflowData(BaseModel): class ListWorkflowsData (line 101) | class ListWorkflowsData(BaseModel): class StartWorkflowRunData (line 111) | class StartWorkflowRunData(BaseModel): class CreateTriggerData (line 122) | class CreateTriggerData(BaseModel): class DeleteTriggerData (line 129) | class DeleteTriggerData(BaseModel): class GetTriggerData (line 139) | class GetTriggerData(BaseModel): class GetTriggersData (line 149) | class GetTriggersData(BaseModel): class StartTriggerData (line 159) | class StartTriggerData(BaseModel): class StopTriggerData (line 166) | class StopTriggerData(BaseModel): class GetJobRunData (line 174) | class GetJobRunData(BaseModel): class GetJobRunsData (line 183) | class GetJobRunsData(BaseModel): class BatchStopJobRunData (line 193) | class BatchStopJobRunData(BaseModel): class GetJobBookmarkData (line 207) | class GetJobBookmarkData(BaseModel): class ResetJobBookmarkData (line 215) | class ResetJobBookmarkData(BaseModel): class CreateSessionData (line 224) | class CreateSessionData(BaseModel): class DeleteSessionData (line 232) | class DeleteSessionData(BaseModel): class GetSessionData (line 239) | class GetSessionData(BaseModel): class ListSessionsData (line 247) | class ListSessionsData(BaseModel): class StopSessionData (line 257) | class StopSessionData(BaseModel): class RunStatementData (line 265) | class RunStatementData(BaseModel): class CancelStatementData (line 273) | class CancelStatementData(BaseModel): class GetStatementData (line 281) | class GetStatementData(BaseModel): class ListStatementsData (line 290) | class ListStatementsData(BaseModel): class CreateUsageProfileData (line 303) | class CreateUsageProfileData(BaseModel): class DeleteUsageProfileData (line 310) | class DeleteUsageProfileData(BaseModel): class GetUsageProfileData (line 317) | class GetUsageProfileData(BaseModel): class UpdateUsageProfileData (line 325) | class UpdateUsageProfileData(BaseModel): class CreateSecurityConfigurationData (line 333) | class CreateSecurityConfigurationData(BaseModel): class DeleteSecurityConfigurationData (line 344) | class DeleteSecurityConfigurationData(BaseModel): class GetSecurityConfigurationData (line 351) | class GetSecurityConfigurationData(BaseModel): class GetDataCatalogEncryptionSettingsData (line 366) | class GetDataCatalogEncryptionSettingsData(BaseModel): class PutDataCatalogEncryptionSettingsData (line 375) | class PutDataCatalogEncryptionSettingsData(BaseModel): class GetResourcePolicyData (line 382) | class GetResourcePolicyData(BaseModel): class PutResourcePolicyData (line 392) | class PutResourcePolicyData(BaseModel): class DeleteResourcePolicyData (line 399) | class DeleteResourcePolicyData(BaseModel): class CreateCrawlerData (line 406) | class CreateCrawlerData(BaseModel): class DeleteCrawlerData (line 413) | class DeleteCrawlerData(BaseModel): class GetCrawlerData (line 420) | class GetCrawlerData(BaseModel): class GetCrawlersData (line 428) | class GetCrawlersData(BaseModel): class StartCrawlerData (line 437) | class StartCrawlerData(BaseModel): class StopCrawlerData (line 444) | class StopCrawlerData(BaseModel): class GetCrawlerMetricsData (line 451) | class GetCrawlerMetricsData(BaseModel): class StartCrawlerScheduleData (line 460) | class StartCrawlerScheduleData(BaseModel): class StopCrawlerScheduleData (line 467) | class StopCrawlerScheduleData(BaseModel): class BatchGetCrawlersData (line 474) | class BatchGetCrawlersData(BaseModel): class ListCrawlersData (line 482) | class ListCrawlersData(BaseModel): class UpdateCrawlerData (line 491) | class UpdateCrawlerData(BaseModel): class UpdateCrawlerScheduleData (line 498) | class UpdateCrawlerScheduleData(BaseModel): class CreateClassifierData (line 506) | class CreateClassifierData(BaseModel): class DeleteClassifierData (line 513) | class DeleteClassifierData(BaseModel): class GetClassifierData (line 520) | class GetClassifierData(BaseModel): class GetClassifiersData (line 528) | class GetClassifiersData(BaseModel): class UpdateClassifierData (line 537) | class UpdateClassifierData(BaseModel): FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/server.py function create_server (line 270) | def create_server(): function main (line 279) | def main(): FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/utils/aws_helper.py class AwsHelper (line 36) | class AwsHelper: method get_aws_region (line 44) | def get_aws_region() -> str: method get_aws_profile (line 80) | def get_aws_profile() -> Optional[str]: method is_custom_tags_enabled (line 85) | def is_custom_tags_enabled() -> bool: method get_aws_account_id (line 102) | def get_aws_account_id(cls) -> str: method get_aws_partition (line 124) | def get_aws_partition(cls) -> str: method create_boto3_client (line 150) | def create_boto3_client(cls, service_name: str, region_name: Optional[... method prepare_resource_tags (line 188) | def prepare_resource_tags( method convert_tags_to_aws_format (line 215) | def convert_tags_to_aws_format( method get_resource_tags_athena_workgroup (line 233) | def get_resource_tags_athena_workgroup( method verify_resource_managed_by_mcp (line 254) | def verify_resource_managed_by_mcp( method get_resource_tags_glue_job (line 283) | def get_resource_tags_glue_job(glue_client: Any, job_name: str) -> Dic... method is_resource_mcp_managed (line 300) | def is_resource_mcp_managed( method verify_emr_cluster_managed_by_mcp (line 339) | def verify_emr_cluster_managed_by_mcp( method verify_athena_data_catalog_managed_by_mcp (line 394) | def verify_athena_data_catalog_managed_by_mcp( method verify_emr_serverless_application_managed_by_mcp (line 457) | def verify_emr_serverless_application_managed_by_mcp( FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/utils/logging_helper.py class LogLevel (line 23) | class LogLevel(Enum): function log_with_request_id (line 33) | def log_with_request_id(ctx: Context, level: LogLevel, message: str, **k... FILE: src/aws-dataprocessing-mcp-server/awslabs/aws_dataprocessing_mcp_server/utils/sql_analyzer.py class SqlAnalyzer (line 21) | class SqlAnalyzer: method _get_compiled_write_patterns (line 58) | def _get_compiled_write_patterns(cls): method _get_compiled_read_patterns (line 68) | def _get_compiled_read_patterns(cls): method _remove_sql_comments (line 78) | def _remove_sql_comments(cls, sql: str) -> str: method _normalize_whitespace (line 96) | def _normalize_whitespace(cls, sql: str) -> str: method _preprocess_sql (line 114) | def _preprocess_sql(cls, sql: str) -> str: method contains_write_operations (line 135) | def contains_write_operations(cls, sql: Optional[str]) -> bool: method is_read_only_query (line 182) | def is_read_only_query(cls, sql: Optional[str]) -> bool: method get_query_type (line 226) | def get_query_type(cls, sql: Optional[str]) -> str: FILE: src/aws-dataprocessing-mcp-server/tests/core/glue_data_catalog/test_data_catalog_database_manager.py class TestDataCatalogDatabaseManager (line 27) | class TestDataCatalogDatabaseManager: method mock_ctx (line 31) | def mock_ctx(self): method mock_glue_client (line 38) | def mock_glue_client(self): method manager (line 44) | def manager(self, mock_glue_client): method test_create_database_success (line 54) | async def test_create_database_success(self, manager, mock_ctx, mock_g... method test_create_database_error (line 101) | async def test_create_database_error(self, manager, mock_ctx, mock_glu... method test_delete_database_success (line 131) | async def test_delete_database_success(self, manager, mock_ctx, mock_g... method test_delete_database_not_mcp_managed (line 171) | async def test_delete_database_not_mcp_managed(self, manager, mock_ctx... method test_delete_database_not_found (line 206) | async def test_delete_database_not_found(self, manager, mock_ctx, mock... method test_get_database_success (line 231) | async def test_get_database_success(self, manager, mock_ctx, mock_glue... method test_get_database_error (line 271) | async def test_get_database_error(self, manager, mock_ctx, mock_glue_c... method test_list_databases_success (line 297) | async def test_list_databases_success(self, manager, mock_ctx, mock_gl... method test_list_databases_error (line 354) | async def test_list_databases_error(self, manager, mock_ctx, mock_glue... method test_update_database_success (line 375) | async def test_update_database_success(self, manager, mock_ctx, mock_g... method test_update_database_not_mcp_managed (line 431) | async def test_update_database_not_mcp_managed(self, manager, mock_ctx... method test_update_database_not_found (line 466) | async def test_update_database_not_found(self, manager, mock_ctx, mock... FILE: src/aws-dataprocessing-mcp-server/tests/core/glue_data_catalog/test_data_catalog_handler.py class TestDataCatalogManager (line 27) | class TestDataCatalogManager: method mock_ctx (line 31) | def mock_ctx(self): method mock_glue_client (line 38) | def mock_glue_client(self): method manager (line 44) | def manager(self, mock_glue_client): method test_create_connection_success (line 54) | async def test_create_connection_success(self, manager, mock_ctx, mock... method test_create_connection_error (line 112) | async def test_create_connection_error(self, manager, mock_ctx, mock_g... method test_delete_connection_success (line 151) | async def test_delete_connection_success(self, manager, mock_ctx, mock... method test_delete_connection_not_mcp_managed (line 195) | async def test_delete_connection_not_mcp_managed(self, manager, mock_c... method test_get_connection_success (line 234) | async def test_get_connection_success(self, manager, mock_ctx, mock_gl... method test_list_connections_success (line 279) | async def test_list_connections_success(self, manager, mock_ctx, mock_... method test_create_partition_success (line 342) | async def test_create_partition_success(self, manager, mock_ctx, mock_... method test_get_partition_success (line 397) | async def test_get_partition_success(self, manager, mock_ctx, mock_glu... method test_list_partitions_success (line 450) | async def test_list_partitions_success(self, manager, mock_ctx, mock_g... method test_create_catalog_success (line 520) | async def test_create_catalog_success(self, manager, mock_ctx, mock_gl... method test_get_catalog_success (line 560) | async def test_get_catalog_success(self, manager, mock_ctx, mock_glue_... method test_list_catalogs_success (line 594) | async def test_list_catalogs_success(self, manager, mock_ctx, mock_glu... method test_list_catalogs_error (line 637) | async def test_list_catalogs_error(self, manager, mock_ctx, mock_glue_... method test_list_catalogs_empty_result (line 653) | async def test_list_catalogs_empty_result(self, manager, mock_ctx, moc... method test_update_connection_success (line 666) | async def test_update_connection_success(self, manager, mock_ctx, mock... method test_update_connection_not_mcp_managed (line 739) | async def test_update_connection_not_mcp_managed(self, manager, mock_c... method test_delete_partition_success (line 788) | async def test_delete_partition_success(self, manager, mock_ctx, mock_... method test_update_partition_success (line 849) | async def test_update_partition_success(self, manager, mock_ctx, mock_... method test_delete_catalog_success (line 925) | async def test_delete_catalog_success(self, manager, mock_ctx, mock_gl... method test_delete_catalog_not_mcp_managed (line 967) | async def test_delete_catalog_not_mcp_managed(self, manager, mock_ctx,... method test_delete_catalog_not_found (line 1006) | async def test_delete_catalog_not_found(self, manager, mock_ctx, mock_... method test_delete_catalog_error (line 1031) | async def test_delete_catalog_error(self, manager, mock_ctx, mock_glue... method test_import_catalog_to_glue_success (line 1079) | async def test_import_catalog_to_glue_success(self, manager, mock_ctx,... method test_import_catalog_to_glue_error (line 1108) | async def test_import_catalog_to_glue_error(self, manager, mock_ctx, m... method test_update_partition_not_mcp_managed (line 1141) | async def test_update_partition_not_mcp_managed(self, manager, mock_ct... method test_update_partition_not_found (line 1198) | async def test_update_partition_not_found(self, manager, mock_ctx, moc... method test_update_partition_error (line 1238) | async def test_update_partition_error(self, manager, mock_ctx, mock_gl... method test_delete_partition_not_mcp_managed (line 1303) | async def test_delete_partition_not_mcp_managed(self, manager, mock_ct... method test_delete_partition_not_found (line 1354) | async def test_delete_partition_not_found(self, manager, mock_ctx, moc... method test_delete_partition_error (line 1388) | async def test_delete_partition_error(self, manager, mock_ctx, mock_gl... method test_get_connection_error (line 1447) | async def test_get_connection_error(self, manager, mock_ctx, mock_glue... method test_get_connection_with_all_parameters (line 1473) | async def test_get_connection_with_all_parameters(self, manager, mock_... method test_list_connections_error (line 1516) | async def test_list_connections_error(self, manager, mock_ctx, mock_gl... method test_list_connections_empty_result (line 1541) | async def test_list_connections_empty_result(self, manager, mock_ctx, ... method test_create_partition_error (line 1560) | async def test_create_partition_error(self, manager, mock_ctx, mock_gl... method test_get_partition_error (line 1603) | async def test_get_partition_error(self, manager, mock_ctx, mock_glue_... method test_list_partitions_error (line 1635) | async def test_list_partitions_error(self, manager, mock_ctx, mock_glu... method test_list_partitions_empty_result (line 1661) | async def test_list_partitions_empty_result(self, manager, mock_ctx, m... method test_list_partitions_with_all_parameters (line 1686) | async def test_list_partitions_with_all_parameters(self, manager, mock... method test_create_catalog_error (line 1736) | async def test_create_catalog_error(self, manager, mock_ctx, mock_glue... method test_get_catalog_error (line 1769) | async def test_get_catalog_error(self, manager, mock_ctx, mock_glue_cl... method test_create_connection_with_empty_parameters (line 1792) | async def test_create_connection_with_empty_parameters( method test_update_connection_with_empty_parameters (line 1833) | async def test_update_connection_with_empty_parameters( method test_update_connection_with_new_parameters (line 1892) | async def test_update_connection_with_new_parameters( method test_update_partition_with_new_parameters (line 1951) | async def test_update_partition_with_new_parameters(self, manager, moc... FILE: src/aws-dataprocessing-mcp-server/tests/core/glue_data_catalog/test_data_catalog_table_manager.py class TestDataCatalogTableManager (line 27) | class TestDataCatalogTableManager: method mock_ctx (line 31) | def mock_ctx(self): method mock_glue_client (line 38) | def mock_glue_client(self): method manager (line 44) | def manager(self, mock_glue_client): method test_create_table_success (line 54) | async def test_create_table_success(self, manager, mock_ctx, mock_glue... method test_create_table_error (line 123) | async def test_create_table_error(self, manager, mock_ctx, mock_glue_c... method test_delete_table_success (line 161) | async def test_delete_table_success(self, manager, mock_ctx, mock_glue... method test_get_table_success (line 215) | async def test_get_table_success(self, manager, mock_ctx, mock_glue_cl... method test_list_tables_success (line 263) | async def test_list_tables_success(self, manager, mock_ctx, mock_glue_... method test_update_table_success (line 333) | async def test_update_table_success(self, manager, mock_ctx, mock_glue... method test_search_tables_success (line 409) | async def test_search_tables_success(self, manager, mock_ctx, mock_glu... method test_error_handling (line 480) | async def test_error_handling(self, manager, mock_ctx, mock_glue_client): FILE: src/aws-dataprocessing-mcp-server/tests/handlers/athena/test_athena_data_catalog_handler.py function get_response_data (line 26) | def get_response_data(response): function mock_athena_client (line 35) | def mock_athena_client(): function mock_aws_helper (line 41) | def mock_aws_helper(): function handler (line 57) | def handler(mock_aws_helper): function read_only_handler (line 64) | def read_only_handler(mock_aws_helper): function mock_context (line 71) | def mock_context(): function test_initialization_parameters (line 79) | def test_initialization_parameters(mock_aws_helper): function test_initialization_registers_tools (line 89) | def test_initialization_registers_tools(mock_aws_helper): function test_create_data_catalog_success (line 102) | async def test_create_data_catalog_success(handler, mock_athena_client): function test_create_data_catalog_missing_parameters (line 132) | async def test_create_data_catalog_missing_parameters(handler): function test_create_data_catalog_without_write_permission (line 142) | async def test_create_data_catalog_without_write_permission(read_only_ha... function test_delete_data_catalog_success (line 154) | async def test_delete_data_catalog_success(handler, mock_athena_client): function test_delete_data_catalog_failure (line 176) | async def test_delete_data_catalog_failure(handler, mock_athena_client): function test_delete_data_catalog_missing_parameters (line 194) | async def test_delete_data_catalog_missing_parameters(handler): function test_delete_data_catalog_without_write_permission (line 204) | async def test_delete_data_catalog_without_write_permission(read_only_ha... function test_get_data_catalog_success (line 216) | async def test_get_data_catalog_success(handler, mock_athena_client): function test_get_data_catalog_missing_parameters (line 244) | async def test_get_data_catalog_missing_parameters(handler): function test_list_data_catalogs_success (line 252) | async def test_list_data_catalogs_success(handler, mock_athena_client): function test_update_data_catalog_success (line 284) | async def test_update_data_catalog_success(handler, mock_athena_client): function test_update_data_catalog_missing_parameters (line 312) | async def test_update_data_catalog_missing_parameters(handler): function test_update_data_catalog_without_write_permission (line 322) | async def test_update_data_catalog_without_write_permission(read_only_ha... function test_invalid_data_catalog_operation (line 334) | async def test_invalid_data_catalog_operation(handler): function test_data_catalog_client_error_handling (line 344) | async def test_data_catalog_client_error_handling(handler, mock_athena_c... function test_get_database_success (line 365) | async def test_get_database_success(handler, mock_athena_client): function test_get_database_missing_parameters (line 395) | async def test_get_database_missing_parameters(handler): function test_get_table_metadata_success (line 405) | async def test_get_table_metadata_success(handler, mock_athena_client): function test_get_table_metadata_missing_parameters (line 442) | async def test_get_table_metadata_missing_parameters(handler): function test_list_databases_success (line 465) | async def test_list_databases_success(handler, mock_athena_client): function test_list_table_metadata_success (line 498) | async def test_list_table_metadata_success(handler, mock_athena_client): function test_list_table_metadata_missing_parameters (line 538) | async def test_list_table_metadata_missing_parameters(handler): function test_invalid_database_table_operation (line 548) | async def test_invalid_database_table_operation(handler): function test_database_table_client_error_handling (line 560) | async def test_database_table_client_error_handling(handler, mock_athena... function test_delete_data_catalog_not_mcp_managed (line 578) | async def test_delete_data_catalog_not_mcp_managed(handler, mock_aws_hel... function test_update_data_catalog_not_mcp_managed (line 598) | async def test_update_data_catalog_not_mcp_managed(handler, mock_aws_hel... function test_list_data_catalogs_with_no_parameters (line 622) | async def test_list_data_catalogs_with_no_parameters(handler, mock_athen... function test_list_databases_with_no_optional_parameters (line 641) | async def test_list_databases_with_no_optional_parameters(handler, mock_... function test_list_table_metadata_with_minimal_parameters (line 662) | async def test_list_table_metadata_with_minimal_parameters(handler, mock... function test_get_query_results_with_all_parameters (line 688) | async def test_get_query_results_with_all_parameters(handler, mock_athen... FILE: src/aws-dataprocessing-mcp-server/tests/handlers/athena/test_athena_query_handler.py function extract_response_data (line 26) | def extract_response_data(response): function mock_athena_client (line 41) | def mock_athena_client(): function mock_aws_helper (line 47) | def mock_aws_helper(): function handler (line 57) | def handler(mock_aws_helper): function read_only_handler (line 64) | def read_only_handler(mock_aws_helper): function mock_context (line 71) | def mock_context(): function test_batch_get_query_execution_success (line 80) | async def test_batch_get_query_execution_success(handler, mock_athena_cl... function test_batch_get_query_execution_missing_parameters (line 103) | async def test_batch_get_query_execution_missing_parameters(handler): function test_get_query_execution_success (line 113) | async def test_get_query_execution_success(handler, mock_athena_client): function test_get_query_execution_missing_parameters (line 133) | async def test_get_query_execution_missing_parameters(handler): function test_get_query_results_success (line 143) | async def test_get_query_results_success(handler, mock_athena_client): function test_get_query_results_missing_parameters (line 176) | async def test_get_query_results_missing_parameters(handler): function test_get_query_runtime_statistics_success (line 186) | async def test_get_query_runtime_statistics_success(handler, mock_athena... function test_get_query_runtime_statistics_missing_parameters (line 211) | async def test_get_query_runtime_statistics_missing_parameters(handler): function test_list_query_executions_success (line 221) | async def test_list_query_executions_success(handler, mock_athena_client): function test_start_query_execution_success (line 249) | async def test_start_query_execution_success(handler, mock_athena_client): function test_start_query_execution_missing_parameters (line 282) | async def test_start_query_execution_missing_parameters(handler): function test_start_query_execution_without_write_permission_non_select (line 292) | async def test_start_query_execution_without_write_permission_non_select... function test_start_query_execution_without_write_permission_select (line 303) | async def test_start_query_execution_without_write_permission_select( function test_start_query_execution_without_write_permission_ctas (line 321) | async def test_start_query_execution_without_write_permission_ctas(read_... function test_stop_query_execution_success (line 332) | async def test_stop_query_execution_success(handler, mock_athena_client): function test_stop_query_execution_missing_parameters (line 348) | async def test_stop_query_execution_missing_parameters(handler): function test_invalid_query_operation (line 358) | async def test_invalid_query_operation(handler): function test_query_client_error_handling (line 368) | async def test_query_client_error_handling(handler, mock_athena_client): function test_batch_get_named_query_success (line 389) | async def test_batch_get_named_query_success(handler, mock_athena_client): function test_batch_get_named_query_missing_parameters (line 410) | async def test_batch_get_named_query_missing_parameters(handler): function test_create_named_query_success (line 420) | async def test_create_named_query_success(handler, mock_athena_client): function test_create_named_query_missing_parameters (line 451) | async def test_create_named_query_missing_parameters(handler): function test_create_named_query_without_write_permission (line 461) | async def test_create_named_query_without_write_permission(read_only_han... function test_delete_named_query_success (line 478) | async def test_delete_named_query_success(handler, mock_athena_client): function test_delete_named_query_missing_parameters (line 494) | async def test_delete_named_query_missing_parameters(handler): function test_delete_named_query_without_write_permission (line 504) | async def test_delete_named_query_without_write_permission(read_only_han... function test_get_named_query_success (line 516) | async def test_get_named_query_success(handler, mock_athena_client): function test_get_named_query_missing_parameters (line 542) | async def test_get_named_query_missing_parameters(handler): function test_list_named_queries_success (line 552) | async def test_list_named_queries_success(handler, mock_athena_client): function test_update_named_query_success (line 580) | async def test_update_named_query_success(handler, mock_athena_client): function test_update_named_query_missing_parameters (line 608) | async def test_update_named_query_missing_parameters(handler): function test_update_named_query_without_write_permission (line 618) | async def test_update_named_query_without_write_permission(read_only_han... function test_invalid_named_query_operation (line 630) | async def test_invalid_named_query_operation(handler): function test_named_query_client_error_handling (line 640) | async def test_named_query_client_error_handling(handler, mock_athena_cl... function test_initialization_parameters (line 661) | async def test_initialization_parameters(mock_aws_helper): function test_initialization_registers_tools (line 672) | async def test_initialization_registers_tools(mock_aws_helper): function test_get_query_results_with_minimal_parameters (line 682) | async def test_get_query_results_with_minimal_parameters(handler, mock_a... function test_list_query_executions_with_minimal_parameters (line 702) | async def test_list_query_executions_with_minimal_parameters(handler, mo... function test_start_query_execution_with_minimal_parameters (line 721) | async def test_start_query_execution_with_minimal_parameters(handler, mo... function test_list_named_queries_with_minimal_parameters (line 740) | async def test_list_named_queries_with_minimal_parameters(handler, mock_... function test_update_named_query_with_partial_parameters (line 759) | async def test_update_named_query_with_partial_parameters(handler, mock_... function test_start_query_execution_with_select_in_uppercase (line 781) | async def test_start_query_execution_with_select_in_uppercase( function test_start_query_execution_with_ctas_in_query_string (line 799) | async def test_start_query_execution_with_ctas_in_query_string(read_only... function test_get_query_execution_with_none_id (line 812) | async def test_get_query_execution_with_none_id(handler): function test_get_named_query_with_none_id (line 822) | async def test_get_named_query_with_none_id(handler): function test_sql_injection_prevention_insert (line 835) | async def test_sql_injection_prevention_insert(read_only_handler): function test_legitimate_select_query_allowed (line 849) | async def test_legitimate_select_query_allowed(read_only_handler, mock_a... function test_ctas_detection_in_handler (line 865) | async def test_ctas_detection_in_handler(read_only_handler): function test_write_operations_allowed_with_write_access (line 879) | async def test_write_operations_allowed_with_write_access(handler, mock_... function test_error_message_includes_query_type (line 895) | async def test_error_message_includes_query_type(read_only_handler): FILE: src/aws-dataprocessing-mcp-server/tests/handlers/athena/test_athena_workgroup_handler.py function parse_response_data (line 26) | def parse_response_data(response): function mock_athena_client (line 37) | def mock_athena_client(): function mock_aws_helper (line 43) | def mock_aws_helper(): function handler (line 62) | def handler(mock_aws_helper): function read_only_handler (line 69) | def read_only_handler(mock_aws_helper): function mock_context (line 76) | def mock_context(): function test_create_work_group_success (line 85) | async def test_create_work_group_success(handler, mock_athena_client): function test_create_work_group_missing_parameters (line 108) | async def test_create_work_group_missing_parameters(handler): function test_create_work_group_without_write_permission (line 116) | async def test_create_work_group_without_write_permission(read_only_hand... function test_delete_work_group_success (line 128) | async def test_delete_work_group_success(handler, mock_athena_client, mo... function test_delete_work_group_missing_parameters (line 148) | async def test_delete_work_group_missing_parameters(handler): function test_delete_work_group_without_write_permission (line 156) | async def test_delete_work_group_without_write_permission(read_only_hand... function test_delete_work_group_not_mcp_managed (line 168) | async def test_delete_work_group_not_mcp_managed(handler, mock_aws_helper): function test_get_work_group_success (line 186) | async def test_get_work_group_success(handler, mock_athena_client): function test_get_work_group_missing_parameters (line 210) | async def test_get_work_group_missing_parameters(handler): function test_list_work_groups_success (line 218) | async def test_list_work_groups_success(handler, mock_athena_client): function test_update_work_group_success (line 244) | async def test_update_work_group_success(handler, mock_athena_client, mo... function test_update_work_group_missing_parameters (line 272) | async def test_update_work_group_missing_parameters(handler): function test_update_work_group_without_write_permission (line 280) | async def test_update_work_group_without_write_permission(read_only_hand... function test_update_work_group_not_mcp_managed (line 295) | async def test_update_work_group_not_mcp_managed(handler, mock_aws_helper): function test_invalid_work_group_operation (line 316) | async def test_invalid_work_group_operation(handler): function test_work_group_client_error_handling (line 326) | async def test_work_group_client_error_handling(handler, mock_athena_cli... function test_delete_work_group_empty_tags (line 344) | async def test_delete_work_group_empty_tags(handler, mock_aws_helper): function test_update_work_group_empty_tags (line 360) | async def test_update_work_group_empty_tags(handler, mock_aws_helper): function test_initialization_parameters (line 382) | async def test_initialization_parameters(mock_aws_helper): function test_initialization_registers_tools (line 393) | async def test_initialization_registers_tools(mock_aws_helper): function test_create_work_group_with_minimal_parameters (line 402) | async def test_create_work_group_with_minimal_parameters(handler, mock_a... function test_delete_work_group_without_recursive_option (line 426) | async def test_delete_work_group_without_recursive_option(handler, mock_... function test_list_work_groups_with_minimal_parameters (line 442) | async def test_list_work_groups_with_minimal_parameters(handler, mock_at... function test_update_work_group_with_minimal_parameters (line 461) | async def test_update_work_group_with_minimal_parameters(handler, mock_a... function test_update_work_group_with_only_description (line 477) | async def test_update_work_group_with_only_description(handler, mock_ath... function test_update_work_group_with_only_configuration (line 498) | async def test_update_work_group_with_only_configuration(handler, mock_a... function test_update_work_group_with_only_state (line 517) | async def test_update_work_group_with_only_state(handler, mock_athena_cl... function test_get_work_group_error_handling (line 535) | async def test_get_work_group_error_handling(handler, mock_athena_client): FILE: src/aws-dataprocessing-mcp-server/tests/handlers/athena/test_custom_tags_athena.py class TestCustomTagsAthena (line 31) | class TestCustomTagsAthena: method mock_mcp (line 35) | def mock_mcp(self): method mock_ctx (line 41) | def mock_ctx(self): method data_catalog_handler_with_write_access (line 47) | def data_catalog_handler_with_write_access(self, mock_mcp): method workgroup_handler_with_write_access (line 58) | def workgroup_handler_with_write_access(self, mock_mcp): method test_create_data_catalog_with_custom_tags_enabled (line 69) | async def test_create_data_catalog_with_custom_tags_enabled( method test_delete_data_catalog_with_custom_tags_enabled (line 112) | async def test_delete_data_catalog_with_custom_tags_enabled( method test_update_data_catalog_with_custom_tags_enabled (line 143) | async def test_update_data_catalog_with_custom_tags_enabled( method test_get_data_catalog_with_custom_tags_enabled (line 182) | async def test_get_data_catalog_with_custom_tags_enabled( method test_create_workgroup_with_custom_tags_enabled (line 217) | async def test_create_workgroup_with_custom_tags_enabled( method test_delete_workgroup_with_custom_tags_enabled (line 271) | async def test_delete_workgroup_with_custom_tags_enabled( method test_update_workgroup_with_custom_tags_enabled (line 302) | async def test_update_workgroup_with_custom_tags_enabled( method test_get_workgroup_with_custom_tags_enabled (line 348) | async def test_get_workgroup_with_custom_tags_enabled( FILE: src/aws-dataprocessing-mcp-server/tests/handlers/commons/test_common_resource_handler.py class Exceptions (line 28) | class Exceptions: class NoSuchEntityException (line 31) | class NoSuchEntityException(ClientError): method __init__ (line 34) | def __init__(self): class MockIAMClient (line 43) | class MockIAMClient(Mock): method __init__ (line 48) | def __init__(self, *args, **kwargs): function mock_iam_client (line 56) | def mock_iam_client(): function mock_s3_client (line 62) | def mock_s3_client(): function mock_aws_helper (line 68) | def mock_aws_helper(): function handler (line 78) | def handler(mock_aws_helper): function read_only_handler (line 85) | def read_only_handler(mock_aws_helper): function mock_context (line 92) | def mock_context(): function test_get_policies_for_role_success (line 103) | async def test_get_policies_for_role_success(handler, mock_iam_client): function test_get_policies_for_role_with_string_assume_role_policy (line 172) | async def test_get_policies_for_role_with_string_assume_role_policy(hand... function test_get_policies_for_role_error_handling (line 212) | async def test_get_policies_for_role_error_handling(handler, mock_iam_cl... function test_add_inline_policy_success (line 229) | async def test_add_inline_policy_success(handler): function test_add_inline_policy_with_list_permissions (line 257) | async def test_add_inline_policy_with_list_permissions(handler): function test_add_inline_policy_without_write_permission (line 295) | async def test_add_inline_policy_without_write_permission(read_only_hand... function test_add_inline_policy_already_exists (line 311) | async def test_add_inline_policy_already_exists(handler, mock_iam_client): function test_create_data_processing_role_glue_success (line 334) | async def test_create_data_processing_role_glue_success(handler, mock_ia... function test_create_data_processing_role_emr_success (line 369) | async def test_create_data_processing_role_emr_success(handler, mock_iam... function test_create_data_processing_role_athena_success (line 396) | async def test_create_data_processing_role_athena_success(handler, mock_... function test_create_data_processing_role_with_inline_policy (line 420) | async def test_create_data_processing_role_with_inline_policy(handler, m... function test_create_data_processing_role_invalid_service_type (line 450) | async def test_create_data_processing_role_invalid_service_type(handler): function test_create_data_processing_role_without_write_permission (line 463) | async def test_create_data_processing_role_without_write_permission(read... function test_get_roles_for_service_success (line 476) | async def test_get_roles_for_service_success(handler, mock_iam_client): function test_get_roles_for_service_with_string_assume_role_policy (line 534) | async def test_get_roles_for_service_with_string_assume_role_policy(hand... function test_get_roles_for_service_error_handling (line 579) | async def test_get_roles_for_service_error_handling(handler, mock_iam_cl... function test_list_s3_buckets_success (line 600) | async def test_list_s3_buckets_success(handler, mock_s3_client): function test_list_s3_buckets_with_environment_region (line 633) | async def test_list_s3_buckets_with_environment_region(handler, mock_s3_... function test_list_s3_buckets_error_handling (line 649) | async def test_list_s3_buckets_error_handling(handler, mock_s3_client): function test_analyze_s3_usage_glue_connections_error (line 665) | async def test_analyze_s3_usage_glue_connections_error(handler, mock_s3_... function test_analyze_s3_usage_athena_workgroups_error (line 708) | async def test_analyze_s3_usage_athena_workgroups_error(handler, mock_s3... function test_analyze_s3_usage_athena_workgroup_details_error (line 754) | async def test_analyze_s3_usage_athena_workgroup_details_error(handler, ... function test_analyze_s3_usage_emr_clusters_error (line 805) | async def test_analyze_s3_usage_emr_clusters_error(handler, mock_s3_clie... function test_analyze_s3_usage_emr_cluster_details_error (line 850) | async def test_analyze_s3_usage_emr_cluster_details_error(handler, mock_... function test_analyze_s3_usage_last_activity_error (line 900) | async def test_analyze_s3_usage_last_activity_error(handler, mock_s3_cli... function test_analyze_s3_usage_bucket_name_hints (line 943) | async def test_analyze_s3_usage_bucket_name_hints(handler, mock_s3_client): function test_upload_to_s3_success (line 1003) | async def test_upload_to_s3_success(handler, mock_s3_client): function test_upload_to_s3_make_public (line 1030) | async def test_upload_to_s3_make_public(handler, mock_s3_client): function test_upload_to_s3_without_write_permission (line 1058) | async def test_upload_to_s3_without_write_permission(read_only_handler): function test_upload_to_s3_bucket_not_found (line 1071) | async def test_upload_to_s3_bucket_not_found(handler, mock_s3_client): function test_analyze_s3_usage_for_data_processing_success (line 1091) | async def test_analyze_s3_usage_for_data_processing_success(handler, moc... function test_analyze_s3_usage_specific_bucket (line 1140) | async def test_analyze_s3_usage_specific_bucket(handler, mock_s3_client): function test_analyze_s3_usage_bucket_not_found (line 1180) | async def test_analyze_s3_usage_bucket_not_found(handler, mock_s3_client): function test_analyze_s3_usage_error_handling (line 1200) | async def test_analyze_s3_usage_error_handling(handler, mock_s3_client): function test_get_trust_relationship_for_service_glue (line 1220) | def test_get_trust_relationship_for_service_glue(handler): function test_get_trust_relationship_for_service_emr (line 1231) | def test_get_trust_relationship_for_service_emr(handler): function test_get_trust_relationship_for_service_athena (line 1241) | def test_get_trust_relationship_for_service_athena(handler): function test_get_service_principal_known_services (line 1248) | def test_get_service_principal_known_services(handler): function test_get_service_principal_unknown_service (line 1257) | def test_get_service_principal_unknown_service(handler): function test_can_be_assumed_by_service_single_service (line 1262) | def test_can_be_assumed_by_service_single_service(handler): function test_can_be_assumed_by_service_multiple_services (line 1279) | def test_can_be_assumed_by_service_multiple_services(handler): function test_can_be_assumed_by_service_string_action (line 1297) | def test_can_be_assumed_by_service_string_action(handler): function test_can_be_assumed_by_service_deny_effect (line 1313) | def test_can_be_assumed_by_service_deny_effect(handler): function test_can_be_assumed_by_service_wrong_action (line 1330) | def test_can_be_assumed_by_service_wrong_action(handler): function test_can_be_assumed_by_service_empty_policy (line 1346) | def test_can_be_assumed_by_service_empty_policy(handler): function test_add_permissions_to_document_single_statement (line 1352) | def test_add_permissions_to_document_single_statement(handler): function test_add_permissions_to_document_multiple_statements (line 1367) | def test_add_permissions_to_document_multiple_statements(handler): function test_initialization_parameters (line 1388) | async def test_initialization_parameters(mock_aws_helper): function test_initialization_registers_tools (line 1398) | async def test_initialization_registers_tools(mock_aws_helper): function test_initialization_default_parameters (line 1416) | async def test_initialization_default_parameters(mock_aws_helper): function test_get_managed_policies_error_handling (line 1426) | async def test_get_managed_policies_error_handling(handler, mock_iam_cli... function test_create_data_processing_role_create_role_error (line 1460) | async def test_create_data_processing_role_create_role_error(handler, mo... function test_analyze_s3_usage_idle_bucket_detection (line 1479) | async def test_analyze_s3_usage_idle_bucket_detection(handler, mock_s3_c... function test_analyze_s3_usage_glue_job_detection (line 1527) | async def test_analyze_s3_usage_glue_job_detection(handler, mock_s3_clie... function test_analyze_s3_usage_glue_crawler_detection (line 1578) | async def test_analyze_s3_usage_glue_crawler_detection(handler, mock_s3_... function test_analyze_s3_usage_athena_workgroup_detection (line 1626) | async def test_analyze_s3_usage_athena_workgroup_detection(handler, mock... function test_analyze_s3_usage_emr_cluster_detection (line 1679) | async def test_analyze_s3_usage_emr_cluster_detection(handler, mock_s3_c... function test_list_s3_buckets_us_east_1_location_constraint (line 1727) | async def test_list_s3_buckets_us_east_1_location_constraint(handler, mo... function test_list_s3_buckets_truncated_objects (line 1757) | async def test_list_s3_buckets_truncated_objects(handler, mock_s3_client): function test_upload_to_s3_us_east_1_location_constraint (line 1790) | async def test_upload_to_s3_us_east_1_location_constraint(handler, mock_... function test_can_be_assumed_by_service_list_actions (line 1819) | def test_can_be_assumed_by_service_list_actions(handler): function test_can_be_assumed_by_service_no_principal_service (line 1835) | def test_can_be_assumed_by_service_no_principal_service(handler): function test_list_s3_buckets_bucket_location_error (line 1852) | async def test_list_s3_buckets_bucket_location_error(handler, mock_s3_cl... function test_list_s3_buckets_list_objects_error (line 1876) | async def test_list_s3_buckets_list_objects_error(handler, mock_s3_client): function test_upload_to_s3_bucket_access_denied (line 1903) | async def test_upload_to_s3_bucket_access_denied(handler, mock_s3_client): function test_create_data_processing_role_attach_policy_error (line 1923) | async def test_create_data_processing_role_attach_policy_error(handler, ... function test_create_data_processing_role_inline_policy_error (line 1951) | async def test_create_data_processing_role_inline_policy_error(handler, ... FILE: src/aws-dataprocessing-mcp-server/tests/handlers/emr/test_custom_tags_emr.py class TestCustomTagsEmr (line 28) | class TestCustomTagsEmr: method mock_mcp (line 32) | def mock_mcp(self): method mock_ctx (line 38) | def mock_ctx(self): method handler_with_write_access (line 44) | def handler_with_write_access(self, mock_mcp): method test_create_cluster_with_custom_tags_enabled (line 55) | async def test_create_cluster_with_custom_tags_enabled( method test_terminate_cluster_with_custom_tags_enabled (line 132) | async def test_terminate_cluster_with_custom_tags_enabled( method test_add_steps_with_custom_tags_enabled (line 161) | async def test_add_steps_with_custom_tags_enabled(self, handler_with_w... method test_get_cluster_with_custom_tags_enabled (line 207) | async def test_get_cluster_with_custom_tags_enabled(self, handler_with... method test_list_clusters_with_custom_tags_enabled (line 238) | async def test_list_clusters_with_custom_tags_enabled( FILE: src/aws-dataprocessing-mcp-server/tests/handlers/emr/test_custom_tags_emr_serverless.py class TestCustomTagsEmrServerless (line 31) | class TestCustomTagsEmrServerless: method mock_mcp (line 35) | def mock_mcp(self): method mock_ctx (line 41) | def mock_ctx(self): method application_handler_with_write_access (line 47) | def application_handler_with_write_access(self, mock_mcp): method job_run_handler_with_write_access (line 58) | def job_run_handler_with_write_access(self, mock_mcp): method test_create_application_with_custom_tags_enabled (line 69) | async def test_create_application_with_custom_tags_enabled( method test_update_application_with_custom_tags_enabled (line 115) | async def test_update_application_with_custom_tags_enabled( method test_delete_application_with_custom_tags_enabled (line 151) | async def test_delete_application_with_custom_tags_enabled( method test_get_application_with_custom_tags_enabled (line 184) | async def test_get_application_with_custom_tags_enabled( method test_list_applications_with_custom_tags_enabled (line 222) | async def test_list_applications_with_custom_tags_enabled( method test_start_application_with_custom_tags_enabled (line 260) | async def test_start_application_with_custom_tags_enabled( method test_stop_application_with_custom_tags_enabled (line 293) | async def test_stop_application_with_custom_tags_enabled( method test_start_job_run_with_custom_tags_enabled (line 326) | async def test_start_job_run_with_custom_tags_enabled( method test_get_job_run_with_custom_tags_enabled (line 371) | async def test_get_job_run_with_custom_tags_enabled( method test_cancel_job_run_with_custom_tags_enabled (line 408) | async def test_cancel_job_run_with_custom_tags_enabled( method test_list_job_runs_with_custom_tags_enabled (line 442) | async def test_list_job_runs_with_custom_tags_enabled( method test_get_dashboard_for_job_run_with_custom_tags_enabled (line 479) | async def test_get_dashboard_for_job_run_with_custom_tags_enabled( FILE: src/aws-dataprocessing-mcp-server/tests/handlers/emr/test_emr_ec2_cluster_handler.py function mock_aws_helper (line 30) | def mock_aws_helper(): function handler (line 44) | def handler(mock_aws_helper): function mock_context (line 52) | def mock_context(): function test_create_cluster_success (line 58) | async def test_create_cluster_success(handler, mock_context): function test_create_cluster_missing_name (line 101) | async def test_create_cluster_missing_name(handler, mock_context): function test_create_cluster_missing_release_label (line 128) | async def test_create_cluster_missing_release_label(handler, mock_context): function test_create_cluster_missing_instances (line 155) | async def test_create_cluster_missing_instances(handler, mock_context): function test_create_cluster_error (line 173) | async def test_create_cluster_error(handler, mock_context): function test_describe_cluster_success (line 200) | async def test_describe_cluster_success(handler, mock_context): function test_describe_cluster_missing_id (line 224) | async def test_describe_cluster_missing_id(handler, mock_context): function test_create_cluster_no_write_access (line 236) | async def test_create_cluster_no_write_access(mock_aws_helper, mock_cont... function test_terminate_clusters_no_write_access (line 257) | async def test_terminate_clusters_no_write_access(mock_aws_helper, mock_... function test_describe_cluster_aws_error (line 276) | async def test_describe_cluster_aws_error(handler, mock_context): function test_create_cluster_access_denied (line 294) | async def test_create_cluster_access_denied(handler, mock_context): function test_list_clusters_success (line 317) | async def test_list_clusters_success(handler, mock_context): function test_terminate_clusters_success (line 346) | async def test_terminate_clusters_success(handler, mock_context): function test_terminate_clusters_unmanaged (line 376) | async def test_terminate_clusters_unmanaged(handler, mock_aws_helper, mo... function test_terminate_clusters_missing_ids (line 394) | async def test_terminate_clusters_missing_ids(handler, mock_context): function test_modify_cluster_success (line 406) | async def test_modify_cluster_success(handler, mock_context): function test_modify_cluster_unmanaged (line 429) | async def test_modify_cluster_unmanaged(handler, mock_aws_helper, mock_c... function test_modify_cluster_missing_params (line 450) | async def test_modify_cluster_missing_params(handler, mock_context): function test_modify_cluster_attributes_success (line 462) | async def test_modify_cluster_attributes_success(handler, mock_context): function test_modify_cluster_attributes_unmanaged (line 484) | async def test_modify_cluster_attributes_unmanaged(handler, mock_aws_hel... function test_modify_cluster_attributes_missing_params (line 503) | async def test_modify_cluster_attributes_missing_params(handler, mock_co... function test_create_security_configuration_success (line 522) | async def test_create_security_configuration_success(handler, mock_conte... function test_create_security_configuration_missing_params (line 547) | async def test_create_security_configuration_missing_params(handler, moc... function test_invalid_operation (line 562) | async def test_invalid_operation(handler, mock_context): function test_create_cluster_with_optional_params (line 572) | async def test_create_cluster_with_optional_params(handler, mock_context): function test_create_error_response_coverage (line 604) | async def test_create_error_response_coverage(handler, mock_context): function test_modify_cluster_missing_step_concurrency (line 616) | async def test_modify_cluster_missing_step_concurrency(handler, mock_con... function test_modify_cluster_attributes_both_params (line 634) | async def test_modify_cluster_attributes_both_params(handler, mock_conte... function test_terminate_clusters_describe_exception (line 654) | async def test_terminate_clusters_describe_exception(handler, mock_aws_h... function test_list_clusters_with_all_params (line 671) | async def test_list_clusters_with_all_params(handler, mock_context): function test_delete_security_configuration_success (line 695) | async def test_delete_security_configuration_success(handler, mock_conte... function test_delete_security_configuration_missing_name (line 716) | async def test_delete_security_configuration_missing_name(handler, mock_... function test_describe_security_configuration_success (line 728) | async def test_describe_security_configuration_success(handler, mock_con... function test_describe_security_configuration_missing_name (line 754) | async def test_describe_security_configuration_missing_name(handler, moc... function test_list_security_configurations_success (line 766) | async def test_list_security_configurations_success(handler, mock_context): function test_create_cluster_all_optional_params (line 793) | async def test_create_cluster_all_optional_params(handler, mock_context): function test_create_security_configuration_string_datetime (line 851) | async def test_create_security_configuration_string_datetime(handler, mo... function test_describe_security_configuration_string_datetime (line 876) | async def test_describe_security_configuration_string_datetime(handler, ... function test_modify_cluster_no_write_access (line 901) | async def test_modify_cluster_no_write_access(mock_aws_helper, mock_cont... function test_modify_cluster_attributes_no_write_access (line 921) | async def test_modify_cluster_attributes_no_write_access(mock_aws_helper... function test_create_security_configuration_no_write_access (line 942) | async def test_create_security_configuration_no_write_access(mock_aws_he... function test_delete_security_configuration_no_write_access (line 963) | async def test_delete_security_configuration_no_write_access(mock_aws_he... FILE: src/aws-dataprocessing-mcp-server/tests/handlers/emr/test_emr_ec2_instance_handler.py class MockResponse (line 38) | class MockResponse: method __init__ (line 41) | def __init__(self, data): method __getitem__ (line 45) | def __getitem__(self, key): method get (line 49) | def get(self, key, default=None): function mock_context (line 55) | def mock_context(): function emr_handler_with_write_access (line 64) | def emr_handler_with_write_access(): function emr_handler_without_write_access (line 77) | def emr_handler_without_write_access(): class TestEMRHandlerInitialization (line 89) | class TestEMRHandlerInitialization: method test_handler_initialization (line 92) | def test_handler_initialization(self): method test_handler_with_permissions (line 116) | def test_handler_with_permissions(self): class TestWriteOperationsPermissions (line 135) | class TestWriteOperationsPermissions: method test_write_operations_denied_without_permission (line 147) | async def test_write_operations_denied_without_permission( method test_read_operations_allowed_without_permission (line 166) | async def test_read_operations_allowed_without_permission( class TestParameterValidation (line 200) | class TestParameterValidation: method test_invalid_operation_returns_error (line 203) | async def test_invalid_operation_returns_error( method test_add_instance_fleet_parameter_validation (line 215) | async def test_add_instance_fleet_parameter_validation( method test_add_instance_groups_parameter_validation (line 256) | async def test_add_instance_groups_parameter_validation( method test_modify_instance_fleet_parameter_validation (line 301) | async def test_modify_instance_fleet_parameter_validation( method test_modify_instance_groups_parameter_validation (line 322) | async def test_modify_instance_groups_parameter_validation( method test_list_operations_parameter_validation (line 342) | async def test_list_operations_parameter_validation( class TestDirectParameterValidation (line 391) | class TestDirectParameterValidation: method test_add_instance_fleet_missing_cluster_id (line 394) | async def test_add_instance_fleet_missing_cluster_id( method test_add_instance_fleet_missing_instance_fleet (line 406) | async def test_add_instance_fleet_missing_instance_fleet( method test_add_instance_groups_missing_cluster_id (line 418) | async def test_add_instance_groups_missing_cluster_id( method test_add_instance_groups_missing_instance_groups (line 436) | async def test_add_instance_groups_missing_instance_groups( method test_modify_instance_fleet_missing_cluster_id (line 448) | async def test_modify_instance_fleet_missing_cluster_id( method test_modify_instance_fleet_missing_instance_fleet_id (line 464) | async def test_modify_instance_fleet_missing_instance_fleet_id( method test_modify_instance_fleet_missing_instance_fleet_config (line 480) | async def test_modify_instance_fleet_missing_instance_fleet_config( method test_modify_instance_groups_missing_instance_group_configs (line 496) | async def test_modify_instance_groups_missing_instance_group_configs( method test_list_instance_fleets_missing_cluster_id (line 509) | async def test_list_instance_fleets_missing_cluster_id( method test_list_instances_missing_cluster_id (line 523) | async def test_list_instances_missing_cluster_id( method test_list_supported_instance_types_missing_release_label (line 535) | async def test_list_supported_instance_types_missing_release_label( class TestAddInstanceFleet (line 550) | class TestAddInstanceFleet: method test_add_instance_fleet_success (line 553) | async def test_add_instance_fleet_success(self, emr_handler_with_write... method test_add_instance_fleet_aws_error (line 621) | async def test_add_instance_fleet_aws_error(self, emr_handler_with_wri... class TestAddInstanceGroups (line 651) | class TestAddInstanceGroups: method test_add_instance_groups_success (line 654) | async def test_add_instance_groups_success(self, emr_handler_with_writ... class TestModifyInstanceFleet (line 715) | class TestModifyInstanceFleet: method mock_aws_helper (line 719) | def mock_aws_helper(self): method test_modify_instance_fleet_success (line 730) | async def test_modify_instance_fleet_success( method test_modify_instance_fleet_unmanaged_resource (line 773) | async def test_modify_instance_fleet_unmanaged_resource( method test_modify_instance_fleet_aws_error (line 796) | async def test_modify_instance_fleet_aws_error( class TestModifyInstanceGroups (line 829) | class TestModifyInstanceGroups: method mock_aws_helper (line 833) | def mock_aws_helper(self): method test_modify_instance_groups_success (line 844) | async def test_modify_instance_groups_success( method test_modify_instance_groups_unmanaged_resource (line 895) | async def test_modify_instance_groups_unmanaged_resource( method test_modify_instance_groups_missing_cluster_id (line 917) | async def test_modify_instance_groups_missing_cluster_id( class TestListInstanceFleets (line 936) | class TestListInstanceFleets: method test_list_instance_fleets_success (line 939) | async def test_list_instance_fleets_success(self, emr_handler_with_wri... method test_list_instance_fleets_with_marker (line 991) | async def test_list_instance_fleets_with_marker( class TestListInstances (line 1029) | class TestListInstances: method test_list_instances_success (line 1032) | async def test_list_instances_success(self, emr_handler_with_write_acc... method test_list_instances_with_filters (line 1090) | async def test_list_instances_with_filters(self, emr_handler_with_writ... method test_list_instances_with_instance_fleet_type (line 1133) | async def test_list_instances_with_instance_fleet_type( class TestListSupportedInstanceTypes (line 1162) | class TestListSupportedInstanceTypes: method test_list_supported_instance_types_success (line 1165) | async def test_list_supported_instance_types_success( method test_list_supported_instance_types_with_marker (line 1219) | async def test_list_supported_instance_types_with_marker( FILE: src/aws-dataprocessing-mcp-server/tests/handlers/emr/test_emr_ec2_steps_handler.py function mock_context (line 34) | def mock_context(): function steps_handler_with_write_access (line 42) | def steps_handler_with_write_access(): function mock_aws_helper (line 55) | def mock_aws_helper(): function steps_handler_without_write_access (line 69) | def steps_handler_without_write_access(): class TestEMRStepsHandlerInitialization (line 81) | class TestEMRStepsHandlerInitialization: method test_handler_initialization (line 84) | def test_handler_initialization(self): class TestWriteOperationsPermissions (line 103) | class TestWriteOperationsPermissions: method test_write_operations_denied_without_permission (line 107) | async def test_write_operations_denied_without_permission( method test_read_operations_allowed_without_permission (line 122) | async def test_read_operations_allowed_without_permission( class TestAddSteps (line 150) | class TestAddSteps: method test_add_steps_success (line 153) | async def test_add_steps_success(self, steps_handler_with_write_access... method test_add_steps_with_execution_role (line 193) | async def test_add_steps_with_execution_role( method test_add_steps_missing_steps_parameter (line 224) | async def test_add_steps_missing_steps_parameter( class TestCancelSteps (line 235) | class TestCancelSteps: method test_cancel_steps_success (line 238) | async def test_cancel_steps_success( method test_cancel_steps_for_unmanaged_resource (line 272) | async def test_cancel_steps_for_unmanaged_resource( method test_cancel_steps_with_cancellation_option (line 292) | async def test_cancel_steps_with_cancellation_option( method test_cancel_steps_missing_step_ids (line 319) | async def test_cancel_steps_missing_step_ids( method test_cancel_steps_invalid_step_id (line 329) | async def test_cancel_steps_invalid_step_id( class TestDescribeStep (line 343) | class TestDescribeStep: method test_describe_step_success (line 346) | async def test_describe_step_success(self, steps_handler_with_write_ac... method test_describe_step_missing_step_id (line 376) | async def test_describe_step_missing_step_id( class TestListSteps (line 396) | class TestListSteps: method test_list_steps_success (line 399) | async def test_list_steps_success(self, steps_handler_with_write_acces... method test_list_steps_with_filters (line 421) | async def test_list_steps_with_filters(self, steps_handler_with_write_... method test_list_steps_invalid_step_state (line 444) | async def test_list_steps_invalid_step_state( class TestErrorHandling (line 467) | class TestErrorHandling: method test_invalid_operation (line 470) | async def test_invalid_operation(self, steps_handler_with_write_access... method test_aws_client_error (line 479) | async def test_aws_client_error(self, steps_handler_with_write_access,... FILE: src/aws-dataprocessing-mcp-server/tests/handlers/emr/test_emr_serverless_application_handler.py class TestEMRServerlessApplicationHandler (line 27) | class TestEMRServerlessApplicationHandler: method mock_mcp (line 31) | def mock_mcp(self): method mock_ctx (line 36) | def mock_ctx(self): method mock_emr_serverless_client (line 43) | def mock_emr_serverless_client(self): method handler_read_only (line 48) | def handler_read_only(self, mock_mcp): method handler_with_write (line 58) | def handler_with_write(self, mock_mcp): method extract_data_from_result (line 67) | def extract_data_from_result(self, result: CallToolResult) -> dict: method test_create_application_success (line 79) | async def test_create_application_success(self, handler_with_write, mo... method test_create_application_missing_required_params (line 145) | async def test_create_application_missing_required_params(self, handle... method test_create_application_write_access_denied (line 157) | async def test_create_application_write_access_denied(self, handler_re... method test_create_application_aws_error (line 171) | async def test_create_application_aws_error(self, handler_with_write, ... method test_get_application_success (line 197) | async def test_get_application_success(self, handler_read_only, mock_c... method test_get_application_missing_id (line 238) | async def test_get_application_missing_id(self, handler_read_only, moc... method test_get_application_not_found (line 249) | async def test_get_application_not_found(self, handler_read_only, mock... method test_update_application_success (line 267) | async def test_update_application_success(self, handler_with_write, mo... method test_update_application_not_managed_by_mcp (line 309) | async def test_update_application_not_managed_by_mcp(self, handler_wit... method test_delete_application_success (line 333) | async def test_delete_application_success(self, handler_with_write, mo... method test_delete_application_validation_error (line 358) | async def test_delete_application_validation_error(self, handler_with_... method test_list_applications_success (line 387) | async def test_list_applications_success(self, handler_read_only, mock... method test_list_applications_with_pagination (line 435) | async def test_list_applications_with_pagination(self, handler_read_on... method test_start_application_success (line 469) | async def test_start_application_success(self, handler_with_write, moc... method test_stop_application_success (line 493) | async def test_stop_application_success(self, handler_with_write, mock... method test_invalid_operation (line 518) | async def test_invalid_operation(self, handler_read_only, mock_ctx): method test_create_application_with_comprehensive_config (line 529) | async def test_create_application_with_comprehensive_config( method test_concurrent_modification_error (line 653) | async def test_concurrent_modification_error(self, handler_with_write,... method test_throttling_error (line 682) | async def test_throttling_error(self, handler_read_only, mock_ctx): method test_generic_exception_handling (line 698) | async def test_generic_exception_handling(self, handler_read_only, moc... FILE: src/aws-dataprocessing-mcp-server/tests/handlers/emr/test_emr_serverless_job_run_handler.py class TestEMRServerlessJobRunHandler (line 27) | class TestEMRServerlessJobRunHandler: method mock_mcp (line 31) | def mock_mcp(self): method mock_ctx (line 36) | def mock_ctx(self): method mock_emr_serverless_client (line 43) | def mock_emr_serverless_client(self): method handler_read_only (line 48) | def handler_read_only(self, mock_mcp): method handler_with_write (line 58) | def handler_with_write(self, mock_mcp): method extract_data_from_result (line 67) | def extract_data_from_result(self, result: CallToolResult) -> dict: method test_start_job_run_success (line 79) | async def test_start_job_run_success(self, handler_with_write, mock_ctx): method test_start_job_run_missing_required_params (line 166) | async def test_start_job_run_missing_required_params(self, handler_wit... method test_start_job_run_write_access_denied (line 181) | async def test_start_job_run_write_access_denied(self, handler_read_on... method test_start_job_run_aws_error (line 195) | async def test_start_job_run_aws_error(self, handler_with_write, mock_... method test_get_job_run_success (line 221) | async def test_get_job_run_success(self, handler_read_only, mock_ctx): method test_get_job_run_missing_params (line 287) | async def test_get_job_run_missing_params(self, handler_read_only, moc... method test_get_job_run_not_found (line 299) | async def test_get_job_run_not_found(self, handler_read_only, mock_ctx): method test_cancel_job_run_success (line 318) | async def test_cancel_job_run_success(self, handler_with_write, mock_c... method test_cancel_job_run_validation_error (line 342) | async def test_cancel_job_run_validation_error(self, handler_with_writ... method test_list_job_runs_success (line 366) | async def test_list_job_runs_success(self, handler_read_only, mock_ctx): method test_list_job_runs_with_pagination (line 419) | async def test_list_job_runs_with_pagination(self, handler_read_only, ... method test_list_job_runs_missing_application_id (line 453) | async def test_list_job_runs_missing_application_id(self, handler_read... method test_get_dashboard_for_job_run_success (line 465) | async def test_get_dashboard_for_job_run_success(self, handler_read_on... method test_get_dashboard_for_job_run_missing_params (line 494) | async def test_get_dashboard_for_job_run_missing_params(self, handler_... method test_start_job_run_spark_sql_driver (line 506) | async def test_start_job_run_spark_sql_driver(self, handler_with_write... method test_start_job_run_hive_driver (line 543) | async def test_start_job_run_hive_driver(self, handler_with_write, moc... method test_start_job_run_comprehensive_config (line 582) | async def test_start_job_run_comprehensive_config(self, handler_with_w... method test_invalid_operation (line 687) | async def test_invalid_operation(self, handler_read_only, mock_ctx): method test_concurrent_modification_error (line 698) | async def test_concurrent_modification_error(self, handler_with_write,... method test_throttling_error (line 721) | async def test_throttling_error(self, handler_read_only, mock_ctx): method test_generic_exception_handling (line 737) | async def test_generic_exception_handling(self, handler_read_only, moc... method test_get_job_run_with_resource_utilization (line 756) | async def test_get_job_run_with_resource_utilization(self, handler_rea... method test_list_job_runs_with_date_range (line 798) | async def test_list_job_runs_with_date_range(self, handler_read_only, ... FILE: src/aws-dataprocessing-mcp-server/tests/handlers/glue/test_crawler_handler.py function mock_mcp (line 9) | def mock_mcp(): function mock_context (line 17) | def mock_context(): function handler (line 25) | def handler(mock_mcp): function no_write_handler (line 36) | def no_write_handler(mock_mcp): class TestCrawlerHandler (line 46) | class TestCrawlerHandler: method test_init (line 50) | async def test_init(self, mock_mcp): method test_manage_aws_glue_crawlers_create_success (line 75) | async def test_manage_aws_glue_crawlers_create_success(self, handler, ... method test_manage_aws_glue_crawlers_create_no_write_access (line 113) | async def test_manage_aws_glue_crawlers_create_no_write_access( method test_manage_aws_glue_crawlers_create_missing_role (line 132) | async def test_manage_aws_glue_crawlers_create_missing_role(self, hand... method test_manage_aws_glue_crawlers_create_missing_targets (line 143) | async def test_manage_aws_glue_crawlers_create_missing_targets(self, h... method test_manage_aws_glue_crawlers_delete_success (line 154) | async def test_manage_aws_glue_crawlers_delete_success(self, handler, ... method test_manage_aws_glue_crawlers_delete_not_mcp_managed (line 181) | async def test_manage_aws_glue_crawlers_delete_not_mcp_managed(self, h... method test_manage_aws_glue_crawlers_delete_no_write_access (line 205) | async def test_manage_aws_glue_crawlers_delete_no_write_access( method test_manage_aws_glue_crawlers_get_crawler_success (line 218) | async def test_manage_aws_glue_crawlers_get_crawler_success(self, hand... method test_manage_aws_glue_crawlers_get_crawler_no_write_access (line 244) | async def test_manage_aws_glue_crawlers_get_crawler_no_write_access( method test_manage_aws_glue_crawlers_get_crawlers_success (line 271) | async def test_manage_aws_glue_crawlers_get_crawlers_success(self, han... method test_manage_aws_glue_crawlers_start_crawler_success (line 298) | async def test_manage_aws_glue_crawlers_start_crawler_success(self, ha... method test_manage_aws_glue_crawlers_start_crawler_no_write_access (line 316) | async def test_manage_aws_glue_crawlers_start_crawler_no_write_access( method test_manage_aws_glue_crawlers_stop_crawler_success (line 329) | async def test_manage_aws_glue_crawlers_stop_crawler_success(self, han... method test_manage_aws_glue_crawlers_stop_crawler_no_write_access (line 347) | async def test_manage_aws_glue_crawlers_stop_crawler_no_write_access( method test_manage_aws_glue_crawlers_batch_get_crawlers_success (line 360) | async def test_manage_aws_glue_crawlers_batch_get_crawlers_success( method test_manage_aws_glue_crawlers_list_crawlers_success (line 392) | async def test_manage_aws_glue_crawlers_list_crawlers_success(self, ha... method test_manage_aws_glue_crawlers_update_crawler_success (line 421) | async def test_manage_aws_glue_crawlers_update_crawler_success(self, h... method test_manage_aws_glue_crawlers_update_crawler_no_write_access (line 449) | async def test_manage_aws_glue_crawlers_update_crawler_no_write_access( method test_manage_aws_glue_crawlers_invalid_operation (line 468) | async def test_manage_aws_glue_crawlers_invalid_operation(self, handle... method test_manage_aws_glue_crawlers_missing_crawler_name (line 478) | async def test_manage_aws_glue_crawlers_missing_crawler_name(self, han... method test_manage_aws_glue_crawlers_missing_crawler_definition (line 502) | async def test_manage_aws_glue_crawlers_missing_crawler_definition( method test_manage_aws_glue_crawlers_missing_crawler_names (line 521) | async def test_manage_aws_glue_crawlers_missing_crawler_names(self, ha... method test_manage_aws_glue_crawlers_error_handling (line 531) | async def test_manage_aws_glue_crawlers_error_handling(self, handler, ... method test_manage_aws_glue_crawlers_client_error (line 546) | async def test_manage_aws_glue_crawlers_client_error(self, handler, mo... method test_manage_aws_glue_crawlers_delete_client_error (line 563) | async def test_manage_aws_glue_crawlers_delete_client_error(self, hand... method test_manage_aws_glue_classifiers_create_success (line 590) | async def test_manage_aws_glue_classifiers_create_success(self, handle... method test_manage_aws_glue_classifiers_create_no_write_access (line 618) | async def test_manage_aws_glue_classifiers_create_no_write_access( method test_manage_aws_glue_classifiers_create_missing_definition (line 635) | async def test_manage_aws_glue_classifiers_create_missing_definition( method test_manage_aws_glue_classifiers_create_invalid_definition (line 645) | async def test_manage_aws_glue_classifiers_create_invalid_definition( method test_manage_aws_glue_classifiers_delete_success (line 657) | async def test_manage_aws_glue_classifiers_delete_success(self, handle... method test_manage_aws_glue_classifiers_delete_no_write_access (line 675) | async def test_manage_aws_glue_classifiers_delete_no_write_access( method test_manage_aws_glue_classifiers_get_classifier_success (line 688) | async def test_manage_aws_glue_classifiers_get_classifier_success(self... method test_manage_aws_glue_classifiers_get_classifiers_success (line 710) | async def test_manage_aws_glue_classifiers_get_classifiers_success( method test_manage_aws_glue_classifiers_update_success (line 741) | async def test_manage_aws_glue_classifiers_update_success(self, handle... method test_manage_aws_glue_classifiers_update_no_write_access (line 767) | async def test_manage_aws_glue_classifiers_update_no_write_access( method test_manage_aws_glue_classifiers_invalid_operation (line 784) | async def test_manage_aws_glue_classifiers_invalid_operation(self, han... method test_manage_aws_glue_classifiers_missing_classifier_name (line 794) | async def test_manage_aws_glue_classifiers_missing_classifier_name( method test_manage_aws_glue_classifiers_error_handling (line 809) | async def test_manage_aws_glue_classifiers_error_handling(self, handle... method test_manage_aws_glue_crawler_management_get_metrics_success (line 825) | async def test_manage_aws_glue_crawler_management_get_metrics_success( method test_manage_aws_glue_crawler_management_start_schedule_success (line 869) | async def test_manage_aws_glue_crawler_management_start_schedule_success( method test_manage_aws_glue_crawler_management_start_schedule_no_write_access (line 891) | async def test_manage_aws_glue_crawler_management_start_schedule_no_wr... method test_manage_aws_glue_crawler_management_stop_schedule_success (line 904) | async def test_manage_aws_glue_crawler_management_stop_schedule_success( method test_manage_aws_glue_crawler_management_stop_schedule_no_write_access (line 926) | async def test_manage_aws_glue_crawler_management_stop_schedule_no_wri... method test_manage_aws_glue_crawler_management_update_schedule_success (line 939) | async def test_manage_aws_glue_crawler_management_update_schedule_succ... method test_manage_aws_glue_crawler_management_update_schedule_missing_schedule (line 964) | async def test_manage_aws_glue_crawler_management_update_schedule_miss... method test_manage_aws_glue_crawler_management_invalid_operation (line 977) | async def test_manage_aws_glue_crawler_management_invalid_operation( method test_manage_aws_glue_crawler_management_missing_crawler_name (line 989) | async def test_manage_aws_glue_crawler_management_missing_crawler_name( method test_manage_aws_glue_crawler_management_error_handling (line 1012) | async def test_manage_aws_glue_crawler_management_error_handling(self,... method test_manage_aws_glue_crawlers_update_crawler_schedule_no_write_access (line 1027) | async def test_manage_aws_glue_crawlers_update_crawler_schedule_no_wri... method test_manage_aws_glue_crawlers_delete_with_parameters (line 1043) | async def test_manage_aws_glue_crawlers_delete_with_parameters(self, h... method test_manage_aws_glue_crawlers_get_crawler_error (line 1072) | async def test_manage_aws_glue_crawlers_get_crawler_error(self, handle... method test_manage_aws_glue_classifiers_create_grok_classifier (line 1084) | async def test_manage_aws_glue_classifiers_create_grok_classifier(self... method test_manage_aws_glue_classifiers_create_xml_classifier (line 1110) | async def test_manage_aws_glue_classifiers_create_xml_classifier(self,... method test_manage_aws_glue_classifiers_create_json_classifier (line 1136) | async def test_manage_aws_glue_classifiers_create_json_classifier(self... method test_manage_aws_glue_classifiers_update_grok_classifier (line 1158) | async def test_manage_aws_glue_classifiers_update_grok_classifier(self... method test_manage_aws_glue_classifiers_update_xml_classifier (line 1184) | async def test_manage_aws_glue_classifiers_update_xml_classifier(self,... method test_manage_aws_glue_classifiers_update_json_classifier (line 1210) | async def test_manage_aws_glue_classifiers_update_json_classifier(self... method test_manage_aws_glue_classifiers_client_error (line 1232) | async def test_manage_aws_glue_classifiers_client_error(self, handler,... method test_manage_aws_glue_crawler_management_update_schedule_no_write_access (line 1251) | async def test_manage_aws_glue_crawler_management_update_schedule_no_w... method test_manage_aws_glue_crawler_management_client_error (line 1267) | async def test_manage_aws_glue_crawler_management_client_error(self, h... FILE: src/aws-dataprocessing-mcp-server/tests/handlers/glue/test_custom_tags_glue.py class TestCustomTagsGlue (line 28) | class TestCustomTagsGlue: method mock_mcp (line 32) | def mock_mcp(self): method mock_ctx (line 38) | def mock_ctx(self): method mock_database_manager (line 44) | def mock_database_manager(self): method mock_table_manager (line 50) | def mock_table_manager(self): method mock_catalog_manager (line 56) | def mock_catalog_manager(self): method handler_with_write_access (line 62) | def handler_with_write_access( method test_create_database_with_custom_tags_enabled (line 87) | async def test_create_database_with_custom_tags_enabled( method test_create_table_with_custom_tags_enabled (line 130) | async def test_create_table_with_custom_tags_enabled( method test_create_connection_with_custom_tags_enabled (line 196) | async def test_create_connection_with_custom_tags_enabled( method test_create_partition_with_custom_tags_enabled (line 251) | async def test_create_partition_with_custom_tags_enabled( method test_create_catalog_with_custom_tags_enabled (line 321) | async def test_create_catalog_with_custom_tags_enabled( method test_delete_database_with_custom_tags_enabled (line 364) | async def test_delete_database_with_custom_tags_enabled( method test_delete_table_with_custom_tags_enabled (line 395) | async def test_delete_table_with_custom_tags_enabled( method test_delete_connection_with_custom_tags_enabled (line 431) | async def test_delete_connection_with_custom_tags_enabled( method test_delete_partition_with_custom_tags_enabled (line 466) | async def test_delete_partition_with_custom_tags_enabled( method test_delete_catalog_with_custom_tags_enabled (line 505) | async def test_delete_catalog_with_custom_tags_enabled( FILE: src/aws-dataprocessing-mcp-server/tests/handlers/glue/test_data_catalog_handler.py class TestGlueDataCatalogHandler (line 25) | class TestGlueDataCatalogHandler: method mock_mcp (line 29) | def mock_mcp(self): method mock_ctx (line 35) | def mock_ctx(self): method mock_database_manager (line 41) | def mock_database_manager(self): method mock_table_manager (line 47) | def mock_table_manager(self): method mock_catalog_manager (line 53) | def mock_catalog_manager(self): method handler (line 59) | def handler(self, mock_mcp, mock_database_manager, mock_table_manager,... method handler_with_write_access (line 82) | def handler_with_write_access( method test_initialization (line 106) | def test_initialization(self, mock_mcp): method test_initialization_with_write_access (line 136) | def test_initialization_with_write_access(self, mock_mcp): method test_initialization_with_sensitive_data_access (line 150) | def test_initialization_with_sensitive_data_access(self, mock_mcp): method test_manage_aws_glue_data_catalog_databases_create_no_write_access (line 165) | async def test_manage_aws_glue_data_catalog_databases_create_no_write_... method test_manage_aws_glue_data_catalog_databases_delete_no_write_access (line 179) | async def test_manage_aws_glue_data_catalog_databases_delete_no_write_... method test_manage_aws_glue_data_catalog_databases_update_no_write_access (line 196) | async def test_manage_aws_glue_data_catalog_databases_update_no_write_... method test_manage_aws_glue_data_catalog_databases_get_read_access (line 214) | async def test_manage_aws_glue_data_catalog_databases_get_read_access( method test_manage_aws_glue_data_catalog_databases_get_missing_database_name (line 250) | async def test_manage_aws_glue_data_catalog_databases_get_missing_data... method test_manage_aws_glue_data_catalog_databases_list_read_access (line 261) | async def test_manage_aws_glue_data_catalog_databases_list_read_access( method test_manage_aws_glue_data_catalog_databases_create_with_write_access (line 304) | async def test_manage_aws_glue_data_catalog_databases_create_with_writ... method test_manage_aws_glue_data_catalog_databases_delete_with_write_access (line 341) | async def test_manage_aws_glue_data_catalog_databases_delete_with_writ... method test_manage_aws_glue_data_catalog_databases_delete_missing_database_name (line 370) | async def test_manage_aws_glue_data_catalog_databases_delete_missing_d... method test_manage_aws_glue_data_catalog_databases_update_missing_database_name (line 381) | async def test_manage_aws_glue_data_catalog_databases_update_missing_d... method test_manage_aws_glue_data_catalog_databases_update_with_read_access (line 392) | async def test_manage_aws_glue_data_catalog_databases_update_with_read... method test_manage_aws_glue_data_catalog_databases_update_with_write_access (line 404) | async def test_manage_aws_glue_data_catalog_databases_update_with_writ... method test_manage_aws_glue_data_catalog_databases_invalid_operation (line 441) | async def test_manage_aws_glue_data_catalog_databases_invalid_operation( method test_manage_aws_glue_data_catalog_databases_missing_database_name (line 458) | async def test_manage_aws_glue_data_catalog_databases_missing_database... method test_manage_aws_glue_data_catalog_databases_exception_handling (line 472) | async def test_manage_aws_glue_data_catalog_databases_exception_handling( method test_manage_aws_glue_data_catalog_tables_create_no_write_access (line 494) | async def test_manage_aws_glue_data_catalog_tables_create_no_write_acc... method test_manage_aws_glue_data_catalog_tables_get_read_access (line 512) | async def test_manage_aws_glue_data_catalog_tables_get_read_access( method test_manage_aws_glue_data_catalog_connections_create_no_write_access (line 547) | async def test_manage_aws_glue_data_catalog_connections_create_no_writ... method test_manage_aws_glue_data_catalog_connections_get_read_access (line 564) | async def test_manage_aws_glue_data_catalog_connections_get_read_access( method test_manage_aws_glue_data_catalog_partitions_create_no_write_access (line 605) | async def test_manage_aws_glue_data_catalog_partitions_create_no_write... method test_manage_aws_glue_data_catalog_partitions_get_read_access (line 624) | async def test_manage_aws_glue_data_catalog_partitions_get_read_access( method test_manage_aws_glue_data_catalog_create_no_write_access (line 668) | async def test_manage_aws_glue_data_catalog_create_no_write_access(sel... method test_manage_aws_glue_data_catalog_get_read_access (line 680) | async def test_manage_aws_glue_data_catalog_get_read_access( method test_manage_aws_glue_data_catalog_create_with_write_access (line 711) | async def test_manage_aws_glue_data_catalog_create_with_write_access( method test_manage_aws_glue_data_catalog_delete_with_write_access (line 742) | async def test_manage_aws_glue_data_catalog_delete_with_write_access( method test_manage_aws_glue_data_catalog_invalid_operation (line 768) | async def test_manage_aws_glue_data_catalog_invalid_operation(self, ha... method test_manage_aws_glue_data_catalog_list_catalogs (line 783) | async def test_manage_aws_glue_data_catalog_list_catalogs(self, handle... method test_manage_aws_glue_data_catalog_list_catalogs_error (line 800) | async def test_manage_aws_glue_data_catalog_list_catalogs_error(self, ... method test_manage_aws_glue_data_catalog_import_catalog_with_read_only_access (line 817) | async def test_manage_aws_glue_data_catalog_import_catalog_with_read_o... method test_manage_aws_glue_data_catalog_import_catalog (line 832) | async def test_manage_aws_glue_data_catalog_import_catalog( method test_manage_aws_glue_data_catalog_missing_catalog_id (line 855) | async def test_manage_aws_glue_data_catalog_missing_catalog_id( method test_manage_aws_glue_data_catalog_exception_handling (line 877) | async def test_manage_aws_glue_data_catalog_exception_handling( method test_manage_aws_glue_data_catalog_tables_list_tables_error (line 895) | async def test_manage_aws_glue_data_catalog_tables_list_tables_error( method test_manage_aws_glue_data_catalog_tables_search_tables_error (line 915) | async def test_manage_aws_glue_data_catalog_tables_search_tables_error( method test_manage_aws_glue_data_catalog_tables_missing_table_name (line 935) | async def test_manage_aws_glue_data_catalog_tables_missing_table_name( method test_manage_aws_glue_data_catalog_connections_list_connections_error (line 949) | async def test_manage_aws_glue_data_catalog_connections_list_connectio... method test_manage_aws_glue_data_catalog_connections_missing_connection_name (line 969) | async def test_manage_aws_glue_data_catalog_connections_missing_connec... method test_manage_aws_glue_data_catalog_partitions_list_partitions_error (line 989) | async def test_manage_aws_glue_data_catalog_partitions_list_partitions... method test_manage_aws_glue_data_catalog_partitions_missing_partition_values (line 1009) | async def test_manage_aws_glue_data_catalog_partitions_missing_partiti... method test_manage_aws_glue_data_catalog_tables_delete_no_write_access (line 1032) | async def test_manage_aws_glue_data_catalog_tables_delete_no_write_acc... method test_manage_aws_glue_data_catalog_connections_delete_no_write_access (line 1049) | async def test_manage_aws_glue_data_catalog_connections_delete_no_writ... method test_manage_aws_glue_data_catalog_connections_update_no_write_access (line 1063) | async def test_manage_aws_glue_data_catalog_connections_update_no_writ... method test_manage_aws_glue_data_catalog_partitions_delete_no_write_access (line 1080) | async def test_manage_aws_glue_data_catalog_partitions_delete_no_write... method test_manage_aws_glue_data_catalog_partitions_update_no_write_access (line 1098) | async def test_manage_aws_glue_data_catalog_partitions_update_no_write... method test_manage_aws_glue_data_catalog_delete_no_write_access (line 1117) | async def test_manage_aws_glue_data_catalog_delete_no_write_access(sel... method test_manage_aws_glue_data_catalog_databases_with_all_parameters (line 1132) | async def test_manage_aws_glue_data_catalog_databases_with_all_paramet... method test_manage_aws_glue_data_catalog_tables_with_short_operation_names (line 1173) | async def test_manage_aws_glue_data_catalog_tables_with_short_operatio... method test_manage_aws_glue_data_catalog_tables_search_with_short_operation_name (line 1207) | async def test_manage_aws_glue_data_catalog_tables_search_with_short_o... method test_manage_aws_glue_data_catalog_connections_with_short_operation_names (line 1237) | async def test_manage_aws_glue_data_catalog_connections_with_short_ope... method test_manage_aws_glue_data_catalog_partitions_with_short_operation_names (line 1271) | async def test_manage_aws_glue_data_catalog_partitions_with_short_oper... method test_manage_aws_glue_data_catalog_with_short_operation_names (line 1308) | async def test_manage_aws_glue_data_catalog_with_short_operation_names( method test_manage_aws_glue_data_catalog_tables_create_missing_table_input (line 1339) | async def test_manage_aws_glue_data_catalog_tables_create_missing_tabl... method test_manage_aws_glue_data_catalog_tables_update_missing_table_input (line 1361) | async def test_manage_aws_glue_data_catalog_tables_update_missing_tabl... method test_manage_aws_glue_data_catalog_connections_create_missing_connection_input (line 1383) | async def test_manage_aws_glue_data_catalog_connections_create_missing... method test_manage_aws_glue_data_catalog_connections_update_missing_connection_input (line 1404) | async def test_manage_aws_glue_data_catalog_connections_update_missing... method test_manage_aws_glue_data_catalog_partitions_create_missing_partition_input (line 1425) | async def test_manage_aws_glue_data_catalog_partitions_create_missing_... method test_manage_aws_glue_data_catalog_partitions_update_missing_partition_input (line 1448) | async def test_manage_aws_glue_data_catalog_partitions_update_missing_... method test_manage_aws_glue_data_catalog_catalog_missing_catalog_input (line 1471) | async def test_manage_aws_glue_data_catalog_catalog_missing_catalog_in... method test_manage_aws_glue_data_catalog_tables_create_with_table_input (line 1493) | async def test_manage_aws_glue_data_catalog_tables_create_with_table_i... method test_manage_aws_glue_data_catalog_tables_update_with_table_input (line 1557) | async def test_manage_aws_glue_data_catalog_tables_update_with_table_i... method test_manage_aws_glue_data_catalog_connections_create_with_connection_input (line 1621) | async def test_manage_aws_glue_data_catalog_connections_create_with_co... method test_manage_aws_glue_data_catalog_connections_update_with_connection_input (line 1674) | async def test_manage_aws_glue_data_catalog_connections_update_with_co... method test_manage_aws_glue_data_catalog_partitions_create_with_partition_input (line 1727) | async def test_manage_aws_glue_data_catalog_partitions_create_with_par... method test_manage_aws_glue_data_catalog_partitions_update_with_partition_input (line 1795) | async def test_manage_aws_glue_data_catalog_partitions_update_with_par... method test_manage_aws_glue_data_catalog_tables_search_tables_with_parameters (line 1865) | async def test_manage_aws_glue_data_catalog_tables_search_tables_with_... method test_manage_aws_glue_data_catalog_partitions_list_partitions_with_parameters (line 1911) | async def test_manage_aws_glue_data_catalog_partitions_list_partitions... method test_manage_aws_glue_data_catalog_create_with_catalog_input (line 1965) | async def test_manage_aws_glue_data_catalog_create_with_catalog_input( method test_manage_aws_glue_data_catalog_get_catalog_with_parameters (line 2006) | async def test_manage_aws_glue_data_catalog_get_catalog_with_parameters( method test_manage_aws_glue_data_catalog_tables_invalid_operation_with_write_access (line 2050) | async def test_manage_aws_glue_data_catalog_tables_invalid_operation_w... method test_manage_aws_glue_data_catalog_connections_invalid_operation_with_write_access (line 2067) | async def test_manage_aws_glue_data_catalog_connections_invalid_operat... method test_manage_aws_glue_data_catalog_partitions_invalid_operation_with_write_access (line 2084) | async def test_manage_aws_glue_data_catalog_partitions_invalid_operati... method test_manage_aws_glue_data_catalog_tables_search_tables_no_parameters (line 2104) | async def test_manage_aws_glue_data_catalog_tables_search_tables_no_pa... method test_manage_aws_glue_data_catalog_partitions_list_partitions_no_parameters (line 2132) | async def test_manage_aws_glue_data_catalog_partitions_list_partitions... method test_manage_aws_glue_data_catalog_missing_catalog_id_for_get (line 2160) | async def test_manage_aws_glue_data_catalog_missing_catalog_id_for_get( method test_manage_aws_glue_data_catalog_missing_catalog_id_for_delete (line 2174) | async def test_manage_aws_glue_data_catalog_missing_catalog_id_for_del... method test_manage_aws_glue_data_catalog_tables_other_write_access_error (line 2188) | async def test_manage_aws_glue_data_catalog_tables_other_write_access_... method test_manage_aws_glue_data_catalog_connections_other_write_access_error (line 2208) | async def test_manage_aws_glue_data_catalog_connections_other_write_ac... method test_manage_aws_glue_data_catalog_partitions_other_write_access_error (line 2227) | async def test_manage_aws_glue_data_catalog_partitions_other_write_acc... method test_manage_aws_glue_data_catalog_other_write_access_error (line 2247) | async def test_manage_aws_glue_data_catalog_other_write_access_error(s... method test_manage_aws_glue_data_catalog_tables_create_with_catalog_id (line 2264) | async def test_manage_aws_glue_data_catalog_tables_create_with_catalog... method test_manage_aws_glue_data_catalog_tables_list_tables_with_max_results (line 2300) | async def test_manage_aws_glue_data_catalog_tables_list_tables_with_ma... method test_manage_aws_glue_data_catalog_connections_get_with_catalog_id (line 2330) | async def test_manage_aws_glue_data_catalog_connections_get_with_catal... method test_manage_aws_glue_data_catalog_partitions_get_with_catalog_id (line 2360) | async def test_manage_aws_glue_data_catalog_partitions_get_with_catalo... method test_manage_aws_glue_data_catalog_tables_exception_handling_specific (line 2393) | async def test_manage_aws_glue_data_catalog_tables_exception_handling_... method test_manage_aws_glue_data_catalog_connections_exception_handling_specific (line 2414) | async def test_manage_aws_glue_data_catalog_connections_exception_hand... method test_manage_aws_glue_data_catalog_partitions_exception_handling_specific (line 2434) | async def test_manage_aws_glue_data_catalog_partitions_exception_handl... method test_manage_aws_glue_data_catalog_exception_handling_specific (line 2456) | async def test_manage_aws_glue_data_catalog_exception_handling_specific( method test_manage_aws_glue_data_catalog_databases_with_sensitive_data_access (line 2476) | async def test_manage_aws_glue_data_catalog_databases_with_sensitive_d... method test_manage_aws_glue_data_catalog_databases_with_both_access_flags (line 2518) | async def test_manage_aws_glue_data_catalog_databases_with_both_access... method test_manage_aws_glue_data_catalog_tables_update_no_write_access (line 2563) | async def test_manage_aws_glue_data_catalog_tables_update_no_write_acc... method test_manage_aws_glue_data_catalog_tables_search_tables_no_write_access (line 2584) | async def test_manage_aws_glue_data_catalog_tables_search_tables_no_wr... method test_manage_aws_glue_data_catalog_tables_list_tables_no_write_access (line 2612) | async def test_manage_aws_glue_data_catalog_tables_list_tables_no_writ... method test_manage_aws_glue_data_catalog_connections_list_connections_no_write_access (line 2638) | async def test_manage_aws_glue_data_catalog_connections_list_connectio... method test_manage_aws_glue_data_catalog_partitions_get_partition_no_write_access (line 2663) | async def test_manage_aws_glue_data_catalog_partitions_get_partition_n... method test_manage_aws_glue_data_catalog_get_catalog_no_write_access (line 2692) | async def test_manage_aws_glue_data_catalog_get_catalog_no_write_access( method test_manage_aws_glue_data_catalog_tables_exception_handling_general (line 2717) | async def test_manage_aws_glue_data_catalog_tables_exception_handling_... method test_manage_aws_glue_data_catalog_connections_exception_handling_general (line 2742) | async def test_manage_aws_glue_data_catalog_connections_exception_hand... method test_manage_aws_glue_data_catalog_partitions_exception_handling_general (line 2766) | async def test_manage_aws_glue_data_catalog_partitions_exception_handl... method test_manage_aws_glue_data_catalog_exception_handling_general (line 2792) | async def test_manage_aws_glue_data_catalog_exception_handling_general( method test_manage_aws_glue_data_catalog_databases_error_response_for_other_operations (line 2814) | async def test_manage_aws_glue_data_catalog_databases_error_response_f... method test_manage_aws_glue_data_catalog_databases_with_none_parameters (line 2833) | async def test_manage_aws_glue_data_catalog_databases_with_none_parame... method test_manage_aws_glue_data_catalog_tables_with_none_parameters (line 2870) | async def test_manage_aws_glue_data_catalog_tables_with_none_parameters( method test_manage_aws_glue_data_catalog_connections_with_none_parameters (line 2906) | async def test_manage_aws_glue_data_catalog_connections_with_none_para... method test_manage_aws_glue_data_catalog_partitions_with_none_parameters (line 2939) | async def test_manage_aws_glue_data_catalog_partitions_with_none_param... method test_manage_aws_glue_data_catalog_with_none_parameters (line 2980) | async def test_manage_aws_glue_data_catalog_with_none_parameters( method test_manage_aws_glue_data_catalog_tables_update_with_catalog_id (line 3011) | async def test_manage_aws_glue_data_catalog_tables_update_with_catalog... method test_manage_aws_glue_data_catalog_connections_update_with_catalog_id (line 3047) | async def test_manage_aws_glue_data_catalog_connections_update_with_ca... method test_manage_aws_glue_data_catalog_partitions_update_with_catalog_id (line 3082) | async def test_manage_aws_glue_data_catalog_partitions_update_with_cat... method test_manage_aws_glue_data_catalog_tables_delete_with_catalog_id (line 3121) | async def test_manage_aws_glue_data_catalog_tables_delete_with_catalog... method test_manage_aws_glue_data_catalog_connections_delete_with_catalog_id (line 3155) | async def test_manage_aws_glue_data_catalog_connections_delete_with_ca... method test_manage_aws_glue_data_catalog_partitions_delete_with_catalog_id (line 3188) | async def test_manage_aws_glue_data_catalog_partitions_delete_with_cat... method test_manage_aws_glue_data_catalog_tables_with_max_results (line 3227) | async def test_manage_aws_glue_data_catalog_tables_with_max_results( method test_manage_aws_glue_data_catalog_databases_create_missing_required_params (line 3257) | async def test_manage_aws_glue_data_catalog_databases_create_missing_r... method test_manage_aws_glue_data_catalog_tables_create_missing_required_params (line 3277) | async def test_manage_aws_glue_data_catalog_tables_create_missing_requ... method test_manage_aws_glue_data_catalog_tables_delete_missing_required_params (line 3304) | async def test_manage_aws_glue_data_catalog_tables_delete_missing_requ... method test_manage_aws_glue_data_catalog_tables_get_missing_required_params (line 3318) | async def test_manage_aws_glue_data_catalog_tables_get_missing_require... method test_manage_aws_glue_data_catalog_tables_update_missing_required_params (line 3332) | async def test_manage_aws_glue_data_catalog_tables_update_missing_requ... method test_manage_aws_glue_data_catalog_connections_create_missing_required_params (line 3359) | async def test_manage_aws_glue_data_catalog_connections_create_missing... method test_manage_aws_glue_data_catalog_connections_delete_missing_required_params (line 3385) | async def test_manage_aws_glue_data_catalog_connections_delete_missing... method test_manage_aws_glue_data_catalog_connections_get_missing_required_params (line 3399) | async def test_manage_aws_glue_data_catalog_connections_get_missing_re... method test_manage_aws_glue_data_catalog_connections_update_missing_required_params (line 3413) | async def test_manage_aws_glue_data_catalog_connections_update_missing... method test_manage_aws_glue_data_catalog_partitions_create_missing_required_params (line 3439) | async def test_manage_aws_glue_data_catalog_partitions_create_missing_... method test_manage_aws_glue_data_catalog_partitions_delete_missing_required_params (line 3471) | async def test_manage_aws_glue_data_catalog_partitions_delete_missing_... method test_manage_aws_glue_data_catalog_partitions_get_missing_required_params (line 3489) | async def test_manage_aws_glue_data_catalog_partitions_get_missing_req... method test_manage_aws_glue_data_catalog_partitions_update_missing_required_params (line 3507) | async def test_manage_aws_glue_data_catalog_partitions_update_missing_... method test_manage_aws_glue_data_catalog_create_missing_required_params (line 3539) | async def test_manage_aws_glue_data_catalog_create_missing_required_pa... method test_manage_aws_glue_data_catalog_delete_missing_required_params (line 3562) | async def test_manage_aws_glue_data_catalog_delete_missing_required_pa... method test_manage_aws_glue_data_catalog_get_missing_required_params (line 3576) | async def test_manage_aws_glue_data_catalog_get_missing_required_params( method test_manage_aws_glue_data_catalog_import_missing_required_params (line 3590) | async def test_manage_aws_glue_data_catalog_import_missing_required_pa... method test_manage_aws_glue_data_catalog_partitions_list_with_all_parameters (line 3604) | async def test_manage_aws_glue_data_catalog_partitions_list_with_all_p... method test_manage_aws_glue_data_catalog_connections_list_with_max_results (line 3642) | async def test_manage_aws_glue_data_catalog_connections_list_with_max_... method test_manage_aws_glue_data_catalog_connections_list_with_all_parameters (line 3672) | async def test_manage_aws_glue_data_catalog_connections_list_with_all_... method test_manage_aws_glue_data_catalog_connections_get_with_all_parameters (line 3705) | async def test_manage_aws_glue_data_catalog_connections_get_with_all_p... FILE: src/aws-dataprocessing-mcp-server/tests/handlers/glue/test_glue_commons_handler.py function extract_response_data (line 12) | def extract_response_data(response): function mock_aws_helper (line 27) | def mock_aws_helper(): function handler (line 41) | def handler(mock_aws_helper): function no_write_handler (line 48) | def no_write_handler(mock_aws_helper): function mock_context (line 55) | def mock_context(): class TestGlueCommonsHandler (line 60) | class TestGlueCommonsHandler: method test_initialization_with_default_params (line 63) | def test_initialization_with_default_params(self, mock_aws_helper): method test_initialization_with_write_and_sensitive_access (line 84) | def test_initialization_with_write_and_sensitive_access(self, mock_aws... method test_usage_profiles_create_with_complex_configuration (line 94) | async def test_usage_profiles_create_with_complex_configuration(self, ... method test_security_config_with_comprehensive_encryption (line 134) | async def test_security_config_with_comprehensive_encryption(self, han... method test_encryption_settings_with_all_options (line 170) | async def test_encryption_settings_with_all_options(self, handler, moc... method test_resource_policy_with_complex_policy_document (line 205) | async def test_resource_policy_with_complex_policy_document(self, hand... method test_concurrent_resource_modification_scenario (line 269) | async def test_concurrent_resource_modification_scenario(self, handler... method test_boundary_values_and_edge_cases (line 300) | async def test_boundary_values_and_edge_cases(self, handler, mock_cont... method test_aws_helper_integration_scenarios (line 331) | async def test_aws_helper_integration_scenarios(self, handler, mock_co... method test_resource_policy_edge_cases (line 353) | async def test_resource_policy_edge_cases(self, handler, mock_context): method test_encryption_settings_edge_cases (line 397) | async def test_encryption_settings_edge_cases(self, handler, mock_cont... method test_security_config_without_timestamps (line 417) | async def test_security_config_without_timestamps(self, handler, mock_... method test_manage_aws_glue_usage_profiles_create_success (line 450) | async def test_manage_aws_glue_usage_profiles_create_success(self, han... method test_manage_aws_glue_usage_profiles_create_no_write_access (line 469) | async def test_manage_aws_glue_usage_profiles_create_no_write_access( method test_manage_aws_glue_security_create_success (line 483) | async def test_manage_aws_glue_security_create_success(self, handler, ... method test_manage_aws_glue_security_get_not_found (line 502) | async def test_manage_aws_glue_security_get_not_found(self, handler, m... method test_manage_aws_glue_encryption_get_success (line 516) | async def test_manage_aws_glue_encryption_get_success(self, handler, m... method test_manage_aws_glue_resource_policies_put_success (line 532) | async def test_manage_aws_glue_resource_policies_put_success(self, han... method test_invalid_operations (line 546) | async def test_invalid_operations(self, handler, mock_context): method test_error_handling (line 561) | async def test_error_handling(self, handler, mock_context): method test_manage_aws_glue_usage_profiles_delete_success (line 573) | async def test_manage_aws_glue_usage_profiles_delete_success(self, han... method test_manage_aws_glue_usage_profiles_delete_not_found (line 595) | async def test_manage_aws_glue_usage_profiles_delete_not_found(self, h... method test_manage_aws_glue_usage_profiles_delete_not_mcp_managed (line 610) | async def test_manage_aws_glue_usage_profiles_delete_not_mcp_managed( method test_manage_aws_glue_usage_profiles_get_success (line 631) | async def test_manage_aws_glue_usage_profiles_get_success(self, handle... method test_manage_aws_glue_usage_profiles_update_success (line 648) | async def test_manage_aws_glue_usage_profiles_update_success(self, han... method test_manage_aws_glue_usage_profiles_create_missing_config (line 673) | async def test_manage_aws_glue_usage_profiles_create_missing_config( method test_manage_aws_glue_usage_profiles_update_missing_config (line 686) | async def test_manage_aws_glue_usage_profiles_update_missing_config( method test_manage_aws_glue_usage_profiles_update_no_write_access (line 699) | async def test_manage_aws_glue_usage_profiles_update_no_write_access( method test_manage_aws_glue_usage_profiles_delete_no_write_access (line 713) | async def test_manage_aws_glue_usage_profiles_delete_no_write_access( method test_manage_aws_glue_security_delete_success (line 724) | async def test_manage_aws_glue_security_delete_success(self, handler, ... method test_manage_aws_glue_security_delete_not_found (line 741) | async def test_manage_aws_glue_security_delete_not_found(self, handler... method test_manage_aws_glue_security_get_success (line 756) | async def test_manage_aws_glue_security_get_success(self, handler, moc... method test_manage_aws_glue_security_create_missing_config (line 776) | async def test_manage_aws_glue_security_create_missing_config(self, ha... method test_manage_aws_glue_security_create_no_write_access (line 787) | async def test_manage_aws_glue_security_create_no_write_access( method test_manage_aws_glue_security_delete_no_write_access (line 801) | async def test_manage_aws_glue_security_delete_no_write_access( method test_manage_aws_glue_security_delete_other_error (line 812) | async def test_manage_aws_glue_security_delete_other_error(self, handl... method test_manage_aws_glue_encryption_put_success (line 826) | async def test_manage_aws_glue_encryption_put_success(self, handler, m... method test_manage_aws_glue_encryption_put_no_write_access (line 841) | async def test_manage_aws_glue_encryption_put_no_write_access( method test_manage_aws_glue_encryption_put_missing_settings (line 852) | async def test_manage_aws_glue_encryption_put_missing_settings(self, h... method test_manage_aws_glue_encryption_get_with_catalog_id (line 866) | async def test_manage_aws_glue_encryption_get_with_catalog_id(self, ha... method test_manage_aws_glue_encryption_put_with_catalog_id (line 882) | async def test_manage_aws_glue_encryption_put_with_catalog_id(self, ha... method test_manage_aws_glue_encryption_invalid_operation (line 896) | async def test_manage_aws_glue_encryption_invalid_operation(self, hand... method test_manage_aws_glue_resource_policies_get_success (line 905) | async def test_manage_aws_glue_resource_policies_get_success(self, han... method test_manage_aws_glue_resource_policies_delete_success (line 924) | async def test_manage_aws_glue_resource_policies_delete_success(self, ... method test_manage_aws_glue_resource_policies_get_no_write_access (line 937) | async def test_manage_aws_glue_resource_policies_get_no_write_access( method test_manage_aws_glue_resource_policies_put_no_write_access (line 953) | async def test_manage_aws_glue_resource_policies_put_no_write_access( method test_manage_aws_glue_resource_policies_delete_no_write_access (line 964) | async def test_manage_aws_glue_resource_policies_delete_no_write_access( method test_manage_aws_glue_resource_policies_put_missing_policy (line 975) | async def test_manage_aws_glue_resource_policies_put_missing_policy( method test_manage_aws_glue_resource_policies_invalid_operation (line 985) | async def test_manage_aws_glue_resource_policies_invalid_operation( method test_manage_aws_glue_resource_policies_with_all_params (line 996) | async def test_manage_aws_glue_resource_policies_with_all_params(self,... method test_manage_aws_glue_usage_profiles_update_not_mcp_managed (line 1015) | async def test_manage_aws_glue_usage_profiles_update_not_mcp_managed( method test_manage_aws_glue_usage_profiles_update_not_found (line 1039) | async def test_manage_aws_glue_usage_profiles_update_not_found(self, h... method test_manage_aws_glue_usage_profiles_delete_other_error (line 1057) | async def test_manage_aws_glue_usage_profiles_delete_other_error(self,... method test_manage_aws_glue_usage_profiles_update_other_error (line 1072) | async def test_manage_aws_glue_usage_profiles_update_other_error(self,... method test_manage_aws_glue_encryption_put_with_both_settings (line 1090) | async def test_manage_aws_glue_encryption_put_with_both_settings(self,... method test_manage_aws_glue_encryption_get_error (line 1106) | async def test_manage_aws_glue_encryption_get_error(self, handler, moc... method test_manage_aws_glue_encryption_put_error (line 1120) | async def test_manage_aws_glue_encryption_put_error(self, handler, moc... method test_manage_aws_glue_resource_policies_get_error (line 1136) | async def test_manage_aws_glue_resource_policies_get_error(self, handl... method test_manage_aws_glue_resource_policies_put_error (line 1148) | async def test_manage_aws_glue_resource_policies_put_error(self, handl... method test_manage_aws_glue_resource_policies_delete_error (line 1160) | async def test_manage_aws_glue_resource_policies_delete_error(self, ha... method test_manage_aws_glue_security_create_error (line 1172) | async def test_manage_aws_glue_security_create_error(self, handler, mo... method test_manage_aws_glue_usage_profiles_create_error (line 1187) | async def test_manage_aws_glue_usage_profiles_create_error(self, handl... method test_manage_aws_glue_resource_policies_get_with_resource_arn (line 1203) | async def test_manage_aws_glue_resource_policies_get_with_resource_arn( method test_manage_aws_glue_resource_policies_delete_with_policy_hash (line 1224) | async def test_manage_aws_glue_resource_policies_delete_with_policy_hash( method test_manage_aws_glue_security_get_with_client_error (line 1243) | async def test_manage_aws_glue_security_get_with_client_error(self, ha... method test_integration_create_update_delete_usage_profile_lifecycle (line 1258) | async def test_integration_create_update_delete_usage_profile_lifecycle( method test_integration_security_config_and_encryption_workflow (line 1363) | async def test_integration_security_config_and_encryption_workflow( method test_edge_case_malformed_json_in_resource_policy (line 1465) | async def test_edge_case_malformed_json_in_resource_policy(self, handl... method test_edge_case_unicode_and_special_characters (line 1486) | async def test_edge_case_unicode_and_special_characters(self, handler,... method test_edge_case_extremely_large_configurations (line 1508) | async def test_edge_case_extremely_large_configurations(self, handler,... method test_edge_case_null_and_empty_values_handling (line 1535) | async def test_edge_case_null_and_empty_values_handling(self, handler,... method test_concurrent_operations_simulation (line 1570) | async def test_concurrent_operations_simulation(self, handler, mock_co... method test_aws_service_limits_and_quotas (line 1602) | async def test_aws_service_limits_and_quotas(self, handler, mock_conte... method test_cross_region_resource_management (line 1644) | async def test_cross_region_resource_management(self, handler, mock_co... method test_permission_denied_scenarios (line 1666) | async def test_permission_denied_scenarios(self, handler, mock_context): method test_manage_aws_glue_usage_profiles_get_with_client_error (line 1707) | async def test_manage_aws_glue_usage_profiles_get_with_client_error( method test_manage_aws_glue_encryption_put_with_client_error (line 1724) | async def test_manage_aws_glue_encryption_put_with_client_error(self, ... FILE: src/aws-dataprocessing-mcp-server/tests/handlers/glue/test_glue_etl_handler.py function extract_response_data (line 9) | def extract_response_data(response): function mock_glue_client (line 24) | def mock_glue_client(): function mock_aws_helper (line 30) | def mock_aws_helper(): function handler (line 44) | def handler(mock_aws_helper): function mock_context (line 51) | def mock_context(): function basic_job_definition (line 57) | def basic_job_definition(): function test_create_job_success (line 67) | async def test_create_job_success(handler, mock_glue_client): function test_create_job_missing_parameters (line 90) | async def test_create_job_missing_parameters(handler): function test_delete_job_success (line 100) | async def test_delete_job_success(handler, mock_glue_client): function test_get_job_success (line 113) | async def test_get_job_success(handler, mock_glue_client): function test_get_jobs_success (line 127) | async def test_get_jobs_success(handler, mock_glue_client): function test_start_job_run_success (line 147) | async def test_start_job_run_success(handler, mock_glue_client): function test_stop_job_run_success (line 168) | async def test_stop_job_run_success(handler, mock_glue_client): function test_create_job_operation_without_write_permission (line 182) | async def test_create_job_operation_without_write_permission(handler): function test_delete_job_operation_without_write_permission (line 197) | async def test_delete_job_operation_without_write_permission(handler): function test_create_job_operation_invalid_arguments (line 212) | async def test_create_job_operation_invalid_arguments(handler): function test_delete_job_operation_invalid_arguments (line 220) | async def test_delete_job_operation_invalid_arguments(handler): function test_get_job_operation_invalid_arguments (line 228) | async def test_get_job_operation_invalid_arguments(handler): function test_update_job_operation_invalid_arguments (line 236) | async def test_update_job_operation_invalid_arguments(handler): function test_start_job_run_operation_invalid_arguments (line 244) | async def test_start_job_run_operation_invalid_arguments(handler): function test_stop_job_run_operation_invalid_arguments (line 252) | async def test_stop_job_run_operation_invalid_arguments(handler): function test_get_job_run_operation_invalid_arguments (line 260) | async def test_get_job_run_operation_invalid_arguments(handler): function test_get_job_runs_operation_invalid_arguments (line 268) | async def test_get_job_runs_operation_invalid_arguments(handler): function test_batch_stop_job_run_operation_invalid_arguments (line 276) | async def test_batch_stop_job_run_operation_invalid_arguments(handler): function test_get_job_bookmark_operation_invalid_arguments (line 284) | async def test_get_job_bookmark_operation_invalid_arguments(handler): function test_reset_job_bookmark_operation_invalid_arguments (line 292) | async def test_reset_job_bookmark_operation_invalid_arguments(handler): function test_start_job_run_operation_without_write_permission (line 300) | async def test_start_job_run_operation_without_write_permission(handler): function test_stop_job_run_operation_without_write_permission (line 315) | async def test_stop_job_run_operation_without_write_permission(handler): function test_batch_stop_job_run_operation_without_write_permission (line 330) | async def test_batch_stop_job_run_operation_without_write_permission(han... function test_update_job_operation_without_write_permission (line 345) | async def test_update_job_operation_without_write_permission(handler): function test_invalid_operation (line 358) | async def test_invalid_operation(handler): function test_client_error_handling (line 369) | async def test_client_error_handling(handler, mock_glue_client): function test_update_job_does_not_exist (line 383) | async def test_update_job_does_not_exist(handler, mock_glue_client): function test_create_job_with_tags (line 399) | async def test_create_job_with_tags(handler, mock_glue_client, basic_job... function test_update_job_non_mcp_managed (line 417) | async def test_update_job_non_mcp_managed(handler, mock_glue_client, moc... function test_start_job_run_with_all_parameters (line 432) | async def test_start_job_run_with_all_parameters(handler, mock_glue_clie... function test_start_job_run_with_max_capacity (line 461) | async def test_start_job_run_with_max_capacity(handler, mock_glue_client): function test_get_job_bookmark_success (line 483) | async def test_get_job_bookmark_success(handler, mock_glue_client): function test_reset_job_bookmark_with_run_id (line 500) | async def test_reset_job_bookmark_with_run_id(handler, mock_glue_client): function test_batch_stop_job_run_multiple_ids (line 514) | async def test_batch_stop_job_run_multiple_ids(handler, mock_glue_client): function test_batch_stop_job_run_with_failures (line 533) | async def test_batch_stop_job_run_with_failures(handler, mock_glue_client): function test_get_job_runs_with_client_error (line 553) | async def test_get_job_runs_with_client_error(handler, mock_glue_client): function test_pagination_parameters (line 569) | async def test_pagination_parameters(handler, mock_glue_client): function test_get_job_run_with_predecessors (line 589) | async def test_get_job_run_with_predecessors(handler, mock_glue_client): function test_initialization_parameters (line 608) | async def test_initialization_parameters(mock_aws_helper): function test_invalid_execution_class (line 619) | async def test_invalid_execution_class(handler, mock_glue_client): FILE: src/aws-dataprocessing-mcp-server/tests/handlers/glue/test_glue_interactive_sessions_handler.py function test_glue_interactive_sessions_handler_initialization (line 26) | async def test_glue_interactive_sessions_handler_initialization(mock_cre... function test_create_session_success (line 60) | async def test_create_session_success(mock_prepare_tags, mock_create_cli... function test_create_session_no_write_access (line 137) | async def test_create_session_no_write_access(mock_create_client): function test_delete_session_success (line 180) | async def test_delete_session_success( function test_delete_session_not_mcp_managed (line 235) | async def test_delete_session_not_mcp_managed( function test_get_session_success (line 291) | async def test_get_session_success(mock_create_client): function test_list_sessions_success (line 339) | async def test_list_sessions_success(mock_create_client): function test_stop_session_success (line 405) | async def test_stop_session_success( function test_session_not_found (line 457) | async def test_session_not_found(mock_create_client): function test_session_invalid_operation (line 496) | async def test_session_invalid_operation(mock_create_client): function test_run_statement_success (line 534) | async def test_run_statement_success(mock_create_client): function test_run_statement_no_write_access (line 580) | async def test_run_statement_no_write_access(mock_create_client): function test_cancel_statement_success (line 619) | async def test_cancel_statement_success(mock_create_client): function test_get_statement_success (line 659) | async def test_get_statement_success(mock_create_client): function test_list_statements_success (line 714) | async def test_list_statements_success(mock_create_client): function test_statement_invalid_operation (line 772) | async def test_statement_invalid_operation(mock_create_client): function test_missing_role_and_command_for_create_session (line 806) | async def test_missing_role_and_command_for_create_session(mock_create_c... function test_missing_session_id_for_delete_session (line 836) | async def test_missing_session_id_for_delete_session(mock_create_client): function test_missing_session_id_for_get_session (line 861) | async def test_missing_session_id_for_get_session(mock_create_client): function test_missing_session_id_for_stop_session (line 884) | async def test_missing_session_id_for_stop_session(mock_create_client): function test_missing_code_for_run_statement (line 907) | async def test_missing_code_for_run_statement(mock_create_client): function test_missing_statement_id_for_cancel_statement (line 932) | async def test_missing_statement_id_for_cancel_statement(mock_create_cli... function test_delete_session_no_write_access (line 957) | async def test_delete_session_no_write_access(mock_create_client): function test_stop_session_no_write_access (line 976) | async def test_stop_session_no_write_access(mock_create_client): function test_create_session_with_all_optional_params (line 996) | async def test_create_session_with_all_optional_params(mock_prepare_tags... function test_create_session_without_user_tags (line 1047) | async def test_create_session_without_user_tags(mock_prepare_tags, mock_... function test_delete_session_client_error (line 1078) | async def test_delete_session_client_error( function test_get_session_with_request_origin (line 1105) | async def test_get_session_with_request_origin(mock_create_client): function test_list_sessions_with_tags (line 1132) | async def test_list_sessions_with_tags(mock_create_client): function test_stop_session_client_error (line 1161) | async def test_stop_session_client_error(mock_get_account_id, mock_get_r... function test_stop_session_with_request_origin (line 1189) | async def test_stop_session_with_request_origin( function test_invalid_session_operation (line 1223) | async def test_invalid_session_operation(mock_create_client): function test_cancel_statement_no_write_access (line 1244) | async def test_cancel_statement_no_write_access(mock_create_client): function test_run_statement_with_request_origin (line 1265) | async def test_run_statement_with_request_origin(mock_create_client): function test_cancel_statement_with_request_origin (line 1291) | async def test_cancel_statement_with_request_origin(mock_create_client): function test_get_statement_with_request_origin (line 1315) | async def test_get_statement_with_request_origin(mock_create_client): function test_list_statements_with_pagination (line 1341) | async def test_list_statements_with_pagination(mock_create_client): function test_list_statements_with_request_origin (line 1371) | async def test_list_statements_with_request_origin(mock_create_client): function test_invalid_statement_operation (line 1398) | async def test_invalid_statement_operation(mock_create_client): function test_statements_general_exception (line 1419) | async def test_statements_general_exception(mock_create_client): function test_stop_session_not_mcp_managed (line 1442) | async def test_stop_session_not_mcp_managed( function test_stop_session_not_found (line 1473) | async def test_stop_session_not_found(mock_get_account_id, mock_get_regi... function test_create_session_individual_params (line 1500) | async def test_create_session_individual_params(mock_prepare_tags, mock_... function test_missing_session_id_for_list_statements (line 1619) | async def test_missing_session_id_for_list_statements(mock_create_client): function test_delete_session_entity_not_found (line 1639) | async def test_delete_session_entity_not_found( function test_get_session_without_request_origin (line 1667) | async def test_get_session_without_request_origin(mock_create_client): function test_list_sessions_without_optional_params (line 1689) | async def test_list_sessions_without_optional_params(mock_create_client): function test_stop_session_without_request_origin (line 1713) | async def test_stop_session_without_request_origin( function test_run_statement_without_request_origin (line 1740) | async def test_run_statement_without_request_origin(mock_create_client): function test_get_statement_without_request_origin (line 1760) | async def test_get_statement_without_request_origin(mock_create_client): function test_list_statements_without_optional_params (line 1780) | async def test_list_statements_without_optional_params(mock_create_client): function test_cancel_statement_without_request_origin (line 1802) | async def test_cancel_statement_without_request_origin(mock_create_client): function test_session_parameter_validation_errors (line 1820) | async def test_session_parameter_validation_errors(mock_create_client): function test_statement_parameter_validation_errors (line 1839) | async def test_statement_parameter_validation_errors(mock_create_client): function test_sessions_general_exception (line 1860) | async def test_sessions_general_exception(mock_create_client): function test_create_session_minimal_params (line 1881) | async def test_create_session_minimal_params(mock_prepare_tags, mock_cre... function test_session_no_write_access_fallback (line 1914) | async def test_session_no_write_access_fallback(mock_create_client): function test_statement_no_write_access_fallback (line 1935) | async def test_statement_no_write_access_fallback(mock_create_client): FILE: src/aws-dataprocessing-mcp-server/tests/handlers/glue/test_glue_workflows_handler.py function test_glue_workflow_handler_initialization (line 26) | async def test_glue_workflow_handler_initialization(mock_create_client): function test_create_workflow_success (line 62) | async def test_create_workflow_success( function test_create_workflow_with_user_tags (line 125) | async def test_create_workflow_with_user_tags(mock_prepare_tags, mock_cr... function test_create_workflow_with_only_description (line 174) | async def test_create_workflow_with_only_description(mock_prepare_tags, ... function test_create_workflow_missing_parameters (line 223) | async def test_create_workflow_missing_parameters(mock_create_client): function test_get_workflow_with_include_graph_false (line 262) | async def test_get_workflow_with_include_graph_false(mock_create_client): function test_create_workflow_no_write_access (line 308) | async def test_create_workflow_no_write_access(mock_create_client): function test_delete_workflow_success (line 351) | async def test_delete_workflow_success( function test_delete_workflow_not_mcp_managed (line 404) | async def test_delete_workflow_not_mcp_managed( function test_get_workflow_success (line 456) | async def test_get_workflow_success(mock_create_client): function test_get_workflow_with_include_graph (line 502) | async def test_get_workflow_with_include_graph(mock_create_client): function test_list_workflows_success (line 552) | async def test_list_workflows_success(mock_create_client): function test_start_workflow_run_success (line 601) | async def test_start_workflow_run_success( function test_start_workflow_run_not_mcp_managed (line 664) | async def test_start_workflow_run_not_mcp_managed( function test_start_workflow_run_no_write_access (line 716) | async def test_start_workflow_run_no_write_access(mock_create_client): function test_start_workflow_run_not_found (line 757) | async def test_start_workflow_run_not_found( function test_start_workflow_run_without_run_properties (line 808) | async def test_start_workflow_run_without_run_properties( function test_manage_aws_glue_workflows_general_exception (line 865) | async def test_manage_aws_glue_workflows_general_exception(mock_create_c... function test_invalid_operation (line 896) | async def test_invalid_operation(mock_create_client): function test_workflow_not_found (line 927) | async def test_workflow_not_found(mock_create_client): function test_create_trigger_success (line 970) | async def test_create_trigger_success(mock_prepare_tags, mock_create_cli... function test_create_trigger_with_user_tags (line 1030) | async def test_create_trigger_with_user_tags(mock_prepare_tags, mock_cre... function test_create_trigger_with_workflow_name (line 1081) | async def test_create_trigger_with_workflow_name(mock_prepare_tags, mock... function test_create_trigger_with_predicate (line 1138) | async def test_create_trigger_with_predicate(mock_prepare_tags, mock_cre... function test_create_trigger_with_event_batching_condition (line 1198) | async def test_create_trigger_with_event_batching_condition(mock_prepare... function test_create_trigger_missing_parameters (line 1248) | async def test_create_trigger_missing_parameters(mock_create_client): function test_create_trigger_no_write_access (line 1287) | async def test_create_trigger_no_write_access(mock_create_client): function test_delete_trigger_success (line 1328) | async def test_delete_trigger_success( function test_delete_trigger_not_mcp_managed (line 1381) | async def test_delete_trigger_not_mcp_managed( function test_get_trigger_success (line 1437) | async def test_get_trigger_success(mock_create_client): function test_get_triggers_success (line 1484) | async def test_get_triggers_success(mock_create_client): function test_start_trigger_success (line 1535) | async def test_start_trigger_success( function test_stop_trigger_success (line 1588) | async def test_stop_trigger_success( function test_trigger_invalid_operation (line 1638) | async def test_trigger_invalid_operation(mock_create_client): function test_trigger_not_found (line 1672) | async def test_trigger_not_found(mock_create_client): function test_create_workflow_without_description (line 1716) | async def test_create_workflow_without_description(mock_prepare_tags, mo... function test_create_workflow_without_default_run_properties (line 1743) | async def test_create_workflow_without_default_run_properties( function test_create_workflow_without_max_concurrent_runs (line 1772) | async def test_create_workflow_without_max_concurrent_runs(mock_prepare_... function test_delete_workflow_client_error (line 1800) | async def test_delete_workflow_client_error( function test_get_workflow_without_include_graph (line 1827) | async def test_get_workflow_without_include_graph(mock_create_client): function test_list_workflows_without_pagination (line 1852) | async def test_list_workflows_without_pagination(mock_create_client): function test_start_workflow_run_client_error (line 1872) | async def test_start_workflow_run_client_error( function test_start_workflow_run_without_run_properties_mcp_managed (line 1902) | async def test_start_workflow_run_without_run_properties_mcp_managed( function test_create_trigger_individual_params (line 1936) | async def test_create_trigger_individual_params(mock_prepare_tags, mock_... function test_create_trigger_without_user_tags (line 2026) | async def test_create_trigger_without_user_tags(mock_prepare_tags, mock_... function test_delete_trigger_client_error (line 2057) | async def test_delete_trigger_client_error( function test_get_triggers_without_pagination (line 2084) | async def test_get_triggers_without_pagination(mock_create_client): function test_start_trigger_client_error (line 2104) | async def test_start_trigger_client_error( function test_stop_trigger_client_error (line 2133) | async def test_stop_trigger_client_error(mock_get_account_id, mock_get_r... function test_triggers_no_write_access_fallback (line 2158) | async def test_triggers_no_write_access_fallback(mock_create_client): function test_triggers_general_exception (line 2179) | async def test_triggers_general_exception(mock_create_client): function test_create_workflow_with_description_only (line 2200) | async def test_create_workflow_with_description_only(mock_prepare_tags, ... function test_create_workflow_with_default_run_properties_only (line 2228) | async def test_create_workflow_with_default_run_properties_only( function test_create_workflow_with_max_concurrent_runs_only (line 2258) | async def test_create_workflow_with_max_concurrent_runs_only( function test_delete_workflow_entity_not_found (line 2288) | async def test_delete_workflow_entity_not_found( function test_get_workflow_with_include_graph_true (line 2316) | async def test_get_workflow_with_include_graph_true(mock_create_client): function test_list_workflows_with_max_results (line 2341) | async def test_list_workflows_with_max_results(mock_create_client): function test_list_workflows_with_next_token (line 2363) | async def test_list_workflows_with_next_token(mock_create_client): function test_start_workflow_run_entity_not_found (line 2387) | async def test_start_workflow_run_entity_not_found( function test_start_workflow_run_with_run_properties (line 2418) | async def test_start_workflow_run_with_run_properties( function test_delete_trigger_entity_not_found (line 2453) | async def test_delete_trigger_entity_not_found( function test_get_triggers_with_max_results (line 2481) | async def test_get_triggers_with_max_results(mock_create_client): function test_get_triggers_with_next_token (line 2503) | async def test_get_triggers_with_next_token(mock_create_client): function test_start_trigger_entity_not_found (line 2527) | async def test_start_trigger_entity_not_found( function test_stop_trigger_entity_not_found (line 2557) | async def test_stop_trigger_entity_not_found( function test_create_workflow_empty_definition (line 2586) | async def test_create_workflow_empty_definition(mock_prepare_tags, mock_... function test_create_trigger_minimal_params (line 2616) | async def test_create_trigger_minimal_params(mock_prepare_tags, mock_cre... function test_workflow_parameter_validation_errors (line 2652) | async def test_workflow_parameter_validation_errors(mock_create_client): function test_trigger_parameter_validation_errors (line 2685) | async def test_trigger_parameter_validation_errors(mock_create_client): function test_workflow_general_exception (line 2725) | async def test_workflow_general_exception(mock_create_client): function test_trigger_general_exception (line 2745) | async def test_trigger_general_exception(mock_create_client): function test_workflow_no_write_access_fallback (line 2765) | async def test_workflow_no_write_access_fallback(mock_create_client): function test_trigger_no_write_access_fallback (line 2786) | async def test_trigger_no_write_access_fallback(mock_create_client): FILE: src/aws-dataprocessing-mcp-server/tests/models/test_athena_models.py class TestQueryExecutionData (line 52) | class TestQueryExecutionData: method test_batch_get_query_execution_data (line 55) | def test_batch_get_query_execution_data(self): method test_get_query_execution_data (line 66) | def test_get_query_execution_data(self): method test_get_query_results_data (line 77) | def test_get_query_results_data(self): method test_get_query_runtime_statistics_data (line 92) | def test_get_query_runtime_statistics_data(self): method test_list_query_executions_data (line 103) | def test_list_query_executions_data(self): method test_start_query_execution_data (line 116) | def test_start_query_execution_data(self): method test_stop_query_execution_data (line 124) | def test_stop_query_execution_data(self): class TestNamedQueryData (line 133) | class TestNamedQueryData: method test_batch_get_named_query_data (line 136) | def test_batch_get_named_query_data(self): method test_create_named_query_data (line 147) | def test_create_named_query_data(self): method test_delete_named_query_data (line 153) | def test_delete_named_query_data(self): method test_get_named_query_data (line 159) | def test_get_named_query_data(self): method test_list_named_queries_data (line 168) | def test_list_named_queries_data(self): method test_update_named_query_data (line 181) | def test_update_named_query_data(self): function test_optional_fields (line 188) | def test_optional_fields(): function test_complex_data_structures (line 220) | def test_complex_data_structures(): class TestDataCatalogData (line 305) | class TestDataCatalogData: method test_create_data_catalog_data (line 308) | def test_create_data_catalog_data(self): method test_delete_data_catalog_data (line 314) | def test_delete_data_catalog_data(self): method test_get_data_catalog_data (line 320) | def test_get_data_catalog_data(self): method test_list_data_catalogs_data (line 335) | def test_list_data_catalogs_data(self): method test_update_data_catalog_data (line 359) | def test_update_data_catalog_data(self): method test_get_database_data (line 365) | def test_get_database_data(self): method test_get_table_metadata_data (line 377) | def test_get_table_metadata_data(self): method test_list_databases_data (line 397) | def test_list_databases_data(self): method test_list_table_metadata_data (line 419) | def test_list_table_metadata_data(self): class TestWorkGroupData (line 444) | class TestWorkGroupData: method test_create_work_group_data (line 447) | def test_create_work_group_data(self): method test_delete_work_group_data (line 453) | def test_delete_work_group_data(self): method test_get_work_group_data (line 459) | def test_get_work_group_data(self): method test_list_work_groups_data (line 479) | def test_list_work_groups_data(self): method test_update_work_group_data (line 501) | def test_update_work_group_data(self): function test_model_serialization (line 508) | def test_model_serialization(): FILE: src/aws-dataprocessing-mcp-server/tests/models/test_data_catalog_models.py class TestGlueOperation (line 62) | class TestGlueOperation: method test_enum_values (line 65) | def test_enum_values(self): class TestDatabaseSummary (line 76) | class TestDatabaseSummary: method test_create_with_required_fields (line 79) | def test_create_with_required_fields(self): method test_create_with_all_fields (line 88) | def test_create_with_all_fields(self): method test_missing_required_fields (line 103) | def test_missing_required_fields(self): class TestTableSummary (line 112) | class TestTableSummary: method test_create_with_required_fields (line 115) | def test_create_with_required_fields(self): method test_create_with_all_fields (line 127) | def test_create_with_all_fields(self): method test_missing_required_fields (line 155) | def test_missing_required_fields(self): class TestConnectionSummary (line 167) | class TestConnectionSummary: method test_create_with_required_fields (line 170) | def test_create_with_required_fields(self): method test_create_with_all_fields (line 180) | def test_create_with_all_fields(self): method test_missing_required_fields (line 215) | def test_missing_required_fields(self): class TestPartitionSummary (line 244) | class TestPartitionSummary: method test_create_with_required_fields (line 247) | def test_create_with_required_fields(self): method test_create_with_all_fields (line 260) | def test_create_with_all_fields(self): method test_missing_required_fields (line 284) | def test_missing_required_fields(self): class TestCatalogSummary (line 318) | class TestCatalogSummary: method test_create_with_required_fields (line 321) | def test_create_with_required_fields(self): method test_create_with_all_fields (line 330) | def test_create_with_all_fields(self): method test_missing_required_fields (line 345) | def test_missing_required_fields(self): class TestDatabaseDataModels (line 354) | class TestDatabaseDataModels: method test_create_database_data (line 357) | def test_create_database_data(self): method test_delete_database_data (line 363) | def test_delete_database_data(self): method test_get_database_data (line 369) | def test_get_database_data(self): method test_list_databases_data (line 387) | def test_list_databases_data(self): method test_update_database_data (line 406) | def test_update_database_data(self): class TestTableDataModels (line 413) | class TestTableDataModels: method test_create_table_data (line 416) | def test_create_table_data(self): method test_delete_table_data (line 423) | def test_delete_table_data(self): method test_get_table_data (line 430) | def test_get_table_data(self): method test_list_tables_data (line 458) | def test_list_tables_data(self): method test_update_table_data (line 475) | def test_update_table_data(self): method test_search_tables_data (line 482) | def test_search_tables_data(self): class TestConnectionDataModels (line 502) | class TestConnectionDataModels: method test_create_connection_data (line 505) | def test_create_connection_data(self): method test_delete_connection_data (line 515) | def test_delete_connection_data(self): method test_get_connection_data (line 525) | def test_get_connection_data(self): method test_list_connections_data (line 563) | def test_list_connections_data(self): method test_update_connection_data (line 582) | def test_update_connection_data(self): class TestPartitionDataModels (line 593) | class TestPartitionDataModels: method test_create_partition_data (line 596) | def test_create_partition_data(self): method test_delete_partition_data (line 608) | def test_delete_partition_data(self): method test_get_partition_data (line 620) | def test_get_partition_data(self): method test_list_partitions_data (line 655) | def test_list_partitions_data(self): method test_update_partition_data (line 682) | def test_update_partition_data(self): class TestCatalogDataModels (line 695) | class TestCatalogDataModels: method test_create_catalog_data (line 698) | def test_create_catalog_data(self): method test_delete_catalog_data (line 704) | def test_delete_catalog_data(self): method test_get_catalog_data (line 710) | def test_get_catalog_data(self): method test_list_catalogs_data (line 736) | def test_list_catalogs_data(self): method test_import_catalog_data (line 751) | def test_import_catalog_data(self): class TestUtilityModels (line 758) | class TestUtilityModels: method test_glue_job_run (line 761) | def test_glue_job_run(self): method test_batch_operation_result (line 780) | def test_batch_operation_result(self): method test_data_quality_result (line 798) | def test_data_quality_result(self): method test_crawler_run (line 818) | def test_crawler_run(self): FILE: src/aws-dataprocessing-mcp-server/tests/test_init.py class TestInit (line 21) | class TestInit: method test_version (line 24) | def test_version(self): method test_module_reload (line 41) | def test_module_reload(self): FILE: src/aws-dataprocessing-mcp-server/tests/test_server.py class MockContext (line 37) | class MockContext: class MockTextContent (line 44) | class MockTextContent: method __init__ (line 47) | def __init__(self, type='text', text=''): class MockCallToolResult (line 59) | class MockCallToolResult: method __init__ (line 62) | def __init__(self, isError=False, content=None, **kwargs): function test_server_initialization (line 85) | async def test_server_initialization(): function test_command_line_args (line 130) | async def test_command_line_args(): function test_glue_data_catalog_handler_initialization (line 247) | async def test_glue_data_catalog_handler_initialization(): function test_glue_data_crawler_handler_initialization (line 275) | async def test_glue_data_crawler_handler_initialization(): function test_handler_write_access_control (line 302) | async def test_handler_write_access_control(): FILE: src/aws-dataprocessing-mcp-server/tests/test_utils.py class AttributeDict (line 22) | class AttributeDict: method __init__ (line 25) | def __init__(self, data: Dict[str, Any]): method __getattr__ (line 29) | def __getattr__(self, name: str) -> Any: method __getitem__ (line 36) | def __getitem__(self, key: str) -> Any: method get (line 40) | def get(self, key: str, default: Any = None) -> Any: method __eq__ (line 44) | def __eq__(self, other) -> bool: method __repr__ (line 52) | def __repr__(self) -> str: function extract_result_data (line 57) | def extract_result_data(result: CallToolResult) -> Dict[str, Any]: class CallToolResultWrapper (line 94) | class CallToolResultWrapper: method __init__ (line 101) | def __init__(self, result: CallToolResult): method __getattr__ (line 110) | def __getattr__(self, name: str) -> Any: method isError (line 295) | def isError(self) -> bool: method content (line 300) | def content(self): FILE: src/aws-dataprocessing-mcp-server/tests/utils/test_aws_helper.py class TestAwsHelper (line 34) | class TestAwsHelper: method setup_method (line 37) | def setup_method(self): method test_get_aws_region_with_env_var (line 43) | def test_get_aws_region_with_env_var(self): method test_get_aws_region_with_default_env_var (line 48) | def test_get_aws_region_with_default_env_var(self): method test_get_aws_region_prioritizes_aws_region_over_default (line 53) | def test_get_aws_region_prioritizes_aws_region_over_default(self): method test_get_aws_region_from_boto3_session (line 60) | def test_get_aws_region_from_boto3_session(self): method test_get_aws_region_boto3_session_no_region (line 70) | def test_get_aws_region_boto3_session_no_region(self): method test_get_aws_region_boto3_session_exception (line 80) | def test_get_aws_region_boto3_session_exception(self): method test_get_aws_region_without_env_var (line 86) | def test_get_aws_region_without_env_var(self): method test_get_aws_profile_with_env_var (line 96) | def test_get_aws_profile_with_env_var(self): method test_get_aws_profile_without_env_var (line 101) | def test_get_aws_profile_without_env_var(self): method test_get_aws_account_id_cached (line 106) | def test_get_aws_account_id_cached(self): method test_get_aws_account_id_uncached (line 117) | def test_get_aws_account_id_uncached(self): method test_get_aws_account_id_exception (line 133) | def test_get_aws_account_id_exception(self): method test_get_aws_partition_cached (line 149) | def test_get_aws_partition_cached(self): method test_get_aws_partition_uncached (line 160) | def test_get_aws_partition_uncached(self): method test_get_aws_partition_exception (line 178) | def test_get_aws_partition_exception(self): method test_create_boto3_client_with_region (line 194) | def test_create_boto3_client_with_region(self): method test_create_boto3_client_with_env_region (line 212) | def test_create_boto3_client_with_env_region(self): method test_create_boto3_client_with_profile (line 225) | def test_create_boto3_client_with_profile(self): method test_create_boto3_client_with_profile_and_region (line 249) | def test_create_boto3_client_with_profile_and_region(self): method test_create_boto3_client_without_region (line 266) | def test_create_boto3_client_without_region(self): method test_create_boto3_client_with_profile_without_region (line 280) | def test_create_boto3_client_with_profile_without_region(self): method test_prepare_resource_tags (line 298) | def test_prepare_resource_tags(self): method test_convert_tags_to_aws_format_key_value (line 322) | def test_convert_tags_to_aws_format_key_value(self): method test_convert_tags_to_aws_format_tag_key_value (line 333) | def test_convert_tags_to_aws_format_tag_key_value(self): method test_get_resource_tags_athena_workgroup_success (line 344) | def test_get_resource_tags_athena_workgroup_success(self): method test_get_resource_tags_athena_workgroup_client_error (line 370) | def test_get_resource_tags_athena_workgroup_client_error(self): method test_verify_resource_managed_by_mcp_key_value_true (line 386) | def test_verify_resource_managed_by_mcp_key_value_true(self): method test_verify_resource_managed_by_mcp_key_value_false (line 397) | def test_verify_resource_managed_by_mcp_key_value_false(self): method test_verify_resource_managed_by_mcp_tag_key_value_true (line 408) | def test_verify_resource_managed_by_mcp_tag_key_value_true(self): method test_verify_resource_managed_by_mcp_tag_key_value_false (line 419) | def test_verify_resource_managed_by_mcp_tag_key_value_false(self): method test_verify_resource_managed_by_mcp_empty_tags (line 430) | def test_verify_resource_managed_by_mcp_empty_tags(self): method test_verify_resource_managed_by_mcp_missing_tag (line 436) | def test_verify_resource_managed_by_mcp_missing_tag(self): method test_get_resource_tags_glue_job (line 444) | def test_get_resource_tags_glue_job(self): method test_get_resource_tags_for_untagged_glue_job (line 454) | def test_get_resource_tags_for_untagged_glue_job(self): method test_get_resource_tags_for_glue_job_client_error (line 462) | def test_get_resource_tags_for_glue_job_client_error(self): method test_is_resource_mcp_managed_with_tags (line 473) | def test_is_resource_mcp_managed_with_tags(self): method test_is_resource_mcp_managed_without_tags (line 490) | def test_is_resource_mcp_managed_without_tags(self): method test_is_resource_mcp_managed_with_parameters (line 505) | def test_is_resource_mcp_managed_with_parameters(self): method test_is_resource_mcp_managed_without_parameters (line 524) | def test_is_resource_mcp_managed_without_parameters(self): method test_is_resource_mcp_managed_with_parameters_not_managed (line 540) | def test_is_resource_mcp_managed_with_parameters_not_managed(self): method test_verify_emr_cluster_managed_by_mcp_success (line 559) | def test_verify_emr_cluster_managed_by_mcp_success(self): method test_verify_emr_cluster_managed_by_mcp_not_managed (line 585) | def test_verify_emr_cluster_managed_by_mcp_not_managed(self): method test_is_custom_tags_enabled_true (line 610) | def test_is_custom_tags_enabled_true(self): method test_is_custom_tags_enabled_true_lowercase (line 615) | def test_is_custom_tags_enabled_true_lowercase(self): method test_is_custom_tags_enabled_false (line 620) | def test_is_custom_tags_enabled_false(self): method test_is_custom_tags_enabled_not_set (line 625) | def test_is_custom_tags_enabled_not_set(self): method test_is_custom_tags_enabled_invalid_value (line 630) | def test_is_custom_tags_enabled_invalid_value(self): method test_prepare_resource_tags_with_custom_tags_enabled (line 635) | def test_prepare_resource_tags_with_custom_tags_enabled(self): method test_verify_resource_managed_by_mcp_with_custom_tags_enabled (line 650) | def test_verify_resource_managed_by_mcp_with_custom_tags_enabled(self): method test_is_resource_mcp_managed_with_custom_tags_enabled (line 662) | def test_is_resource_mcp_managed_with_custom_tags_enabled(self): method test_verify_emr_cluster_managed_by_mcp_with_custom_tags_enabled (line 685) | def test_verify_emr_cluster_managed_by_mcp_with_custom_tags_enabled(se... method test_verify_athena_data_catalog_managed_by_mcp_with_custom_tags_enabled (line 700) | def test_verify_athena_data_catalog_managed_by_mcp_with_custom_tags_en... method test_verify_emr_serverless_application_managed_by_mcp_success (line 716) | def test_verify_emr_serverless_application_managed_by_mcp_success(self): method test_verify_emr_serverless_application_managed_by_mcp_not_managed (line 744) | def test_verify_emr_serverless_application_managed_by_mcp_not_managed(... method test_verify_emr_serverless_application_managed_by_mcp_wrong_type (line 771) | def test_verify_emr_serverless_application_managed_by_mcp_wrong_type(s... method test_verify_emr_serverless_application_managed_by_mcp_default_type_acceptance (line 799) | def test_verify_emr_serverless_application_managed_by_mcp_default_type... method test_verify_emr_serverless_application_managed_by_mcp_client_error (line 828) | def test_verify_emr_serverless_application_managed_by_mcp_client_error... method test_verify_emr_serverless_application_managed_by_mcp_no_tags (line 849) | def test_verify_emr_serverless_application_managed_by_mcp_no_tags(self): method test_verify_emr_serverless_application_managed_by_mcp_with_custom_tags_enabled (line 874) | def test_verify_emr_serverless_application_managed_by_mcp_with_custom_... method test_get_aws_partition_different_partitions (line 891) | def test_get_aws_partition_different_partitions(self): method test_verify_athena_data_catalog_managed_by_mcp_success (line 915) | def test_verify_athena_data_catalog_managed_by_mcp_success(self): method test_verify_athena_data_catalog_managed_by_mcp_with_workgroup (line 951) | def test_verify_athena_data_catalog_managed_by_mcp_with_workgroup(self): method test_verify_athena_data_catalog_managed_by_mcp_not_managed (line 987) | def test_verify_athena_data_catalog_managed_by_mcp_not_managed(self): method test_verify_athena_data_catalog_managed_by_mcp_tag_error (line 1022) | def test_verify_athena_data_catalog_managed_by_mcp_tag_error(self): method test_verify_athena_data_catalog_managed_by_mcp_get_error (line 1053) | def test_verify_athena_data_catalog_managed_by_mcp_get_error(self): method test_verify_emr_cluster_managed_by_mcp_wrong_type (line 1070) | def test_verify_emr_cluster_managed_by_mcp_wrong_type(self): method test_verify_emr_cluster_managed_by_mcp_client_error (line 1096) | def test_verify_emr_cluster_managed_by_mcp_client_error(self): method test_verify_emr_cluster_managed_by_mcp_cluster_resource_type (line 1115) | def test_verify_emr_cluster_managed_by_mcp_cluster_resource_type(self): method test_verify_emr_cluster_managed_by_mcp_no_tags (line 1142) | def test_verify_emr_cluster_managed_by_mcp_no_tags(self): FILE: src/aws-dataprocessing-mcp-server/tests/utils/test_custom_tags.py class TestCustomTags (line 29) | class TestCustomTags: method test_is_custom_tags_enabled_true (line 32) | def test_is_custom_tags_enabled_true(self): method test_is_custom_tags_enabled_false (line 37) | def test_is_custom_tags_enabled_false(self): method test_prepare_resource_tags_with_custom_tags_enabled (line 47) | def test_prepare_resource_tags_with_custom_tags_enabled(self): method test_prepare_resource_tags_with_custom_tags_disabled (line 63) | def test_prepare_resource_tags_with_custom_tags_disabled(self): method test_verify_resource_managed_by_mcp_with_custom_tags_enabled (line 86) | def test_verify_resource_managed_by_mcp_with_custom_tags_enabled(self): method test_is_resource_mcp_managed_with_custom_tags_enabled (line 96) | def test_is_resource_mcp_managed_with_custom_tags_enabled(self): method test_verify_emr_cluster_managed_by_mcp_with_custom_tags_enabled (line 123) | def test_verify_emr_cluster_managed_by_mcp_with_custom_tags_enabled(se... method test_verify_athena_data_catalog_managed_by_mcp_with_custom_tags_enabled (line 139) | def test_verify_athena_data_catalog_managed_by_mcp_with_custom_tags_en... FILE: src/aws-dataprocessing-mcp-server/tests/utils/test_logging_helper.py class TestLoggingHelper (line 25) | class TestLoggingHelper: method mock_ctx (line 29) | def mock_ctx(self): method test_log_level_enum (line 35) | def test_log_level_enum(self): method test_log_with_request_id_debug (line 44) | def test_log_with_request_id_debug(self, mock_logger): method test_log_with_request_id_info (line 52) | def test_log_with_request_id_info(self, mock_logger): method test_log_with_request_id_warning (line 60) | def test_log_with_request_id_warning(self, mock_logger): method test_log_with_request_id_error (line 68) | def test_log_with_request_id_error(self, mock_logger): method test_log_with_request_id_critical (line 76) | def test_log_with_request_id_critical(self, mock_logger): method test_log_with_request_id_with_kwargs (line 86) | def test_log_with_request_id_with_kwargs(self, mock_logger): FILE: src/aws-dataprocessing-mcp-server/tests/utils/test_sql_analyzer.py class TestSqlAnalyzer (line 20) | class TestSqlAnalyzer: method test_remove_sql_comments_multiline (line 23) | def test_remove_sql_comments_multiline(self): method test_remove_sql_comments_multiline_nested (line 29) | def test_remove_sql_comments_multiline_nested(self): method test_remove_sql_comments_single_line (line 40) | def test_remove_sql_comments_single_line(self): method test_remove_sql_comments_multiple_single_line (line 46) | def test_remove_sql_comments_multiple_single_line(self): method test_remove_sql_comments_mixed (line 57) | def test_remove_sql_comments_mixed(self): method test_normalize_whitespace_basic (line 63) | def test_normalize_whitespace_basic(self): method test_normalize_whitespace_tabs_newlines (line 69) | def test_normalize_whitespace_tabs_newlines(self): method test_preprocess_sql_complete (line 75) | def test_preprocess_sql_complete(self): method test_preprocess_sql_empty_string (line 82) | def test_preprocess_sql_empty_string(self): method test_preprocess_sql_whitespace_only (line 86) | def test_preprocess_sql_whitespace_only(self): method test_contains_write_operations_select_queries (line 90) | def test_contains_write_operations_select_queries(self): method test_contains_write_operations_insert_queries (line 101) | def test_contains_write_operations_insert_queries(self): method test_contains_write_operations_update_queries (line 111) | def test_contains_write_operations_update_queries(self): method test_contains_write_operations_delete_queries (line 121) | def test_contains_write_operations_delete_queries(self): method test_contains_write_operations_ddl_queries (line 131) | def test_contains_write_operations_ddl_queries(self): method test_contains_write_operations_ctas_queries (line 144) | def test_contains_write_operations_ctas_queries(self): method test_contains_write_operations_other_write_operations (line 154) | def test_contains_write_operations_other_write_operations(self): method test_contains_write_operations_comment_injection (line 167) | def test_contains_write_operations_comment_injection(self): method test_contains_write_operations_multiline_comment_injection (line 179) | def test_contains_write_operations_multiline_comment_injection(self): method test_contains_write_operations_mixed_case (line 187) | def test_contains_write_operations_mixed_case(self): method test_contains_write_operations_whitespace_manipulation (line 198) | def test_contains_write_operations_whitespace_manipulation(self): method test_contains_write_operations_complex_cte_with_write (line 209) | def test_contains_write_operations_complex_cte_with_write(self): method test_contains_write_operations_complex_cte_read_only (line 219) | def test_contains_write_operations_complex_cte_read_only(self): method test_contains_write_operations_empty_and_None (line 232) | def test_contains_write_operations_empty_and_None(self): method test_contains_write_operations_empty_after_cleaned (line 238) | def test_contains_write_operations_empty_after_cleaned(self): method test_is_read_only_query_select_statements (line 243) | def test_is_read_only_query_select_statements(self): method test_is_read_only_query_utility_statements (line 253) | def test_is_read_only_query_utility_statements(self): method test_is_read_only_query_write_operations (line 266) | def test_is_read_only_query_write_operations(self): method test_is_read_only_query_edge_cases (line 278) | def test_is_read_only_query_edge_cases(self): method test_get_query_type_basic_statements (line 289) | def test_get_query_type_basic_statements(self): method test_get_query_type_with_comments (line 308) | def test_get_query_type_with_comments(self): method test_get_query_type_with_whitespace (line 321) | def test_get_query_type_with_whitespace(self): method test_get_query_type_edge_cases (line 334) | def test_get_query_type_edge_cases(self): method test_get_query_type_case_insensitive (line 346) | def test_get_query_type_case_insensitive(self): method test_security_injection_scenarios (line 360) | def test_security_injection_scenarios(self): method test_legitimate_read_queries (line 393) | def test_legitimate_read_queries(self): method test_enhanced_write_operations_detection (line 433) | def test_enhanced_write_operations_detection(self): method test_enhanced_ddl_object_type_detection (line 469) | def test_enhanced_ddl_object_type_detection(self): method test_case_insensitive_enhanced_operations (line 513) | def test_case_insensitive_enhanced_operations(self): FILE: src/aws-diagram-mcp-server/awslabs/aws_diagram_mcp_server/_sandbox_runner.py function _safe_urlretrieve (line 49) | def _safe_urlretrieve(url: str, filename: str = '') -> tuple: function _build_namespace (line 154) | def _build_namespace(): function _process_diagram_code (line 303) | def _process_diagram_code(code: str, output_path: str) -> str: function main (line 334) | def main(): FILE: src/aws-diagram-mcp-server/awslabs/aws_diagram_mcp_server/diagrams_tools.py function generate_diagram (line 42) | async def generate_diagram( function get_diagram_examples (line 164) | def get_diagram_examples(diagram_type: DiagramType = DiagramType.ALL) ->... function list_diagram_icons (line 401) | def list_diagram_icons( FILE: src/aws-diagram-mcp-server/awslabs/aws_diagram_mcp_server/models.py class DiagramType (line 22) | class DiagramType(str, Enum): class DiagramGenerateRequest (line 35) | class DiagramGenerateRequest(BaseModel): method validate_code (line 51) | def validate_code(cls, v): class DiagramExampleRequest (line 58) | class DiagramExampleRequest(BaseModel): class DiagramGenerateResponse (line 67) | class DiagramGenerateResponse(BaseModel): class DiagramExampleResponse (line 75) | class DiagramExampleResponse(BaseModel): class DiagramIconsRequest (line 81) | class DiagramIconsRequest(BaseModel): class DiagramIconsResponse (line 92) | class DiagramIconsResponse(BaseModel): FILE: src/aws-diagram-mcp-server/awslabs/aws_diagram_mcp_server/scanner.py class SecurityIssue (line 32) | class SecurityIssue(BaseModel): class CodeMetrics (line 42) | class CodeMetrics(BaseModel): class CodeScanResult (line 52) | class CodeScanResult(BaseModel): function validate_syntax (line 62) | async def validate_syntax(code: str) -> Tuple[bool, Optional[str]]: function check_security (line 82) | async def check_security(code: str) -> List[SecurityIssue]: function count_code_metrics (line 152) | async def count_code_metrics(code: str) -> CodeMetrics: function scan_python_code (line 184) | async def scan_python_code(code: str) -> CodeScanResult: function _get_attribute_name (line 217) | def _get_attribute_name(node: ast.AST) -> Optional[str]: function _check_dangerous_functions_string (line 230) | def _check_dangerous_functions_string(code: str) -> List[Dict[str, Any]]: function check_dangerous_functions (line 300) | def check_dangerous_functions(code: str) -> List[Dict[str, Any]]: function get_fix_suggestion (line 424) | def get_fix_suggestion(issue: Dict[str, Any]) -> str: FILE: src/aws-diagram-mcp-server/awslabs/aws_diagram_mcp_server/server.py function mcp_generate_diagram (line 93) | async def mcp_generate_diagram( function mcp_get_diagram_examples (line 193) | async def mcp_get_diagram_examples( function mcp_list_diagram_icons (line 247) | async def mcp_list_diagram_icons( function main (line 288) | def main(): FILE: src/aws-diagram-mcp-server/tests/conftest.py function suppress_deprecation_warnings (line 32) | def suppress_deprecation_warnings(): function temp_workspace_dir (line 43) | def temp_workspace_dir() -> Generator[str, None, None]: function aws_diagram_code (line 50) | def aws_diagram_code() -> str: function sequence_diagram_code (line 58) | def sequence_diagram_code() -> str: function flow_diagram_code (line 74) | def flow_diagram_code() -> str: function invalid_diagram_code (line 92) | def invalid_diagram_code() -> str: function dangerous_diagram_code (line 101) | def dangerous_diagram_code() -> str: function example_diagrams (line 112) | def example_diagrams() -> Dict[str, str]: FILE: src/aws-diagram-mcp-server/tests/test_diagrams.py class TestGetDiagramExamples (line 33) | class TestGetDiagramExamples: method test_get_all_examples (line 36) | def test_get_all_examples(self): method test_get_aws_examples (line 50) | def test_get_aws_examples(self): method test_get_sequence_examples (line 64) | def test_get_sequence_examples(self): method test_get_flow_examples (line 72) | def test_get_flow_examples(self): method test_get_class_examples (line 80) | def test_get_class_examples(self): method test_get_k8s_examples (line 88) | def test_get_k8s_examples(self): method test_get_onprem_examples (line 97) | def test_get_onprem_examples(self): method test_get_custom_examples (line 106) | def test_get_custom_examples(self): class TestListDiagramIcons (line 115) | class TestListDiagramIcons: method test_list_icons_without_filters (line 118) | def test_list_icons_without_filters(self): method test_list_icons_with_provider_filter (line 134) | def test_list_icons_with_provider_filter(self): method test_list_icons_with_provider_and_service_filter (line 150) | def test_list_icons_with_provider_and_service_filter(self): method test_list_icons_with_invalid_provider (line 164) | def test_list_icons_with_invalid_provider(self): method test_list_icons_with_invalid_service (line 173) | def test_list_icons_with_invalid_service(self): method test_list_icons_with_service_filter_only (line 185) | def test_list_icons_with_service_filter_only(self): class TestGenerateDiagram (line 195) | class TestGenerateDiagram: method test_generate_diagram_success (line 199) | async def test_generate_diagram_success(self, aws_diagram_code, temp_w... method test_generate_diagram_with_absolute_path (line 223) | async def test_generate_diagram_with_absolute_path(self, aws_diagram_c... method test_generate_diagram_with_random_filename (line 245) | async def test_generate_diagram_with_random_filename( method test_generate_diagram_with_invalid_code (line 270) | async def test_generate_diagram_with_invalid_code( method test_generate_diagram_with_dangerous_code (line 284) | async def test_generate_diagram_with_dangerous_code( method test_generate_diagram_with_timeout (line 298) | async def test_generate_diagram_with_timeout(self, aws_diagram_code, t... method test_generate_sequence_diagram (line 322) | async def test_generate_sequence_diagram(self, sequence_diagram_code, ... method test_generate_flow_diagram (line 341) | async def test_generate_flow_diagram(self, flow_diagram_code, temp_wor... method test_generate_diagram_with_show_parameter (line 365) | async def test_generate_diagram_with_show_parameter(self, temp_workspa... method test_generate_diagram_with_filename_parameter (line 386) | async def test_generate_diagram_with_filename_parameter(self, temp_wor... class TestNamespaceRCEPrevention (line 411) | class TestNamespaceRCEPrevention: method test_os_alias_rce_blocked (line 420) | async def test_os_alias_rce_blocked(self, temp_workspace_dir): method test_os_popen_alias_rce_blocked (line 434) | async def test_os_popen_alias_rce_blocked(self, temp_workspace_dir): method test_diagrams_module_os_leak_blocked (line 446) | async def test_diagrams_module_os_leak_blocked(self, temp_workspace_dir): method test_function_extraction_rce_blocked (line 458) | async def test_function_extraction_rce_blocked(self, temp_workspace_dir): method test_legitimate_diagram_still_works (line 470) | async def test_legitimate_diagram_still_works(self, aws_diagram_code, ... method test_builtins_import_blocked (line 487) | async def test_builtins_import_blocked(self, temp_workspace_dir): method test_builtins_restricted_still_works (line 499) | async def test_builtins_restricted_still_works(self, aws_diagram_code,... method test_urlretrieve_path_traversal_blocked (line 515) | async def test_urlretrieve_path_traversal_blocked(self, temp_workspace... method test_urlretrieve_non_image_blocked (line 528) | async def test_urlretrieve_non_image_blocked(self, temp_workspace_dir): method test_urlretrieve_ftp_scheme_blocked (line 540) | async def test_urlretrieve_ftp_scheme_blocked(self, temp_workspace_dir): method test_traceback_frame_traversal_blocked (line 552) | async def test_traceback_frame_traversal_blocked(self, temp_workspace_... method test_generator_frame_access_blocked (line 578) | async def test_generator_frame_access_blocked(self, temp_workspace_dir): method test_code_object_access_blocked (line 598) | async def test_code_object_access_blocked(self, temp_workspace_dir): class TestSafeUrlretrieve (line 617) | class TestSafeUrlretrieve: method test_rejects_ftp_scheme (line 620) | def test_rejects_ftp_scheme(self): method test_rejects_file_scheme (line 627) | def test_rejects_file_scheme(self): method test_rejects_non_image_extension (line 634) | def test_rejects_non_image_extension(self): method test_rejects_no_extension (line 641) | def test_rejects_no_extension(self): method test_strips_path_traversal (line 648) | def test_strips_path_traversal(self): method test_rejects_empty_filename (line 663) | def test_rejects_empty_filename(self): method test_accepts_valid_image_extensions (line 670) | def test_accepts_valid_image_extensions(self): method test_downloads_to_unique_temp_dir (line 682) | def test_downloads_to_unique_temp_dir(self): method test_uses_url_basename_when_filename_omitted (line 695) | def test_uses_url_basename_when_filename_omitted(self): class TestSandboxRunner (line 707) | class TestSandboxRunner: method test_safe_builtins_excludes_dangerous (line 710) | def test_safe_builtins_excludes_dangerous(self): method test_safe_builtins_includes_essentials (line 730) | def test_safe_builtins_includes_essentials(self): method test_safe_builtins_includes_exceptions (line 746) | def test_safe_builtins_includes_exceptions(self): method test_build_namespace_has_diagram_classes (line 751) | def test_build_namespace_has_diagram_classes(self): method test_build_namespace_has_safe_urlretrieve (line 758) | def test_build_namespace_has_safe_urlretrieve(self): method test_build_namespace_restricts_builtins (line 764) | def test_build_namespace_restricts_builtins(self): method test_build_namespace_excludes_os (line 771) | def test_build_namespace_excludes_os(self): method test_process_diagram_code_adds_show_false (line 776) | def test_process_diagram_code_adds_show_false(self): method test_process_diagram_code_sets_filename (line 782) | def test_process_diagram_code_sets_filename(self): method test_process_diagram_code_replaces_existing_filename (line 788) | def test_process_diagram_code_replaces_existing_filename(self): method test_main_invalid_json (line 795) | def test_main_invalid_json(self): method test_main_missing_keys (line 810) | def test_main_missing_keys(self): method test_main_execution_error (line 825) | def test_main_execution_error(self): method test_main_no_diagram_created (line 841) | def test_main_no_diagram_created(self): method test_main_success_path (line 857) | def test_main_success_path(self): method test_main_entry_point (line 880) | def test_main_entry_point(self): class TestSubprocessErrorPaths (line 897) | class TestSubprocessErrorPaths: method test_subprocess_crash_no_stdout (line 901) | async def test_subprocess_crash_no_stdout(self, temp_workspace_dir): method test_subprocess_invalid_json_output (line 928) | async def test_subprocess_invalid_json_output(self, temp_workspace_dir): method test_subprocess_timeout (line 954) | async def test_subprocess_timeout(self, temp_workspace_dir): method test_subprocess_unexpected_exception (line 972) | async def test_subprocess_unexpected_exception(self, temp_workspace_dir): class TestCrossPlatformTimeout (line 989) | class TestCrossPlatformTimeout: method test_subprocess_module_imported (line 992) | def test_subprocess_module_imported(self): method test_unix_path_uses_sigalrm (line 999) | async def test_unix_path_uses_sigalrm(self, aws_diagram_code, temp_wor... method test_threading_fallback_when_sigalrm_unavailable (line 1018) | async def test_threading_fallback_when_sigalrm_unavailable( method test_threading_timeout_triggers (line 1049) | async def test_threading_timeout_triggers(self, temp_workspace_dir): FILE: src/aws-diagram-mcp-server/tests/test_models.py class TestDiagramType (line 32) | class TestDiagramType: method test_diagram_type_values (line 35) | def test_diagram_type_values(self): method test_diagram_type_from_string (line 46) | def test_diagram_type_from_string(self): method test_invalid_diagram_type (line 57) | def test_invalid_diagram_type(self): class TestDiagramGenerateRequest (line 63) | class TestDiagramGenerateRequest: method test_valid_request (line 66) | def test_valid_request(self): method test_minimal_request (line 79) | def test_minimal_request(self): method test_invalid_code (line 92) | def test_invalid_code(self): method test_invalid_timeout (line 102) | def test_invalid_timeout(self): class TestDiagramGenerateResponse (line 120) | class TestDiagramGenerateResponse: method test_success_response (line 123) | def test_success_response(self): method test_error_response (line 134) | def test_error_response(self): class TestDiagramExampleResponse (line 145) | class TestDiagramExampleResponse: method test_example_response (line 148) | def test_example_response(self): class TestDiagramIconsResponse (line 163) | class TestDiagramIconsResponse: method test_icons_response (line 166) | def test_icons_response(self): FILE: src/aws-diagram-mcp-server/tests/test_sarif_fix.py class TestSarifFix (line 6) | class TestSarifFix: method test_sarif_om_available (line 9) | def test_sarif_om_available(self): method test_bandit_imports_without_error (line 20) | def test_bandit_imports_without_error(self): method test_scanner_functionality (line 36) | def test_scanner_functionality(self): method test_bandit_security_scan (line 59) | def test_bandit_security_scan(self): method test_diagram_generation_unaffected (line 89) | def test_diagram_generation_unaffected(self): method test_sarif_om_version (line 136) | def test_sarif_om_version(self): FILE: src/aws-diagram-mcp-server/tests/test_scanner.py class TestSyntaxValidation (line 28) | class TestSyntaxValidation: method test_valid_syntax (line 32) | async def test_valid_syntax(self): method test_invalid_syntax (line 40) | async def test_invalid_syntax(self): method test_complex_valid_syntax (line 49) | async def test_complex_valid_syntax(self): method test_import_rejected (line 65) | async def test_import_rejected(self): method test_import_from_rejected (line 77) | async def test_import_from_rejected(self): class TestSecurityChecking (line 89) | class TestSecurityChecking: method test_safe_code (line 93) | async def test_safe_code(self): method test_dangerous_code (line 105) | async def test_dangerous_code(self): method test_exec_code (line 116) | async def test_exec_code(self): class TestCodeMetrics (line 126) | class TestCodeMetrics: method test_empty_code (line 130) | async def test_empty_code(self): method test_code_with_comments (line 141) | async def test_code_with_comments(self): method test_code_with_blank_lines (line 159) | async def test_code_with_blank_lines(self): class TestDangerousFunctions (line 176) | class TestDangerousFunctions: method test_no_dangerous_functions (line 179) | def test_no_dangerous_functions(self): method test_exec_function (line 190) | def test_exec_function(self): method test_eval_function (line 199) | def test_eval_function(self): method test_os_system (line 208) | def test_os_system(self): method test_multiple_dangerous_functions (line 218) | def test_multiple_dangerous_functions(self): class TestScanPythonCode (line 238) | class TestScanPythonCode: method test_safe_code (line 242) | async def test_safe_code(self): method test_syntax_error (line 258) | async def test_syntax_error(self): method test_security_issue (line 272) | async def test_security_issue(self): method test_dangerous_function (line 286) | async def test_dangerous_function(self): class TestASTDangerousFunctions (line 299) | class TestASTDangerousFunctions: method test_detects_exec (line 304) | def test_detects_exec(self): method test_detects_eval (line 310) | def test_detects_eval(self): method test_detects_compile (line 316) | def test_detects_compile(self): method test_detects_getattr (line 322) | def test_detects_getattr(self): method test_detects_setattr (line 328) | def test_detects_setattr(self): method test_detects_delattr (line 334) | def test_detects_delattr(self): method test_detects_vars (line 340) | def test_detects_vars(self): method test_detects_open (line 346) | def test_detects_open(self): method test_detects_globals (line 352) | def test_detects_globals(self): method test_detects_locals (line 358) | def test_detects_locals(self): method test_detects_breakpoint (line 364) | def test_detects_breakpoint(self): method test_detects_import_dunder (line 370) | def test_detects_import_dunder(self): method test_detects_spawn (line 375) | def test_detects_spawn(self): method test_detects_subprocess_run (line 383) | def test_detects_subprocess_run(self): method test_detects_subprocess_popen (line 389) | def test_detects_subprocess_popen(self): method test_detects_pickle_load (line 395) | def test_detects_pickle_load(self): method test_detects_os_popen (line 401) | def test_detects_os_popen(self): method test_detects_dict_dunder (line 408) | def test_detects_dict_dunder(self): method test_detects_builtins_dunder (line 413) | def test_detects_builtins_dunder(self): method test_detects_class_dunder (line 418) | def test_detects_class_dunder(self): method test_detects_subclasses_dunder (line 423) | def test_detects_subclasses_dunder(self): method test_detects_bases_dunder (line 429) | def test_detects_bases_dunder(self): method test_detects_globals_dunder (line 435) | def test_detects_globals_dunder(self): method test_no_false_positive_exec_in_string (line 442) | def test_no_false_positive_exec_in_string(self): method test_no_false_positive_exec_in_comment (line 447) | def test_no_false_positive_exec_in_comment(self): method test_no_false_positive_exec_in_docstring (line 452) | def test_no_false_positive_exec_in_docstring(self): method test_no_false_positive_variable_name_executor (line 457) | def test_no_false_positive_variable_name_executor(self): method test_no_false_positive_safe_diagram_code (line 462) | def test_no_false_positive_safe_diagram_code(self): method test_no_false_positive_function_def_spawn (line 473) | def test_no_false_positive_function_def_spawn(self): method test_no_false_positive_print_call (line 478) | def test_no_false_positive_print_call(self): method test_empty_code (line 485) | def test_empty_code(self): method test_syntax_error_fallback (line 490) | def test_syntax_error_fallback(self): method test_line_number_accuracy (line 497) | def test_line_number_accuracy(self): method test_nested_calls_both_detected (line 505) | def test_nested_calls_both_detected(self): method test_catches_getattr_bypass (line 515) | def test_catches_getattr_bypass(self): method test_catches_globals_bypass (line 523) | def test_catches_globals_bypass(self): method test_catches_vars_bypass (line 530) | def test_catches_vars_bypass(self): method test_catches_class_traversal (line 537) | def test_catches_class_traversal(self): method test_catches_dict_access_bypass (line 546) | def test_catches_dict_access_bypass(self): method test_catches_compile_bypass (line 553) | def test_catches_compile_bypass(self): class TestVariableAliasingBypass (line 561) | class TestVariableAliasingBypass: method test_scanner_misses_module_alias_os_system (line 570) | def test_scanner_misses_module_alias_os_system(self): method test_scanner_misses_module_alias_os_popen (line 581) | def test_scanner_misses_module_alias_os_popen(self): method test_scanner_misses_function_extraction (line 587) | def test_scanner_misses_function_extraction(self): method test_scanner_misses_builtin_alias_exec (line 594) | def test_scanner_misses_builtin_alias_exec(self): method test_scanner_misses_builtin_alias_eval (line 602) | def test_scanner_misses_builtin_alias_eval(self): class TestNamespaceSecurityIntegration (line 610) | class TestNamespaceSecurityIntegration: method test_os_alias_bypasses_scanner (line 618) | async def test_os_alias_bypasses_scanner(self): method test_os_system_direct_still_caught (line 631) | def test_os_system_direct_still_caught(self): method test_os_popen_direct_still_caught (line 637) | def test_os_popen_direct_still_caught(self): class TestFrameTraversalDetection (line 644) | class TestFrameTraversalDetection: method test_catches_traceback_access (line 651) | def test_catches_traceback_access(self): method test_catches_tb_frame_access (line 658) | def test_catches_tb_frame_access(self): method test_catches_f_back_traversal (line 665) | def test_catches_f_back_traversal(self): method test_catches_f_builtins_access (line 672) | def test_catches_f_builtins_access(self): method test_catches_f_globals_access (line 679) | def test_catches_f_globals_access(self): method test_catches_f_locals_access (line 686) | def test_catches_f_locals_access(self): method test_catches_generator_frame_access (line 693) | def test_catches_generator_frame_access(self): method test_catches_coroutine_frame_access (line 700) | def test_catches_coroutine_frame_access(self): method test_catches_code_object_access (line 707) | def test_catches_code_object_access(self): method test_catches_code_object_consts (line 714) | def test_catches_code_object_consts(self): method test_catches_getattribute_access (line 721) | def test_catches_getattribute_access(self): method test_catches_combined_frame_traversal_pattern (line 728) | def test_catches_combined_frame_traversal_pattern(self): method test_frame_traversal_blocked_by_scan (line 751) | async def test_frame_traversal_blocked_by_scan(self): FILE: src/aws-diagram-mcp-server/tests/test_server.py class TestMcpGenerateDiagram (line 35) | class TestMcpGenerateDiagram: method test_generate_diagram (line 40) | async def test_generate_diagram(self, mock_generate_diagram): method test_generate_diagram_with_defaults (line 78) | async def test_generate_diagram_with_defaults(self, mock_generate_diag... method test_generate_diagram_error (line 108) | async def test_generate_diagram_error(self, mock_generate_diagram): class TestMcpGetDiagramExamples (line 134) | class TestMcpGetDiagramExamples: method test_get_diagram_examples (line 139) | async def test_get_diagram_examples(self, mock_get_diagram_examples): method test_get_diagram_examples_with_specific_type (line 169) | async def test_get_diagram_examples_with_specific_type(self, mock_get_... class TestMcpListDiagramIcons (line 196) | class TestMcpListDiagramIcons: method test_list_diagram_icons_without_filters (line 201) | async def test_list_diagram_icons_without_filters(self, mock_list_diag... method test_list_diagram_icons_with_provider_filter (line 238) | async def test_list_diagram_icons_with_provider_filter(self, mock_list... method test_list_diagram_icons_with_provider_and_service_filter (line 280) | async def test_list_diagram_icons_with_provider_and_service_filter( class TestMcpGetDiagramExamplesStringInput (line 322) | class TestMcpGetDiagramExamplesStringInput: method test_string_input_all (line 327) | async def test_string_input_all(self, mock_get_diagram_examples): method test_string_input_aws (line 337) | async def test_string_input_aws(self, mock_get_diagram_examples): method test_invalid_string_falls_back_to_all (line 347) | async def test_invalid_string_falls_back_to_all(self, mock_get_diagram... method test_each_valid_diagram_type_string (line 357) | async def test_each_valid_diagram_type_string(self, mock_get_diagram_e... class TestServerIntegration (line 368) | class TestServerIntegration: method test_server_tool_registration (line 372) | async def test_server_tool_registration(self): method test_deprecation_notices (line 397) | async def test_deprecation_notices(self): method test_main_emits_deprecation_warning (line 412) | def test_main_emits_deprecation_warning(self, mock_mcp): FILE: src/aws-documentation-mcp-server/awslabs/aws_documentation_mcp_server/models.py class SearchResult (line 20) | class SearchResult(BaseModel): class SearchResponse (line 30) | class SearchResponse(BaseModel): class RecommendationResult (line 38) | class RecommendationResult(BaseModel): FILE: src/aws-documentation-mcp-server/awslabs/aws_documentation_mcp_server/server.py function main (line 28) | def main(): FILE: src/aws-documentation-mcp-server/awslabs/aws_documentation_mcp_server/server_aws.py function read_documentation (line 95) | async def read_documentation( function read_sections (line 169) | async def read_sections( function search_documentation (line 243) | async def search_documentation( function recommend (line 477) | async def recommend( function main (line 569) | def main(): FILE: src/aws-documentation-mcp-server/awslabs/aws_documentation_mcp_server/server_aws_cn.py function read_documentation (line 67) | async def read_documentation( function get_available_services (line 138) | async def get_available_services( function main (line 242) | def main(): FILE: src/aws-documentation-mcp-server/awslabs/aws_documentation_mcp_server/server_utils.py function read_documentation_impl (line 47) | async def read_documentation_impl( function add_search_result_cache_item (line 109) | def add_search_result_cache_item(search_response: SearchResponse) -> None: function get_query_id_from_cache (line 125) | def get_query_id_from_cache(url: str) -> Optional[str]: function read_sections_impl (line 148) | async def read_sections_impl( FILE: src/aws-documentation-mcp-server/awslabs/aws_documentation_mcp_server/util.py function extract_content_from_html (line 22) | def extract_content_from_html(html: str) -> str: function is_html_content (line 145) | def is_html_content(page_raw: str, content_type: str) -> bool: function format_documentation_result (line 158) | def format_documentation_result(url: str, content: str, start_index: int... function extract_sections_from_html (line 195) | def extract_sections_from_html(html: str, section_titles: List[str]) -> ... function parse_recommendation_results (line 263) | def parse_recommendation_results(data: Dict[str, Any]) -> List[Recommend... function add_search_intent_to_search_request (line 329) | def add_search_intent_to_search_request(search_url: str, search_intent: ... FILE: src/aws-documentation-mcp-server/tests/conftest.py function pytest_addoption (line 19) | def pytest_addoption(parser): function pytest_configure (line 29) | def pytest_configure(config): function pytest_collection_modifyitems (line 34) | def pytest_collection_modifyitems(config, items): FILE: src/aws-documentation-mcp-server/tests/test_aws_cn_get_available_services_live.py class MockContext (line 19) | class MockContext: method error (line 22) | async def error(self, message): function test_get_available_services_live (line 29) | async def test_get_available_services_live(): function test_get_available_services_content_structure (line 87) | async def test_get_available_services_content_structure(): FILE: src/aws-documentation-mcp-server/tests/test_aws_cn_read_documentation_live.py class MockContext (line 24) | class MockContext: method error (line 27) | async def error(self, message): function test_read_documentation_china_live (line 34) | async def test_read_documentation_china_live(): function test_read_documentation_china_pagination_live (line 82) | async def test_read_documentation_china_pagination_live(): FILE: src/aws-documentation-mcp-server/tests/test_aws_read_documentation_live.py class MockContext (line 24) | class MockContext: method error (line 27) | async def error(self, message): function test_read_documentation_global_live (line 34) | async def test_read_documentation_global_live(): function test_read_documentation_global_pagination_live (line 82) | async def test_read_documentation_global_pagination_live(): FILE: src/aws-documentation-mcp-server/tests/test_aws_read_sections_live.py class MockContext (line 24) | class MockContext: method error (line 27) | async def error(self, message): function test_read_sections_live_basic (line 34) | async def test_read_sections_live_basic(): function test_read_sections_live_multiple_sections (line 57) | async def test_read_sections_live_multiple_sections(): function test_read_sections_live_missing_sections (line 85) | async def test_read_sections_live_missing_sections(): function test_read_sections_live_case_insensitive (line 113) | async def test_read_sections_live_case_insensitive(): function test_read_sections_live_whitespace_normalization (line 139) | async def test_read_sections_live_whitespace_normalization(): function test_read_sections_live_all_sections_fail (line 162) | async def test_read_sections_live_all_sections_fail(): FILE: src/aws-documentation-mcp-server/tests/test_aws_recommend_live.py class MockContext (line 23) | class MockContext: method error (line 26) | async def error(self, message): function test_recommend_live (line 33) | async def test_recommend_live(): FILE: src/aws-documentation-mcp-server/tests/test_aws_search_live.py class MockContext (line 23) | class MockContext: method error (line 26) | async def error(self, message): function test_search_documentation_live (line 33) | async def test_search_documentation_live(): function test_search_documentation_empty_results (line 74) | async def test_search_documentation_empty_results(): function test_search_documentation_limit (line 108) | async def test_search_documentation_limit(): function test_search_documentation_with_product_type (line 142) | async def test_search_documentation_with_product_type(): function test_search_documentation_with_guide_type (line 188) | async def test_search_documentation_with_guide_type(): FILE: src/aws-documentation-mcp-server/tests/test_integ_basic.py class TestAWSDocumentationMCPServer (line 54) | class TestAWSDocumentationMCPServer: method setup_test (line 58) | def setup_test(self): method test_basic_protocol (line 67) | async def test_basic_protocol(self): method test_search_documentation_tool (line 105) | async def test_search_documentation_tool(self): method test_read_documentation_tool (line 134) | async def test_read_documentation_tool(self): FILE: src/aws-documentation-mcp-server/tests/test_metadata_handling.py class MockContext (line 21) | class MockContext: method error (line 24) | async def error(self, message): class TestMetadataHandling (line 29) | class TestMetadataHandling: method test_seo_abstract_priority (line 33) | async def test_seo_abstract_priority(self): method test_abstract_fallback (line 69) | async def test_abstract_fallback(self): method test_summary_fallback (line 104) | async def test_summary_fallback(self): method test_suggestion_body_fallback (line 136) | async def test_suggestion_body_fallback(self): method test_no_context_available (line 167) | async def test_no_context_available(self): method test_empty_metadata (line 197) | async def test_empty_metadata(self): method test_mixed_metadata_availability (line 228) | async def test_mixed_metadata_availability(self): method test_real_world_example_with_metadata (line 286) | async def test_real_world_example_with_metadata(self): method test_missing_metadata_field (line 338) | async def test_missing_metadata_field(self): FILE: src/aws-documentation-mcp-server/tests/test_models.py class TestSearchResult (line 23) | class TestSearchResult: method test_search_result_creation (line 26) | def test_search_result_creation(self): method test_search_result_without_context (line 39) | def test_search_result_without_context(self): class TestSearchResponse (line 52) | class TestSearchResponse: method test_search_response_creation (line 55) | def test_search_response_creation(self): method test_search_response_without_facets (line 79) | def test_search_response_without_facets(self): class TestRecommendationResult (line 96) | class TestRecommendationResult: method test_recommendation_result_creation (line 99) | def test_recommendation_result_creation(self): method test_recommendation_result_without_context (line 110) | def test_recommendation_result_without_context(self): FILE: src/aws-documentation-mcp-server/tests/test_server.py class TestServer (line 21) | class TestServer: method test_partition_aws (line 24) | def test_partition_aws(self): method test_partition_aws_cn (line 33) | def test_partition_aws_cn(self): method test_partition_default (line 47) | def test_partition_default(self): method test_partition_invalid (line 61) | def test_partition_invalid(self): method test_logging_setup (line 75) | def test_logging_setup(self): method test_logging_default_level (line 92) | def test_logging_default_level(self): FILE: src/aws-documentation-mcp-server/tests/test_server_aws.py class MockContext (line 30) | class MockContext: method error (line 33) | async def error(self, message): class TestReadDocumentation (line 38) | class TestReadDocumentation: method test_read_documentation (line 42) | async def test_read_documentation(self): method test_read_documentation_with_domain_modification (line 70) | async def test_read_documentation_with_domain_modification(self): method test_read_documentation_error (line 100) | async def test_read_documentation_error(self): method test_read_documentation_invalid_domain (line 115) | async def test_read_documentation_invalid_domain(self): method test_read_documentation_invalid_extension (line 124) | async def test_read_documentation_invalid_extension(self): class TestReadSections (line 133) | class TestReadSections: method test_read_sections_success (line 137) | async def test_read_sections_success(self): method test_read_sections_with_domain_modification (line 182) | async def test_read_sections_with_domain_modification(self): method test_read_sections_http_error (line 205) | async def test_read_sections_http_error(self): method test_read_sections_no_sections_found (line 221) | async def test_read_sections_no_sections_found(self): method test_read_sections_partial_success (line 242) | async def test_read_sections_partial_success(self): method test_read_sections_invalid_domain (line 263) | async def test_read_sections_invalid_domain(self): method test_read_sections_invalid_extension (line 273) | async def test_read_sections_invalid_extension(self): method test_read_sections_empty_section_titles (line 283) | async def test_read_sections_empty_section_titles(self): method test_read_sections_special_characters_url_encoding (line 293) | async def test_read_sections_special_characters_url_encoding(self): method test_read_sections_whitespace_normalization (line 342) | async def test_read_sections_whitespace_normalization(self): method test_read_sections_non_html_content (line 362) | async def test_read_sections_non_html_content(self): method test_read_sections_non_404_error (line 387) | async def test_read_sections_non_404_error(self): method test_read_sections_extract_content_error (line 406) | async def test_read_sections_extract_content_error(self): method test_read_sections_end_to_end_workflow (line 429) | async def test_read_sections_end_to_end_workflow(self): class TestSearchDocumentation (line 476) | class TestSearchDocumentation: method test_search_documentation (line 480) | async def test_search_documentation(self): method test_search_documentation_with_domain_modification (line 554) | async def test_search_documentation_with_domain_modification(self): method test_search_documentation_http_error (line 606) | async def test_search_documentation_http_error(self): method test_search_documentation_status_error (line 625) | async def test_search_documentation_status_error(self): method test_search_documentation_json_error (line 648) | async def test_search_documentation_json_error(self): method test_search_documentation_empty_results (line 672) | async def test_search_documentation_empty_results(self): method test_search_documentation_with_filters (line 692) | async def test_search_documentation_with_filters(self): method test_search_documentation_with_sections (line 745) | async def test_search_documentation_with_sections(self): class TestRecommend (line 823) | class TestRecommend: method test_recommend (line 827) | async def test_recommend(self): method test_recommend_http_error (line 877) | async def test_recommend_http_error(self): method test_recommend_status_error (line 893) | async def test_recommend_status_error(self): method test_recommend_json_error (line 912) | async def test_recommend_json_error(self): class TestMain (line 932) | class TestMain: method test_main (line 935) | def test_main(self): FILE: src/aws-documentation-mcp-server/tests/test_server_aws_cn.py class MockContext (line 28) | class MockContext: method error (line 31) | async def error(self, message): class TestReadDocumentationChina (line 36) | class TestReadDocumentationChina: method test_read_documentation_china (line 40) | async def test_read_documentation_china(self): method test_read_documentation_china_invalid_domain (line 70) | async def test_read_documentation_china_invalid_domain(self): method test_read_documentation_china_invalid_extension (line 81) | async def test_read_documentation_china_invalid_extension(self): method test_read_documentation_china_error (line 92) | async def test_read_documentation_china_error(self): class TestGetAvailableServices (line 107) | class TestGetAvailableServices: method test_get_available_services (line 111) | async def test_get_available_services(self): method test_get_available_services_error (line 165) | async def test_get_available_services_error(self): method test_get_available_services_status_error (line 179) | async def test_get_available_services_status_error(self): method test_get_available_services_non_html (line 196) | async def test_get_available_services_non_html(self): method test_get_available_services_key_error (line 241) | async def test_get_available_services_key_error(self): class TestMain (line 283) | class TestMain: method test_main (line 286) | def test_main(self): FILE: src/aws-documentation-mcp-server/tests/test_server_utils.py class TestReadDocumentationImpl (line 30) | class TestReadDocumentationImpl: method test_successful_html_fetch (line 34) | async def test_successful_html_fetch(self): method test_successful_non_html_fetch (line 90) | async def test_successful_non_html_fetch(self): method test_http_error (line 131) | async def test_http_error(self): method test_http_status_error (line 160) | async def test_http_status_error(self): method test_content_truncation (line 194) | async def test_content_truncation(self): method test_start_index_handling (line 253) | async def test_start_index_handling(self): method test_query_id_from_cache (line 305) | async def test_query_id_from_cache(self): class TestUserAgentCustomization (line 381) | class TestUserAgentCustomization: method test_custom_user_agent_from_env (line 385) | def test_custom_user_agent_from_env(self): method test_default_user_agent_when_no_env (line 396) | def test_default_user_agent_when_no_env(self): class TestVersionImport (line 407) | class TestVersionImport: method test_version_from_metadata_success (line 411) | def test_version_from_metadata_success(self, mock_version): method test_version_fallback_to_init (line 427) | def test_version_fallback_to_init(self, mock_version): class TestSearchResultCache (line 448) | class TestSearchResultCache: method test_add_search_result_cache_item (line 451) | def test_add_search_result_cache_item(self): method test_get_query_id_from_cache (line 495) | def test_get_query_id_from_cache(self): FILE: src/aws-documentation-mcp-server/tests/test_util.py class TestIsHtmlContent (line 29) | class TestIsHtmlContent: method test_html_tag_in_content (line 32) | def test_html_tag_in_content(self): method test_html_content_type (line 37) | def test_html_content_type(self): method test_empty_content_type (line 42) | def test_empty_content_type(self): method test_non_html_content (line 47) | def test_non_html_content(self): class TestFormatDocumentationResult (line 53) | class TestFormatDocumentationResult: method test_normal_content (line 56) | def test_normal_content(self): method test_start_index_beyond_content (line 63) | def test_start_index_beyond_content(self): method test_empty_truncated_content (line 70) | def test_empty_truncated_content(self): method test_truncated_content_with_more_available (line 78) | def test_truncated_content_with_more_available(self): method test_truncated_content_exact_fit (line 88) | def test_truncated_content_exact_fit(self): method test_content_shorter_than_max_length (line 95) | def test_content_shorter_than_max_length(self): method test_partial_content_with_remaining (line 104) | def test_partial_content_with_remaining(self): method test_partial_content_at_end (line 115) | def test_partial_content_at_end(self): class TestExtractContentFromHtml (line 126) | class TestExtractContentFromHtml: method test_successful_extraction (line 131) | def test_successful_extraction(self, mock_markdownify, mock_soup): method test_empty_content (line 148) | def test_empty_content(self, mock_soup): method test_extract_content_with_programlisting (line 157) | def test_extract_content_with_programlisting(self): method test_extract_content_from_html (line 222) | def test_extract_content_from_html(self): method test_extract_content_from_html_no_content (line 235) | def test_extract_content_from_html_no_content(self): class TestParseRecommendationResults (line 247) | class TestParseRecommendationResults: method test_empty_data (line 250) | def test_empty_data(self): method test_highly_rated_recommendations (line 256) | def test_highly_rated_recommendations(self): method test_journey_recommendations (line 279) | def test_journey_recommendations(self): method test_new_content_recommendations (line 308) | def test_new_content_recommendations(self): method test_similar_recommendations (line 331) | def test_similar_recommendations(self): method test_all_recommendation_types (line 354) | def test_all_recommendation_types(self): class TestAddSearchIntentToSearchRequest (line 385) | class TestAddSearchIntentToSearchRequest: method test_valid_search_intent_simple (line 388) | def test_valid_search_intent_simple(self): method test_valid_search_intent_with_special_chars (line 395) | def test_valid_search_intent_with_special_chars(self): method test_valid_search_intent_with_unicode (line 406) | def test_valid_search_intent_with_unicode(self): method test_valid_search_intent_with_multiple_words (line 416) | def test_valid_search_intent_with_multiple_words(self): method test_valid_search_intent_with_slashes (line 426) | def test_valid_search_intent_with_slashes(self): method test_empty_search_intent (line 437) | def test_empty_search_intent(self): method test_whitespace_only_search_intent (line 445) | def test_whitespace_only_search_intent(self): method test_search_intent_with_numbers (line 453) | def test_search_intent_with_numbers(self): method test_search_intent_with_punctuation (line 463) | def test_search_intent_with_punctuation(self): method test_very_long_search_intent (line 473) | def test_very_long_search_intent(self): method test_search_intent_with_equals_sign (line 481) | def test_search_intent_with_equals_sign(self): method test_search_intent_with_tab_character (line 489) | def test_search_intent_with_tab_character(self): method test_search_intent_with_newline (line 497) | def test_search_intent_with_newline(self): method test_search_intent_with_carriage_return (line 505) | def test_search_intent_with_carriage_return(self): method test_search_intent_with_hash (line 513) | def test_search_intent_with_hash(self): method test_search_intent_with_percent_sign (line 521) | def test_search_intent_with_percent_sign(self): method test_search_intent_with_plus_sign (line 529) | def test_search_intent_with_plus_sign(self): method test_search_intent_with_ampersand (line 537) | def test_search_intent_with_ampersand(self): method test_search_intent_with_question_mark (line 545) | def test_search_intent_with_question_mark(self): method test_url_with_existing_parameters (line 553) | def test_url_with_existing_parameters(self): class TestExtractSectionsFromHtml (line 562) | class TestExtractSectionsFromHtml: method test_empty_input (line 565) | def test_empty_input(self): method test_empty_section_list (line 570) | def test_empty_section_list(self): method test_single_section_extraction (line 575) | def test_single_section_extraction(self): method test_multiple_sections_extraction (line 593) | def test_multiple_sections_extraction(self): method test_case_insensitive_matching (line 613) | def test_case_insensitive_matching(self): method test_whitespace_handling (line 623) | def test_whitespace_handling(self): method test_nested_sections_included (line 647) | def test_nested_sections_included(self): method test_no_sections_found_with_h2_headings (line 673) | def test_no_sections_found_with_h2_headings(self): method test_no_sections_found_without_h2_headings (line 691) | def test_no_sections_found_without_h2_headings(self): method test_partial_success (line 704) | def test_partial_success(self): method test_section_at_end_of_document (line 724) | def test_section_at_end_of_document(self): method test_section_with_no_content (line 739) | def test_section_with_no_content(self): method test_mixed_heading_levels (line 751) | def test_mixed_heading_levels(self): method test_duplicate_section_names (line 773) | def test_duplicate_section_names(self): FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/analysis/cost_analyzer.py class CostAnalyzer (line 22) | class CostAnalyzer: method __init__ (line 38) | def __init__(self, region: str): method calculate_task_cost (line 46) | def calculate_task_cost( method calculate_storage_cost (line 73) | def calculate_storage_cost( method _get_static_storage_allocation (line 108) | def _get_static_storage_allocation(self, capacity: float) -> float: FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/analysis/instance_recommender.py class InstanceRecommender (line 22) | class InstanceRecommender: method __init__ (line 63) | def __init__(self, headroom: float = 0.20): method recommend_instance (line 76) | def recommend_instance( method calculate_savings (line 125) | def calculate_savings( method is_high_priority_saving (line 159) | def is_high_priority_saving( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/analysis/pricing_cache.py class PricingCache (line 23) | class PricingCache: method get_price (line 79) | def get_price(cls, resource_type: str, region: str) -> Optional[float]: method get_price_with_error (line 106) | def get_price_with_error( method _get_pricing_client (line 138) | def _get_pricing_client(cls): method _fetch_price_from_api (line 153) | def _fetch_price_from_api(cls, resource_type: str, region: str) -> Opt... method get_instance_specs (line 219) | def get_instance_specs(cls, instance_type: str) -> tuple[int, float]: method clear_cache (line 261) | def clear_cache(cls) -> None: method get_cache_size (line 270) | def get_cache_size(cls) -> int: FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/analysis/task_aggregator.py class TaskAggregator (line 21) | class TaskAggregator: method normalize_task_name (line 46) | def normalize_task_name(cls, task_name: str) -> str: method aggregate_tasks (line 79) | def aggregate_tasks(self, tasks: list[dict]) -> pl.DataFrame: method aggregate_cross_run_tasks (line 161) | def aggregate_cross_run_tasks(self, runs_data: list[dict]) -> pl.DataF... FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/models/analysis.py class TimeUnit (line 22) | class TimeUnit(str, Enum): class TaskCostMetrics (line 31) | class TaskCostMetrics(BaseModel): class RunCostSummary (line 47) | class RunCostSummary(BaseModel): class AggregatedTaskMetrics (line 62) | class AggregatedTaskMetrics(BaseModel): class CrossRunAggregate (line 82) | class CrossRunAggregate(BaseModel): FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/models/core.py class WorkflowType (line 26) | class WorkflowType(str, Enum): class StorageType (line 34) | class StorageType(str, Enum): class CacheBehavior (line 41) | class CacheBehavior(str, Enum): class SourceReferenceType (line 48) | class SourceReferenceType(str, Enum): class SourceReference (line 56) | class SourceReference(BaseModel): method validate_value_not_empty (line 64) | def validate_value_not_empty(cls, v: str) -> str: class DefinitionRepository (line 71) | class DefinitionRepository(BaseModel): method validate_connection_arn (line 81) | def validate_connection_arn(cls, v: str) -> str: method validate_repository_id_not_empty (line 91) | def validate_repository_id_not_empty(cls, v: str) -> str: class RunStatus (line 98) | class RunStatus(str, Enum): class ExportType (line 109) | class ExportType(str, Enum): class WorkflowSummary (line 116) | class WorkflowSummary(BaseModel): class WorkflowListResponse (line 130) | class WorkflowListResponse(BaseModel): class RunSummary (line 137) | class RunSummary(BaseModel): class RunListResponse (line 152) | class RunListResponse(BaseModel): class TaskSummary (line 159) | class TaskSummary(BaseModel): class TaskListResponse (line 171) | class TaskListResponse(BaseModel): class LogEvent (line 178) | class LogEvent(BaseModel): class LogResponse (line 185) | class LogResponse(BaseModel): class StorageRequest (line 192) | class StorageRequest(BaseModel): method validate_storage_capacity (line 199) | def validate_storage_capacity(self): class AnalysisResult (line 206) | class AnalysisResult(BaseModel): class AnalysisResponse (line 225) | class AnalysisResponse(BaseModel): class RegistryMapping (line 231) | class RegistryMapping(BaseModel): class ImageMapping (line 240) | class ImageMapping(BaseModel): class ContainerRegistryMap (line 247) | class ContainerRegistryMap(BaseModel): method convert_none_to_empty_list (line 255) | def convert_none_to_empty_list(cls, v: Any) -> List[Any]: class RunGroupSummary (line 260) | class RunGroupSummary(BaseModel): class RunGroupDetail (line 273) | class RunGroupDetail(RunGroupSummary): class RunGroupListResponse (line 279) | class RunGroupListResponse(BaseModel): class RunCacheStatus (line 286) | class RunCacheStatus(str, Enum): class RunCacheSummary (line 294) | class RunCacheSummary(BaseModel): class RunCacheDetail (line 305) | class RunCacheDetail(RunCacheSummary): class RunCacheListResponse (line 314) | class RunCacheListResponse(BaseModel): FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/models/ecr.py class UpstreamRegistry (line 23) | class UpstreamRegistry(str, Enum): class HealthOmicsAccessStatus (line 38) | class HealthOmicsAccessStatus(str, Enum): class ECRRepository (line 46) | class ECRRepository(BaseModel): class ECRRepositoryListResponse (line 57) | class ECRRepositoryListResponse(BaseModel): class ContainerImage (line 65) | class ContainerImage(BaseModel): class ContainerAvailabilityResponse (line 76) | class ContainerAvailabilityResponse(BaseModel): class PullThroughCacheRule (line 90) | class PullThroughCacheRule(BaseModel): class PullThroughCacheListResponse (line 104) | class PullThroughCacheListResponse(BaseModel): class ValidationIssue (line 111) | class ValidationIssue(BaseModel): class ValidationResult (line 120) | class ValidationResult(BaseModel): class GrantAccessResponse (line 129) | class GrantAccessResponse(BaseModel): class CloneContainerResponse (line 141) | class CloneContainerResponse(BaseModel): FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/models/s3.py class S3File (line 29) | class S3File(BaseModel): method validate_bucket_name (line 43) | def validate_bucket_name(cls, v: str) -> str: method validate_key (line 99) | def validate_key(cls, v: str) -> str: method uri (line 111) | def uri(self) -> str: method arn (line 116) | def arn(self) -> str: method console_url (line 123) | def console_url(self) -> str: method filename (line 132) | def filename(self) -> str: method directory (line 137) | def directory(self) -> str: method extension (line 144) | def extension(self) -> str: method get_presigned_url (line 151) | def get_presigned_url(self, expiration: int = 3600, client_method: str... method from_uri (line 176) | def from_uri(cls, uri: str, **kwargs) -> 'S3File': method from_bucket_and_key (line 205) | def from_bucket_and_key(cls, bucket: str, key: str, **kwargs) -> 'S3Fi... method with_key (line 218) | def with_key(self, new_key: str) -> 'S3File': method with_suffix (line 229) | def with_suffix(self, suffix: str) -> 'S3File': method with_extension (line 240) | def with_extension(self, extension: str) -> 'S3File': method is_in_directory (line 257) | def is_in_directory(self, directory_path: str) -> bool: method get_relative_path (line 272) | def get_relative_path(self, base_directory: str = '') -> str: method __str__ (line 290) | def __str__(self) -> str: method __repr__ (line 294) | def __repr__(self) -> str: function create_s3_file_from_object (line 302) | def create_s3_file_from_object( function build_s3_uri (line 326) | def build_s3_uri(bucket: str, key: str) -> str: function parse_s3_uri (line 347) | def parse_s3_uri(uri: str) -> Tuple[str, str]: function get_s3_file_associations (line 375) | def get_s3_file_associations(primary_file: S3File) -> List[S3File]: FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/models/search.py class GenomicsFileType (line 25) | class GenomicsFileType(str, Enum): class GenomicsFile (line 64) | class GenomicsFile: method s3_file (line 78) | def s3_file(self) -> Optional[S3File]: method uri (line 95) | def uri(self) -> str: method filename (line 100) | def filename(self) -> str: method extension (line 108) | def extension(self) -> str: method from_s3_file (line 119) | def from_s3_file( method get_presigned_url (line 150) | def get_presigned_url(self, expiration: int = 3600) -> Optional[str]: class GenomicsFileResult (line 165) | class GenomicsFileResult: class FileGroup (line 175) | class FileGroup: class SearchConfig (line 184) | class SearchConfig: class GenomicsFileSearchRequest (line 216) | class GenomicsFileSearchRequest(BaseModel): method validate_max_results (line 235) | def validate_max_results(cls, v: int) -> int: method validate_buffer_size (line 245) | def validate_buffer_size(cls, v: int) -> int: method validate_adhoc_s3_buckets (line 255) | def validate_adhoc_s3_buckets(cls, v: Optional[List[str]]) -> Optional... class GenomicsFileSearchResponse (line 288) | class GenomicsFileSearchResponse(BaseModel): class StoragePaginationRequest (line 304) | class StoragePaginationRequest: method __post_init__ (line 311) | def __post_init__(self): class StoragePaginationResponse (line 322) | class StoragePaginationResponse: class GlobalContinuationToken (line 333) | class GlobalContinuationToken: method encode (line 343) | def encode(self) -> str: method decode (line 362) | def decode(cls, token_str: str) -> 'GlobalContinuationToken': method is_empty (line 382) | def is_empty(self) -> bool: method has_more_pages (line 391) | def has_more_pages(self) -> bool: class PaginationMetrics (line 401) | class PaginationMetrics: method to_dict (line 415) | def to_dict(self) -> Dict[str, Any]: class PaginationCacheEntry (line 434) | class PaginationCacheEntry: method is_expired (line 445) | def is_expired(self, ttl_seconds: int) -> bool: method update_timestamp (line 451) | def update_timestamp(self) -> None: class CursorBasedPaginationToken (line 459) | class CursorBasedPaginationToken: method encode (line 468) | def encode(self) -> str: method decode (line 486) | def decode(cls, token_str: str) -> 'CursorBasedPaginationToken': function create_genomics_file_from_s3_object (line 513) | def create_genomics_file_from_s3_object( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/models/store.py class ReadSetFileType (line 26) | class ReadSetFileType(str, Enum): class ReadSetStatus (line 35) | class ReadSetStatus(str, Enum): class ImportJobStatus (line 47) | class ImportJobStatus(str, Enum): class ReferenceStatus (line 59) | class ReferenceStatus(str, Enum): class SequenceStoreSummary (line 70) | class SequenceStoreSummary(BaseModel): class SequenceStoreDetail (line 81) | class SequenceStoreDetail(SequenceStoreSummary): class ReadSetSummary (line 88) | class ReadSetSummary(BaseModel): class SourceFiles (line 103) | class SourceFiles(BaseModel): class ReadSetImportSource (line 114) | class ReadSetImportSource(BaseModel): class ReferenceStoreSummary (line 135) | class ReferenceStoreSummary(BaseModel): class ReferenceStoreDetail (line 145) | class ReferenceStoreDetail(ReferenceStoreSummary): class ReferenceSummary (line 152) | class ReferenceSummary(BaseModel): class ReferenceImportSource (line 165) | class ReferenceImportSource(BaseModel): FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/search/file_association_engine.py class FileAssociationEngine (line 27) | class FileAssociationEngine: method __init__ (line 87) | def __init__(self): method _build_extension_pattern_map (line 102) | def _build_extension_pattern_map(self) -> Dict[str, List[int]]: method _get_relevant_pattern_indices (line 144) | def _get_relevant_pattern_indices(self, file_path: str) -> List[int]: method find_associations (line 163) | def find_associations(self, files: List[GenomicsFile]) -> List[FileGro... method _find_associated_files (line 226) | def _find_associated_files( method _find_bwa_index_groups (line 266) | def _find_bwa_index_groups( method _normalize_bwa_base_name (line 325) | def _normalize_bwa_base_name(self, base_name: str) -> str: method _determine_group_type (line 338) | def _determine_group_type( method get_association_score_bonus (line 379) | def get_association_score_bonus(self, file_group: FileGroup) -> float: method _find_healthomics_associations (line 407) | def _find_healthomics_associations( method _find_sequence_store_associations (line 460) | def _find_sequence_store_associations( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/search/file_type_detector.py class FileTypeDetector (line 21) | class FileTypeDetector: method detect_file_type (line 104) | def detect_file_type(cls, file_path: str) -> Optional[GenomicsFileType]: method is_compressed_file (line 128) | def is_compressed_file(cls, file_path: str) -> bool: method get_base_file_type (line 146) | def get_base_file_type(cls, file_path: str) -> Optional[GenomicsFileTy... method is_genomics_file (line 171) | def is_genomics_file(cls, file_path: str) -> bool: method get_file_category (line 183) | def get_file_category(cls, file_type: GenomicsFileType) -> str: method matches_file_type_filter (line 228) | def matches_file_type_filter(cls, file_path: str, file_type_filter: st... FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/search/genomics_search_orchestrator.py class GenomicsSearchOrchestrator (line 64) | class GenomicsSearchOrchestrator: method __init__ (line 71) | def __init__( method from_environment (line 111) | def from_environment( method search (line 131) | async def search(self, request: GenomicsFileSearchRequest) -> Genomics... method search_paginated (line 233) | async def search_paginated( method _validate_search_request (line 454) | def _validate_search_request(self, request: GenomicsFileSearchRequest)... method _execute_parallel_searches (line 483) | async def _execute_parallel_searches( method _execute_parallel_paginated_searches (line 553) | async def _execute_parallel_paginated_searches( method _get_all_s3_bucket_paths (line 686) | async def _get_all_s3_bucket_paths(self, request: GenomicsFileSearchRe... method _search_s3_with_timeout (line 721) | async def _search_s3_with_timeout( method _search_s3_with_timeout_for_buckets (line 750) | async def _search_s3_with_timeout_for_buckets( method _search_healthomics_sequences_with_timeout (line 780) | async def _search_healthomics_sequences_with_timeout( method _search_healthomics_references_with_timeout (line 807) | async def _search_healthomics_references_with_timeout( method _search_s3_paginated_with_timeout (line 834) | async def _search_s3_paginated_with_timeout( method _search_s3_paginated_with_timeout_for_buckets (line 873) | async def _search_s3_paginated_with_timeout_for_buckets( method _search_healthomics_sequences_paginated_with_timeout (line 914) | async def _search_healthomics_sequences_paginated_with_timeout( method _search_healthomics_references_paginated_with_timeout (line 946) | async def _search_healthomics_references_paginated_with_timeout( method _deduplicate_files (line 978) | def _deduplicate_files(self, files: List[GenomicsFile]) -> List[Genomi... method _score_results (line 999) | async def _score_results( method _get_searched_storage_systems (line 1041) | def _get_searched_storage_systems( method _extract_healthomics_associations (line 1065) | def _extract_healthomics_associations(self, files: List[GenomicsFile])... method _create_pagination_cache_key (line 1117) | def _create_pagination_cache_key( method _get_cached_pagination_state (line 1150) | def _get_cached_pagination_state(self, cache_key: str) -> Optional['Pa... method _cache_pagination_state (line 1174) | def _cache_pagination_state(self, cache_key: str, entry: 'PaginationCa... method _optimize_buffer_size (line 1193) | def _optimize_buffer_size( method _create_pagination_metrics (line 1251) | def _create_pagination_metrics( method _should_use_cursor_pagination (line 1270) | def _should_use_cursor_pagination( method _cleanup_pagination_cache_by_size (line 1288) | def _cleanup_pagination_cache_by_size(self) -> None: method cleanup_expired_pagination_cache (line 1341) | def cleanup_expired_pagination_cache(self) -> None: method get_pagination_cache_stats (line 1357) | def get_pagination_cache_stats(self) -> Dict[str, Any]: FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/search/healthomics_search_engine.py class HealthOmicsSearchEngine (line 39) | class HealthOmicsSearchEngine: method __init__ (line 42) | def __init__( method search_sequence_stores (line 62) | async def search_sequence_stores( method search_sequence_stores_paginated (line 121) | async def search_sequence_stores_paginated( method search_reference_stores (line 235) | async def search_reference_stores( method search_reference_stores_paginated (line 296) | async def search_reference_stores_paginated( method _list_sequence_stores (line 410) | async def _list_sequence_stores(self) -> List[Dict[str, Any]]: method _list_reference_stores (line 451) | async def _list_reference_stores(self) -> List[Dict[str, Any]]: method _search_single_sequence_store (line 492) | async def _search_single_sequence_store( method _search_single_reference_store (line 534) | async def _search_single_reference_store( method _list_read_sets (line 576) | async def _list_read_sets(self, sequence_store_id: str) -> List[Dict[s... method _list_read_sets_paginated (line 622) | async def _list_read_sets_paginated( method _search_single_sequence_store_paginated (line 697) | async def _search_single_sequence_store_paginated( method _list_references (line 747) | async def _list_references( method _list_references_with_filter (line 813) | async def _list_references_with_filter( method _list_references_with_filter_paginated (line 869) | async def _list_references_with_filter_paginated( method _search_single_reference_store_paginated (line 954) | async def _search_single_reference_store_paginated( method _get_read_set_metadata (line 1061) | async def _get_read_set_metadata(self, store_id: str, read_set_id: str... method _get_read_set_tags (line 1087) | async def _get_read_set_tags(self, read_set_arn: str) -> Dict[str, str]: method _convert_read_set_to_genomics_file (line 1110) | async def _convert_read_set_to_genomics_file( method _get_reference_tags (line 1300) | async def _get_reference_tags(self, reference_arn: str) -> Dict[str, s... method _convert_reference_to_genomics_file (line 1323) | async def _convert_reference_to_genomics_file( method _matches_search_terms_metadata (line 1487) | def _matches_search_terms_metadata( method _get_region (line 1526) | def _get_region(self) -> str: method _get_account_id (line 1539) | def _get_account_id(self) -> str: method _get_partition (line 1550) | def _get_partition(self) -> str: FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/search/json_response_builder.py class JsonResponseBuilder (line 43) | class JsonResponseBuilder: method __init__ (line 46) | def __init__(self): method build_search_response (line 50) | def build_search_response( method _serialize_results (line 105) | def _serialize_results(self, results: List[GenomicsFileResult]) -> Lis... method _serialize_genomics_file (line 151) | def _serialize_genomics_file(self, file: GenomicsFile) -> Dict[str, Any]: method _build_performance_metrics (line 209) | def _build_performance_metrics( method _build_response_metadata (line 237) | def _build_response_metadata(self, results: List[GenomicsFileResult]) ... method _get_association_types (line 288) | def _get_association_types(self, associated_files: List[GenomicsFile])... method _build_score_breakdown (line 317) | def _build_score_breakdown(self, result: GenomicsFileResult) -> Dict[s... method _assess_match_quality (line 335) | def _assess_match_quality(self, score: float) -> str: method _format_file_size (line 353) | def _format_file_size(self, size_bytes: int) -> str: method _extract_file_extension (line 378) | def _extract_file_extension(self, path: str) -> str: method _extract_basename (line 406) | def _extract_basename(self, path: str) -> str: method _is_compressed_file (line 417) | def _is_compressed_file(self, path: str) -> bool: method _categorize_storage_tier (line 428) | def _categorize_storage_tier(self, storage_class: str) -> str: FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/search/pattern_matcher.py class PatternMatcher (line 28) | class PatternMatcher: method __init__ (line 31) | def __init__(self): method calculate_match_score (line 35) | def calculate_match_score(self, text: str, patterns: List[str]) -> Tup... method match_file_path (line 82) | def match_file_path(self, file_path: str, patterns: List[str]) -> Tupl... method match_tags (line 113) | def match_tags(self, tags: Dict[str, str], patterns: List[str]) -> Tup... method _exact_match_score (line 143) | def _exact_match_score(self, text: str, pattern: str) -> float: method _substring_match_score (line 149) | def _substring_match_score(self, text: str, pattern: str) -> float: method _fuzzy_match_score (line 160) | def _fuzzy_match_score(self, text: str, pattern: str) -> float: method extract_filename_components (line 172) | def extract_filename_components(self, file_path: str) -> Dict[str, Opt... FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/search/result_ranker.py class ResultRanker (line 23) | class ResultRanker: method __init__ (line 26) | def __init__(self): method rank_results (line 30) | def rank_results( method apply_pagination (line 65) | def apply_pagination( method get_ranking_statistics (line 114) | def get_ranking_statistics(self, results: List[GenomicsFileResult]) ->... FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/search/s3_search_engine.py class S3SearchEngine (line 43) | class S3SearchEngine: method __init__ (line 46) | def __init__( method from_environment (line 90) | def from_environment( method _create_for_testing (line 135) | def _create_for_testing(cls, config: SearchConfig) -> 'S3SearchEngine': method search_buckets (line 148) | async def search_buckets( method search_buckets_paginated (line 209) | async def search_buckets_paginated( method _search_single_bucket_path_optimized (line 335) | async def _search_single_bucket_path_optimized( method _search_single_bucket_path_paginated (line 437) | async def _search_single_bucket_path_paginated( method _validate_bucket_access (line 551) | async def _validate_bucket_access(self, bucket_name: str) -> None: method _list_s3_objects (line 592) | async def _list_s3_objects(self, bucket_name: str, prefix: str) -> Lis... method _list_s3_objects_paginated (line 642) | async def _list_s3_objects_paginated( method _create_genomics_file_from_object (line 720) | def _create_genomics_file_from_object( method _get_object_tags_cached (line 750) | async def _get_object_tags_cached(self, bucket_name: str, key: str) ->... method _get_object_tags (line 786) | async def _get_object_tags(self, bucket_name: str, key: str) -> Dict[s... method _get_tags_for_objects_batch (line 814) | async def _get_tags_for_objects_batch( method _matches_file_type_filter (line 884) | def _matches_file_type_filter( method _create_search_cache_key (line 909) | def _create_search_cache_key( method _get_cached_result (line 933) | def _get_cached_result(self, cache_key: str) -> Optional[List[Genomics... method _cache_search_result (line 954) | def _cache_search_result(self, cache_key: str, results: List[GenomicsF... method _matches_search_terms (line 973) | def _matches_search_terms( method _is_related_index_file (line 1002) | def _is_related_index_file( method _cleanup_cache_by_size (line 1037) | def _cleanup_cache_by_size(self, cache_dict: Dict, max_size: int, keep... method cleanup_expired_cache_entries (line 1101) | def cleanup_expired_cache_entries(self) -> None: method get_cache_stats (line 1129) | def get_cache_stats(self) -> Dict[str, Any]: FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/search/scoring_engine.py class ScoringEngine (line 22) | class ScoringEngine: method __init__ (line 25) | def __init__(self): method calculate_score (line 83) | def calculate_score( method _calculate_pattern_score (line 140) | def _calculate_pattern_score( method _calculate_file_type_score (line 168) | def _calculate_file_type_score( method _calculate_association_score (line 202) | def _calculate_association_score( method _calculate_storage_score (line 231) | def _calculate_storage_score(self, file: GenomicsFile) -> Tuple[float,... method _is_complete_file_set (line 253) | def _is_complete_file_set( method _has_fastq_pair (line 281) | def _has_fastq_pair( method rank_results (line 335) | def rank_results( method _match_metadata (line 348) | def _match_metadata( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/server.py function main (line 305) | def main(): FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/codeconnections.py function generate_console_url (line 35) | def generate_console_url(region: str) -> str: function get_status_guidance (line 57) | def get_status_guidance(status: str) -> str: function list_codeconnections (line 98) | async def list_codeconnections( function create_codeconnection (line 203) | async def create_codeconnection( function get_codeconnection (line 298) | async def get_codeconnection( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/ecr_tools.py function list_ecr_repositories (line 54) | async def list_ecr_repositories( function _is_pull_through_cache_repository (line 176) | def _is_pull_through_cache_repository( function _check_pull_through_cache_healthomics_usability (line 251) | def _check_pull_through_cache_healthomics_usability( function check_container_availability (line 351) | async def check_container_availability( function list_pull_through_cache_rules (line 695) | async def list_pull_through_cache_rules( function create_pull_through_cache_for_healthomics (line 844) | async def create_pull_through_cache_for_healthomics( function _update_registry_policy_for_healthomics (line 1104) | async def _update_registry_policy_for_healthomics( function _create_repository_template_for_healthomics (line 1195) | async def _create_repository_template_for_healthomics( function validate_healthomics_ecr_config (line 1296) | async def validate_healthomics_ecr_config( function grant_healthomics_repository_access (line 1575) | async def grant_healthomics_repository_access( function create_container_registry_map (line 1767) | async def create_container_registry_map( function _parse_container_image_reference (line 1974) | def _parse_container_image_reference(image_ref: str) -> Dict[str, Any]: function _find_matching_pull_through_cache (line 2056) | def _find_matching_pull_through_cache( function _get_or_create_codebuild_project (line 2095) | def _get_or_create_codebuild_project( function _copy_image_via_codebuild (line 2240) | async def _copy_image_via_codebuild( function clone_container_to_ecr (line 2388) | async def clone_container_to_ecr( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/genomics_file_search.py function search_genomics_files (line 31) | async def search_genomics_files( function get_supported_file_types (line 218) | async def get_supported_file_types(ctx: Context) -> Dict[str, Any]: FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/helper_tools.py function package_workflow (line 42) | async def package_workflow( function get_supported_regions (line 147) | async def get_supported_regions( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/reference_store_tools.py function _resolve_reference_store_id (line 28) | def _resolve_reference_store_id(client: Any, reference_store_id: Optiona... function list_reference_stores (line 57) | async def list_reference_stores( function get_reference_store (line 132) | async def get_reference_store( function list_references (line 181) | async def list_references( function get_reference_metadata (line 286) | async def get_reference_metadata( function start_reference_import_job (line 341) | async def start_reference_import_job( function get_reference_import_job (line 431) | async def get_reference_import_job( function list_reference_import_jobs (line 487) | async def list_reference_import_jobs( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/run_analysis.py function _json_serializer (line 40) | def _json_serializer(obj): function _safe_json_dumps (line 47) | def _safe_json_dumps(data: Any, **kwargs) -> str: function _convert_datetime_to_string (line 52) | def _convert_datetime_to_string(obj: Any) -> Any: function _normalize_run_ids (line 64) | def _normalize_run_ids(run_ids: Union[List[str], str]) -> List[str]: function analyze_run_performance (line 97) | async def analyze_run_performance( function _generate_analysis_report (line 200) | async def _generate_analysis_report(analysis_data: Dict[str, Any], detai... function _get_run_analysis_data (line 841) | async def _get_run_analysis_data( function _parse_manifest_for_analysis (line 945) | async def _parse_manifest_for_analysis( function _aggregate_task_metrics (line 1133) | def _aggregate_task_metrics( function _aggregate_cross_run_metrics (line 1184) | def _aggregate_cross_run_metrics( function _extract_task_metrics_from_manifest (line 1234) | def _extract_task_metrics_from_manifest( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/run_cache.py function create_run_cache (line 41) | async def create_run_cache( function get_run_cache (line 143) | async def get_run_cache( function list_run_caches (line 185) | async def list_run_caches( function update_run_cache (line 264) | async def update_run_cache( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/run_group.py function create_run_group (line 33) | async def create_run_group( function get_run_group (line 111) | async def get_run_group( function list_run_groups (line 159) | async def list_run_groups( function update_run_group (line 233) | async def update_run_group( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/run_timeline.py function generate_run_timeline (line 48) | async def generate_run_timeline( function _extract_task_for_timeline (line 288) | def _extract_task_for_timeline( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/sequence_store_tools.py function create_sequence_store (line 29) | async def create_sequence_store( function list_sequence_stores (line 106) | async def list_sequence_stores( function get_sequence_store (line 182) | async def get_sequence_store( function update_sequence_store (line 225) | async def update_sequence_store( function list_read_sets (line 304) | async def list_read_sets( function get_read_set_metadata (line 435) | async def get_read_set_metadata( function start_read_set_import_job (line 484) | async def start_read_set_import_job( function get_read_set_import_job (line 572) | async def get_read_set_import_job( function list_read_set_import_jobs (line 621) | async def list_read_set_import_jobs( function start_read_set_export_job (line 697) | async def start_read_set_export_job( function get_read_set_export_job (line 759) | async def get_read_set_export_job( function list_read_set_export_jobs (line 807) | async def list_read_set_export_jobs( function activate_read_sets (line 883) | async def activate_read_sets( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/troubleshooting.py function safe_datetime_to_iso (line 31) | def safe_datetime_to_iso(dt_obj): function calculate_log_time_window (line 44) | def calculate_log_time_window(start_time, end_time, buffer_minutes=5): function diagnose_run_failure (line 84) | async def diagnose_run_failure( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/workflow_analysis.py function _get_logs_from_stream (line 27) | async def _get_logs_from_stream( function get_run_logs (line 96) | async def get_run_logs( function _get_run_manifest_logs_internal (line 175) | async def _get_run_manifest_logs_internal( function get_run_manifest_logs (line 245) | async def get_run_manifest_logs( function get_run_engine_logs (line 327) | async def get_run_engine_logs( function get_task_logs (line 405) | async def get_task_logs( function get_run_manifest_logs_internal (line 490) | async def get_run_manifest_logs_internal( function get_run_engine_logs_internal (line 522) | async def get_run_engine_logs_internal( function get_task_logs_internal (line 555) | async def get_task_logs_internal( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/workflow_execution.py function parse_iso_datetime (line 38) | def parse_iso_datetime(iso_string: str) -> datetime: function filter_runs_by_creation_time (line 62) | def filter_runs_by_creation_time( function start_run (line 116) | async def start_run( function list_runs (line 281) | async def list_runs( function get_run (line 458) | async def get_run( function list_run_tasks (line 532) | async def list_run_tasks( function get_run_task (line 619) | async def get_run_task( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/workflow_linting.py class WorkflowLinter (line 31) | class WorkflowLinter(ABC): method __init__ (line 34) | def __init__(self, workflow_format: str): method lint_workflow (line 43) | async def lint_workflow( method lint_workflow_bundle (line 58) | async def lint_workflow_bundle( method _create_error_response (line 72) | def _create_error_response( method _create_success_response (line 93) | def _create_success_response( class WDLWorkflowLinter (line 119) | class WDLWorkflowLinter(WorkflowLinter): method __init__ (line 122) | def __init__(self): method lint_workflow (line 126) | async def lint_workflow( method lint_workflow_bundle (line 170) | async def lint_workflow_bundle( class CWLWorkflowLinter (line 219) | class CWLWorkflowLinter(WorkflowLinter): method __init__ (line 222) | def __init__(self): method lint_workflow (line 226) | async def lint_workflow( method lint_workflow_bundle (line 270) | async def lint_workflow_bundle( function get_linter (line 330) | def get_linter(workflow_format: str) -> WorkflowLinter: function lint_workflow_definition (line 351) | async def lint_workflow_definition( function lint_workflow_bundle (line 405) | async def lint_workflow_bundle( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/tools/workflow_management.py function list_workflows (line 39) | async def list_workflows( function create_workflow (line 111) | async def create_workflow( function get_workflow (line 284) | async def get_workflow( function create_workflow_version (line 357) | async def create_workflow_version( function list_workflow_versions (line 560) | async def list_workflow_versions( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/utils/aws_utils.py function get_region (line 34) | def get_region() -> str: function get_omics_service_name (line 43) | def get_omics_service_name() -> str: function get_omics_endpoint_url (line 62) | def get_omics_endpoint_url() -> str | None: function get_agent_value (line 95) | def get_agent_value() -> str | None: function get_aws_session (line 125) | def get_aws_session( function create_zip_file (line 168) | def create_zip_file(files: Dict[str, str]) -> bytes: function encode_to_base64 (line 186) | def encode_to_base64(data: bytes) -> str: function decode_from_base64 (line 198) | def decode_from_base64(data: str) -> bytes: function create_aws_client (line 210) | def create_aws_client( function get_omics_client (line 238) | def get_omics_client( function get_logs_client (line 270) | def get_logs_client( function get_codeconnections_client (line 289) | def get_codeconnections_client( function get_ecr_client (line 308) | def get_ecr_client( function get_codebuild_client (line 327) | def get_codebuild_client( function get_iam_client (line 346) | def get_iam_client( function get_account_id (line 365) | def get_account_id( function get_partition (line 392) | def get_partition( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/utils/content_resolver.py class ContentInputType (line 34) | class ContentInputType(str, Enum): class ResolvedContent (line 43) | class ResolvedContent: class ResolvedBundle (line 56) | class ResolvedBundle: function _check_size_limit (line 68) | def _check_size_limit(size: int, max_size_bytes: int, source: str) -> None: function detect_content_input_type (line 87) | def detect_content_input_type(value: str) -> ContentInputType: function _read_local_file (line 117) | def _read_local_file(path: str, mode: str, max_size_bytes: Optional[int]... function _read_s3_object (line 156) | def _read_s3_object(uri: str, mode: str, max_size_bytes: Optional[int]) ... function resolve_single_content (line 198) | async def resolve_single_content( function _read_local_directory (line 246) | def _read_local_directory(path: str, max_size_bytes: Optional[int]) -> D... function _read_s3_prefix (line 287) | def _read_s3_prefix(uri: str, max_size_bytes: Optional[int]) -> Dict[str... function _extract_zip_contents (line 337) | def _extract_zip_contents(data: bytes) -> Dict[str, str]: function resolve_bundle_content (line 365) | async def resolve_bundle_content( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/utils/ecr_utils.py function _normalize_actions (line 28) | def _normalize_actions(actions: Any) -> Set[str]: function _check_principal_match (line 46) | def _check_principal_match(principal: Any, target_principal: str) -> bool: function _check_actions_allowed (line 88) | def _check_actions_allowed( function _parse_policy_document (line 126) | def _parse_policy_document(policy_text: Optional[str]) -> Optional[Dict[... function check_repository_healthomics_access (line 145) | def check_repository_healthomics_access( function check_registry_policy_healthomics_access (line 216) | def check_registry_policy_healthomics_access( function check_repository_template_healthomics_access (line 286) | def check_repository_template_healthomics_access( function get_pull_through_cache_rule_for_repository (line 356) | def get_pull_through_cache_rule_for_repository( function evaluate_pull_through_cache_healthomics_usability (line 376) | def evaluate_pull_through_cache_healthomics_usability( function initiate_pull_through_cache (line 430) | def initiate_pull_through_cache( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/utils/error_utils.py function handle_tool_error (line 22) | async def handle_tool_error(ctx: Context, error: Exception, operation: s... FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/utils/path_utils.py function validate_local_path (line 28) | def validate_local_path(path: str) -> None: function validate_s3_uri_format (line 48) | def validate_s3_uri_format(uri: str) -> Tuple[str, str]: function sanitize_local_path (line 79) | def sanitize_local_path(path: str) -> str: function write_svg_to_local (line 106) | def write_svg_to_local(svg_content: str, path: str) -> str: function write_zip_to_local (line 133) | def write_zip_to_local(zip_data: bytes, path: str) -> str: FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/utils/s3_utils.py function ensure_s3_uri_ends_with_slash (line 25) | def ensure_s3_uri_ends_with_slash(uri: str) -> str: function parse_s3_path (line 46) | def parse_s3_path(s3_path: str) -> Tuple[str, str]: function is_valid_bucket_name (line 71) | def is_valid_bucket_name(bucket_name: str) -> bool: function validate_and_normalize_s3_path (line 99) | def validate_and_normalize_s3_path(s3_path: str) -> str: function validate_bucket_access (line 125) | def validate_bucket_access(bucket_paths: List[str]) -> List[str]: function validate_s3_bucket_for_write (line 212) | def validate_s3_bucket_for_write( function write_svg_to_s3 (line 250) | def write_svg_to_s3( function write_zip_to_s3 (line 303) | def write_zip_to_s3( FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/utils/search_config.py function get_genomics_search_config (line 49) | def get_genomics_search_config() -> SearchConfig: function get_s3_bucket_paths (line 96) | def get_s3_bucket_paths() -> List[str]: function get_max_concurrent_searches (line 138) | def get_max_concurrent_searches() -> int: function get_search_timeout_seconds (line 163) | def get_search_timeout_seconds() -> int: function get_enable_healthomics_search (line 186) | def get_enable_healthomics_search() -> bool: function get_enable_s3_tag_search (line 211) | def get_enable_s3_tag_search() -> bool: function get_max_tag_batch_size (line 236) | def get_max_tag_batch_size() -> int: function get_result_cache_ttl (line 262) | def get_result_cache_ttl() -> int: function get_tag_cache_ttl (line 287) | def get_tag_cache_ttl() -> int: function validate_bucket_access_permissions (line 312) | def validate_bucket_access_permissions() -> List[str]: FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/utils/validation_utils.py class ReadmeInputType (line 27) | class ReadmeInputType(Enum): class ProviderType (line 35) | class ProviderType(str, Enum): function detect_readme_input_type (line 45) | def detect_readme_input_type(readme: str) -> ReadmeInputType: function validate_s3_uri (line 73) | async def validate_s3_uri(ctx: Context, uri: str, parameter_name: str) -... function parse_tags (line 100) | def parse_tags(tags: Any) -> Dict[str, str]: function parse_id_list (line 130) | def parse_id_list(value: Any) -> list: function validate_definition_sources (line 167) | async def validate_definition_sources( function validate_repository_definition (line 281) | async def validate_repository_definition( function validate_container_registry_params (line 336) | async def validate_container_registry_params( function validate_adhoc_s3_buckets (line 416) | async def validate_adhoc_s3_buckets(adhoc_buckets: Optional[List[str]]) ... function validate_readme_input (line 452) | async def validate_readme_input( function validate_repository_path_params (line 508) | async def validate_repository_path_params( function validate_provider_type (line 561) | async def validate_provider_type( function validate_connection_arn (line 592) | async def validate_connection_arn( function validate_path_to_main (line 626) | async def validate_path_to_main(ctx: Context, path_to_main: Optional[str... FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/visualization/gantt_generator.py class GanttGenerator (line 22) | class GanttGenerator: method generate_chart (line 48) | def generate_chart( method _parse_time (line 142) | def _parse_time(self, time_str: Union[str, datetime]) -> datetime: method _format_duration (line 169) | def _format_duration(self, seconds: float) -> str: method _build_svg (line 194) | def _build_svg( method _empty_chart_svg (line 308) | def _empty_chart_svg(self, width: int, height: int) -> str: FILE: src/aws-healthomics-mcp-server/awslabs/aws_healthomics_mcp_server/visualization/svg_builder.py class SVGBuilder (line 20) | class SVGBuilder: method __init__ (line 28) | def __init__(self, width: int, height: int): method add_title (line 40) | def add_title(self, text: str, x: Optional[int] = None, y: int = 30) -... method add_rect (line 55) | def add_rect( method add_text (line 86) | def add_text( method add_line (line 109) | def add_line( method add_x_axis (line 133) | def add_x_axis( method _escape (line 174) | def _escape(self, text: str) -> str: method build (line 202) | def build(self) -> str: FILE: src/aws-healthomics-mcp-server/tests/conftest.py function mock_context (line 24) | def mock_context(): function mock_aws_session (line 31) | def mock_aws_session(): function mock_omics_client (line 38) | def mock_omics_client(): function mock_logs_client (line 45) | def mock_logs_client(): function mock_boto_client (line 52) | def mock_boto_client(): function mock_environment (line 59) | def mock_environment(): function sample_workflow_response (line 85) | def sample_workflow_response(): function sample_run_response (line 99) | def sample_run_response(): function sample_task_response (line 115) | def sample_task_response(): function sample_log_events (line 130) | def sample_log_events(): function sample_failed_log_events (line 149) | def sample_failed_log_events(): FILE: src/aws-healthomics-mcp-server/tests/fixtures/genomics_test_data.py class GenomicsTestDataFixtures (line 21) | class GenomicsTestDataFixtures: method get_comprehensive_s3_dataset (line 25) | def get_comprehensive_s3_dataset() -> List[Dict[str, Any]]: method get_healthomics_sequence_stores (line 316) | def get_healthomics_sequence_stores() -> List[Dict[str, Any]]: method get_healthomics_reference_stores (line 459) | def get_healthomics_reference_stores() -> List[Dict[str, Any]]: method get_large_dataset_scenario (line 536) | def get_large_dataset_scenario(num_files: int = 10000) -> List[Dict[st... method get_pagination_test_scenarios (line 580) | def get_pagination_test_scenarios() -> Dict[str, List[Dict[str, Any]]]: method get_cross_storage_scenarios (line 591) | def get_cross_storage_scenarios() -> Dict[str, Any]: FILE: src/aws-healthomics-mcp-server/tests/test_adhoc_s3_buckets.py class TestAdhocS3Buckets (line 32) | class TestAdhocS3Buckets: method test_genomics_file_search_request_with_adhoc_buckets_valid (line 35) | def test_genomics_file_search_request_with_adhoc_buckets_valid(self): method test_genomics_file_search_request_with_adhoc_buckets_none (line 51) | def test_genomics_file_search_request_with_adhoc_buckets_none(self): method test_genomics_file_search_request_with_adhoc_buckets_empty_list (line 57) | def test_genomics_file_search_request_with_adhoc_buckets_empty_list(se... method test_genomics_file_search_request_with_invalid_adhoc_bucket_format (line 63) | def test_genomics_file_search_request_with_invalid_adhoc_bucket_format... method test_genomics_file_search_request_with_too_many_adhoc_buckets (line 71) | def test_genomics_file_search_request_with_too_many_adhoc_buckets(self): method test_genomics_file_search_request_with_non_string_adhoc_buckets (line 80) | def test_genomics_file_search_request_with_non_string_adhoc_buckets(se... method test_genomics_file_search_request_adhoc_buckets_normalization (line 90) | def test_genomics_file_search_request_adhoc_buckets_normalization(self): method test_validate_adhoc_s3_buckets_empty_list (line 102) | async def test_validate_adhoc_s3_buckets_empty_list(self): method test_validate_adhoc_s3_buckets_none (line 108) | async def test_validate_adhoc_s3_buckets_none(self): method test_validate_adhoc_s3_buckets_access_denied (line 114) | async def test_validate_adhoc_s3_buckets_access_denied(self): method test_orchestrator_get_all_s3_bucket_paths_no_adhoc (line 121) | async def test_orchestrator_get_all_s3_bucket_paths_no_adhoc(self): method test_orchestrator_get_all_s3_bucket_paths_with_adhoc (line 134) | async def test_orchestrator_get_all_s3_bucket_paths_with_adhoc(self): method test_orchestrator_get_all_s3_bucket_paths_validation_failure (line 155) | async def test_orchestrator_get_all_s3_bucket_paths_validation_failure... method test_orchestrator_get_all_s3_bucket_paths_validation_exception (line 176) | async def test_orchestrator_get_all_s3_bucket_paths_validation_excepti... method test_orchestrator_execute_parallel_searches_with_adhoc_buckets (line 197) | async def test_orchestrator_execute_parallel_searches_with_adhoc_bucke... method test_orchestrator_cache_key_includes_adhoc_buckets (line 246) | async def test_orchestrator_cache_key_includes_adhoc_buckets(self): method test_genomics_file_search_request_backward_compatibility (line 264) | def test_genomics_file_search_request_backward_compatibility(self): FILE: src/aws-healthomics-mcp-server/tests/test_analysis_models.py class TestTimeUnitEnum (line 30) | class TestTimeUnitEnum: method test_time_unit_values (line 33) | def test_time_unit_values(self): method test_time_unit_membership (line 40) | def test_time_unit_membership(self): class TestTaskCostMetrics (line 48) | class TestTaskCostMetrics: method test_task_cost_metrics_creation (line 51) | def test_task_cost_metrics_creation(self): method test_task_cost_metrics_missing_required_fields (line 79) | def test_task_cost_metrics_missing_required_fields(self): method test_task_cost_metrics_is_high_priority_required (line 84) | def test_task_cost_metrics_is_high_priority_required(self): class TestRunCostSummary (line 103) | class TestRunCostSummary: method test_run_cost_summary_creation (line 106) | def test_run_cost_summary_creation(self): method test_run_cost_summary_missing_required_fields (line 132) | def test_run_cost_summary_missing_required_fields(self): class TestAggregatedTaskMetrics (line 138) | class TestAggregatedTaskMetrics: method test_aggregated_task_metrics_creation (line 141) | def test_aggregated_task_metrics_creation(self): method test_aggregated_task_metrics_optional_stddev (line 177) | def test_aggregated_task_metrics_optional_stddev(self): method test_aggregated_task_metrics_missing_required_fields (line 199) | def test_aggregated_task_metrics_missing_required_fields(self): class TestCrossRunAggregate (line 205) | class TestCrossRunAggregate: method test_cross_run_aggregate_creation (line 208) | def test_cross_run_aggregate_creation(self): method test_cross_run_aggregate_missing_required_fields (line 232) | def test_cross_run_aggregate_missing_required_fields(self): class TestAnalysisModelsPropertyBased (line 238) | class TestAnalysisModelsPropertyBased: method test_property_task_cost_metrics_output_completeness (line 282) | def test_property_task_cost_metrics_output_completeness( method test_property_run_cost_summary_output_completeness (line 365) | def test_property_run_cost_summary_output_completeness( method test_property_cross_run_aggregate_output_completeness (line 453) | def test_property_cross_run_aggregate_output_completeness( class TestModelSerialization (line 511) | class TestModelSerialization: method test_task_cost_metrics_json_serialization (line 514) | def test_task_cost_metrics_json_serialization(self): method test_run_cost_summary_json_serialization (line 535) | def test_run_cost_summary_json_serialization(self): FILE: src/aws-healthomics-mcp-server/tests/test_aws_utils.py class TestGetRegion (line 45) | class TestGetRegion: method test_get_region_from_environment (line 49) | def test_get_region_from_environment(self): method test_get_region_default (line 55) | def test_get_region_default(self): method test_get_region_empty_env_var (line 61) | def test_get_region_empty_env_var(self): class TestGetOmicsServiceName (line 67) | class TestGetOmicsServiceName: method test_get_omics_service_name_from_environment (line 71) | def test_get_omics_service_name_from_environment(self): method test_get_omics_service_name_default (line 77) | def test_get_omics_service_name_default(self): method test_get_omics_service_name_empty_env_var (line 84) | def test_get_omics_service_name_empty_env_var(self, mock_logger): method test_get_omics_service_name_whitespace_env_var (line 95) | def test_get_omics_service_name_whitespace_env_var(self, mock_logger): method test_get_omics_service_name_mixed_whitespace_env_var (line 106) | def test_get_omics_service_name_mixed_whitespace_env_var(self, mock_lo... method test_get_omics_service_name_custom_value (line 116) | def test_get_omics_service_name_custom_value(self): method test_get_omics_service_name_with_surrounding_whitespace (line 122) | def test_get_omics_service_name_with_surrounding_whitespace(self): method test_get_omics_service_name_valid_no_warning (line 129) | def test_get_omics_service_name_valid_no_warning(self, mock_logger): class TestGetOmicsEndpointUrl (line 136) | class TestGetOmicsEndpointUrl: method test_get_omics_endpoint_url_not_set (line 140) | def test_get_omics_endpoint_url_not_set(self): method test_get_omics_endpoint_url_valid_https (line 146) | def test_get_omics_endpoint_url_valid_https(self): method test_get_omics_endpoint_url_valid_http (line 152) | def test_get_omics_endpoint_url_valid_http(self): method test_get_omics_endpoint_url_empty_string (line 159) | def test_get_omics_endpoint_url_empty_string(self, mock_logger): method test_get_omics_endpoint_url_whitespace_only (line 170) | def test_get_omics_endpoint_url_whitespace_only(self, mock_logger): method test_get_omics_endpoint_url_invalid_protocol (line 181) | def test_get_omics_endpoint_url_invalid_protocol(self, mock_logger): method test_get_omics_endpoint_url_wrong_protocol (line 192) | def test_get_omics_endpoint_url_wrong_protocol(self, mock_logger): method test_get_omics_endpoint_url_with_surrounding_whitespace (line 202) | def test_get_omics_endpoint_url_with_surrounding_whitespace(self): method test_get_omics_endpoint_url_complex_url (line 210) | def test_get_omics_endpoint_url_complex_url(self): method test_get_omics_endpoint_url_valid_no_warning (line 217) | def test_get_omics_endpoint_url_valid_no_warning(self, mock_logger): class TestGetAwsSession (line 224) | class TestGetAwsSession: method test_get_aws_session_with_env_region (line 230) | def test_get_aws_session_with_env_region(self, mock_botocore_session, ... method test_get_aws_session_default_region (line 250) | def test_get_aws_session_default_region(self, mock_botocore_session, m... class TestGetAwsSessionAgentHeader (line 265) | class TestGetAwsSessionAgentHeader: method test_no_agent_in_user_agent_when_not_set (line 271) | def test_no_agent_in_user_agent_when_not_set(self, mock_botocore_sessi... method test_agent_appended_to_user_agent_when_set (line 285) | def test_agent_appended_to_user_agent_when_set( method test_agent_value_lowercased_in_user_agent (line 301) | def test_agent_value_lowercased_in_user_agent(self, mock_botocore_sess... method test_user_agent_extra_still_has_server_id_when_agent_configured (line 315) | def test_user_agent_extra_still_has_server_id_when_agent_configured( class TestCreateAwsClient (line 330) | class TestCreateAwsClient: method test_create_aws_client_success (line 334) | def test_create_aws_client_success(self, mock_get_session): method test_create_aws_client_failure (line 348) | def test_create_aws_client_failure(self, mock_get_session): class TestGetOmicsClient (line 358) | class TestGetOmicsClient: method test_get_omics_client_success_default_service_no_endpoint (line 363) | def test_get_omics_client_success_default_service_no_endpoint(self, mo... method test_get_omics_client_success_custom_service_no_endpoint (line 377) | def test_get_omics_client_success_custom_service_no_endpoint(self, moc... method test_get_omics_client_success_with_endpoint_url (line 391) | def test_get_omics_client_success_with_endpoint_url(self, mock_get_ses... method test_get_omics_client_success_custom_service_and_endpoint (line 413) | def test_get_omics_client_success_custom_service_and_endpoint(self, mo... method test_get_omics_client_success_invalid_endpoint_url (line 430) | def test_get_omics_client_success_invalid_endpoint_url(self, mock_logg... method test_get_omics_client_failure (line 446) | def test_get_omics_client_failure(self, mock_get_session): method test_get_omics_client_failure_with_endpoint (line 457) | def test_get_omics_client_failure_with_endpoint(self, mock_get_session): class TestGetLogsClient (line 467) | class TestGetLogsClient: method test_get_logs_client_success (line 471) | def test_get_logs_client_success(self, mock_create_client): method test_get_logs_client_failure (line 482) | def test_get_logs_client_failure(self, mock_create_client): class TestGetCodeconnectionsClient (line 490) | class TestGetCodeconnectionsClient: method test_get_codeconnections_client_success (line 494) | def test_get_codeconnections_client_success(self, mock_create_client): method test_get_codeconnections_client_failure (line 507) | def test_get_codeconnections_client_failure(self, mock_create_client): class TestUtilityFunctions (line 515) | class TestUtilityFunctions: method test_create_zip_file_single_file (line 518) | def test_create_zip_file_single_file(self): method test_create_zip_file_multiple_files (line 532) | def test_create_zip_file_multiple_files(self): method test_create_zip_file_empty_dict (line 549) | def test_create_zip_file_empty_dict(self): method test_encode_to_base64 (line 562) | def test_encode_to_base64(self): method test_encode_to_base64_empty (line 570) | def test_encode_to_base64_empty(self): method test_decode_from_base64 (line 576) | def test_decode_from_base64(self): method test_decode_from_base64_empty (line 584) | def test_decode_from_base64_empty(self): method test_base64_round_trip (line 589) | def test_base64_round_trip(self): class TestRegionResolution (line 597) | class TestRegionResolution: method test_all_clients_use_default_region (line 602) | def test_all_clients_use_default_region(self, mock_get_session): method test_all_clients_use_env_region (line 621) | def test_all_clients_use_env_region(self, mock_get_session): class TestServiceNameAndEndpointConfiguration (line 639) | class TestServiceNameAndEndpointConfiguration: method test_get_omics_client_uses_configuration_functions (line 645) | def test_get_omics_client_uses_configuration_functions( method test_end_to_end_service_name_configuration (line 667) | def test_end_to_end_service_name_configuration(self, mock_get_session): method test_end_to_end_endpoint_url_configuration (line 681) | def test_end_to_end_endpoint_url_configuration(self, mock_get_session): method test_end_to_end_both_configurations (line 703) | def test_end_to_end_both_configurations(self, mock_get_session): method test_end_to_end_whitespace_service_name_fallback (line 720) | def test_end_to_end_whitespace_service_name_fallback(self, mock_logger... method test_end_to_end_invalid_endpoint_url_fallback (line 736) | def test_end_to_end_invalid_endpoint_url_fallback(self, mock_logger, m... class TestGetAccountId (line 750) | class TestGetAccountId: method test_get_account_id_success (line 754) | def test_get_account_id_success(self, mock_get_session): method test_get_account_id_failure (line 771) | def test_get_account_id_failure(self, mock_logger, mock_get_session): class TestGetPartition (line 783) | class TestGetPartition: method setup_method (line 786) | def setup_method(self): method test_get_partition_success_aws (line 791) | def test_get_partition_success_aws(self, mock_get_session): method test_get_partition_success_aws_cn (line 810) | def test_get_partition_success_aws_cn(self, mock_get_session): method test_get_partition_success_aws_us_gov (line 829) | def test_get_partition_success_aws_us_gov(self, mock_get_session): method test_get_partition_failure (line 849) | def test_get_partition_failure(self, mock_logger, mock_get_session): method test_get_partition_memoization (line 862) | def test_get_partition_memoization(self, mock_get_session, mock_cache_... class TestGetAgentValue (line 890) | class TestGetAgentValue: method test_get_agent_value_not_set (line 893) | def test_get_agent_value_not_set(self): method test_get_agent_value_valid_string (line 902) | def test_get_agent_value_valid_string(self): method test_get_agent_value_empty_string (line 908) | def test_get_agent_value_empty_string(self): method test_get_agent_value_warning_on_empty_after_sanitization (line 915) | def test_get_agent_value_warning_on_empty_after_sanitization(self, moc... class TestGetAgentValueProperties (line 925) | class TestGetAgentValueProperties: method test_sanitization_invariant (line 937) | def test_sanitization_invariant(self, value): method test_whitespace_only_strings_are_rejected (line 956) | def test_whitespace_only_strings_are_rejected(self, value): class TestUserAgentInjectionProperties (line 968) | class TestUserAgentInjectionProperties: method test_user_agent_contains_agent_suffix_and_server_id (line 978) | def test_user_agent_contains_agent_suffix_and_server_id(self, agent_va... class TestAgentUserAgentIntegration (line 1006) | class TestAgentUserAgentIntegration: method _make_fake_sts_response (line 1010) | def _make_fake_sts_response(): method test_agent_in_user_agent_on_real_pipeline (line 1054) | def test_agent_in_user_agent_on_real_pipeline(self): method test_no_agent_in_user_agent_when_not_set (line 1070) | def test_no_agent_in_user_agent_when_not_set(self): class TestProfileAndRegionOverride (line 1092) | class TestProfileAndRegionOverride: method test_get_aws_session_with_profile_override (line 1097) | def test_get_aws_session_with_profile_override(self, mock_boto3_sessio... method test_get_aws_session_with_region_override (line 1108) | def test_get_aws_session_with_region_override(self, mock_boto3_session... method test_get_aws_session_with_both_overrides (line 1119) | def test_get_aws_session_with_both_overrides(self, mock_boto3_session,... method test_get_aws_session_no_profile_in_kwargs_when_none (line 1131) | def test_get_aws_session_no_profile_in_kwargs_when_none( method test_get_omics_client_threads_profile_and_region (line 1143) | def test_get_omics_client_threads_profile_and_region(self, mock_get_se... method test_create_aws_client_threads_profile_and_region (line 1154) | def test_create_aws_client_threads_profile_and_region(self, mock_get_s... method test_get_logs_client_threads_profile_and_region (line 1165) | def test_get_logs_client_threads_profile_and_region(self, mock_create_... method test_get_account_id_threads_profile_and_region (line 1176) | def test_get_account_id_threads_profile_and_region(self, mock_get_sess... method test_get_partition_caches_by_profile_and_region (line 1191) | def test_get_partition_caches_by_profile_and_region(self): FILE: src/aws-healthomics-mcp-server/tests/test_clone_container.py class TestParseContainerImageReference (line 40) | class TestParseContainerImageReference: method test_simple_image_name_becomes_library_image (line 43) | def test_simple_image_name_becomes_library_image(self): method test_simple_image_with_tag (line 51) | def test_simple_image_with_tag(self): method test_org_image_becomes_docker_hub (line 59) | def test_org_image_becomes_docker_hub(self): method test_quay_io_image (line 67) | def test_quay_io_image(self): method test_ecr_public_image (line 75) | def test_ecr_public_image(self): method test_ghcr_io_image (line 83) | def test_ghcr_io_image(self): method test_image_with_digest (line 90) | def test_image_with_digest(self): method test_docker_io_normalized_to_registry_1 (line 99) | def test_docker_io_normalized_to_registry_1(self): method test_full_reference_constructed_correctly_with_tag (line 106) | def test_full_reference_constructed_correctly_with_tag(self): method test_full_reference_constructed_correctly_with_digest (line 111) | def test_full_reference_constructed_correctly_with_digest(self): method test_wave_seqera_io_image (line 117) | def test_wave_seqera_io_image(self): method test_nested_repository_path (line 124) | def test_nested_repository_path(self): class TestFindMatchingPullThroughCache (line 137) | class TestFindMatchingPullThroughCache: method test_exact_match (line 140) | def test_exact_match(self): method test_docker_io_matches_registry_1 (line 149) | def test_docker_io_matches_registry_1(self): method test_registry_1_matches_docker_io (line 158) | def test_registry_1_matches_docker_io(self): method test_no_match_returns_none (line 167) | def test_no_match_returns_none(self): method test_empty_rules_returns_none (line 175) | def test_empty_rules_returns_none(self): method test_multiple_rules_finds_correct_one (line 180) | def test_multiple_rules_finds_correct_one(self): class TestGetOrCreateCodeBuildProject (line 197) | class TestGetOrCreateCodeBuildProject: method test_project_exists_returns_name (line 200) | def test_project_exists_returns_name(self): method test_project_not_exists_creates_role_and_project (line 216) | def test_project_not_exists_creates_role_and_project(self): method test_role_exists_skips_role_creation (line 238) | def test_role_exists_skips_role_creation(self): method test_client_error_not_resource_not_found_raises (line 255) | def test_client_error_not_resource_not_found_raises(self): class TestCopyImageViaCodeBuild (line 273) | class TestCopyImageViaCodeBuild: method test_successful_build_returns_digest (line 277) | async def test_successful_build_returns_digest(self): method test_build_failed_returns_error (line 326) | async def test_build_failed_returns_error(self): class TestCloneContainerToECR (line 381) | class TestCloneContainerToECR: method test_empty_source_image_returns_error (line 385) | async def test_empty_source_image_returns_error(self): method test_whitespace_source_image_returns_error (line 396) | async def test_whitespace_source_image_returns_error(self): method test_failed_account_id_returns_error (line 407) | async def test_failed_account_id_returns_error(self): method test_pull_through_cache_success (line 429) | async def test_pull_through_cache_success(self): method test_pull_through_cache_failure (line 467) | async def test_pull_through_cache_failure(self): method test_pull_through_cache_no_images (line 502) | async def test_pull_through_cache_no_images(self): method test_no_ptc_supported_registry_suggests_creating (line 534) | async def test_no_ptc_supported_registry_suggests_creating(self): method test_no_ptc_unsupported_registry_uses_codebuild (line 570) | async def test_no_ptc_unsupported_registry_uses_codebuild(self): method test_codebuild_failure_returns_manual_instructions (line 629) | async def test_codebuild_failure_returns_manual_instructions(self): method test_access_denied_error (line 685) | async def test_access_denied_error(self): method test_other_client_error (line 718) | async def test_other_client_error(self): method test_botocore_error (line 751) | async def test_botocore_error(self): method test_unexpected_error (line 781) | async def test_unexpected_error(self): method test_pull_through_cache_with_digest (line 811) | async def test_pull_through_cache_with_digest(self): method test_custom_target_repository_name (line 848) | async def test_custom_target_repository_name(self): class TestPullThroughCacheSupportedRegistries (line 891) | class TestPullThroughCacheSupportedRegistries: method test_docker_hub_supported (line 894) | def test_docker_hub_supported(self): method test_quay_supported (line 899) | def test_quay_supported(self): method test_ecr_public_supported (line 903) | def test_ecr_public_supported(self): method test_ghcr_supported (line 907) | def test_ghcr_supported(self): method test_wave_seqera_not_supported (line 911) | def test_wave_seqera_not_supported(self): class TestCodeBuildEdgeCases (line 921) | class TestCodeBuildEdgeCases: method test_build_with_empty_builds_response (line 925) | async def test_build_with_empty_builds_response(self): method test_build_with_stopped_status (line 977) | async def test_build_with_stopped_status(self): class TestCloneContainerEdgeCases (line 1019) | class TestCloneContainerEdgeCases: method test_ptc_rules_check_exception_continues (line 1023) | async def test_ptc_rules_check_exception_continues(self): method test_grant_access_exception_continues (line 1058) | async def test_grant_access_exception_continues(self): method test_repository_already_exists (line 1094) | async def test_repository_already_exists(self): FILE: src/aws-healthomics-mcp-server/tests/test_codeconnections.py class TestGenerateConsoleUrl (line 29) | class TestGenerateConsoleUrl: method test_generate_console_url_us_east_1 (line 32) | def test_generate_console_url_us_east_1(self): method test_generate_console_url_eu_west_1 (line 38) | def test_generate_console_url_eu_west_1(self): method test_generate_console_url_ap_southeast_1 (line 44) | def test_generate_console_url_ap_southeast_1(self): method test_generate_console_url_contains_region_in_subdomain (line 50) | def test_generate_console_url_contains_region_in_subdomain(self): method test_generate_console_url_contains_region_in_query_param (line 56) | def test_generate_console_url_contains_region_in_query_param(self): method test_generate_console_url_points_to_codeconnections_page (line 62) | def test_generate_console_url_points_to_codeconnections_page(self): method test_generate_console_url_is_valid_https_url (line 67) | def test_generate_console_url_is_valid_https_url(self): class TestGetStatusGuidance (line 74) | class TestGetStatusGuidance: method test_pending_status_mentions_oauth (line 77) | def test_pending_status_mentions_oauth(self): method test_pending_status_mentions_console (line 82) | def test_pending_status_mentions_console(self): method test_pending_status_mentions_authorization (line 87) | def test_pending_status_mentions_authorization(self): method test_available_status_indicates_ready_for_workflows (line 92) | def test_available_status_indicates_ready_for_workflows(self): method test_available_status_mentions_connection_arn_usage (line 98) | def test_available_status_mentions_connection_arn_usage(self): method test_available_status_mentions_definition_repository (line 103) | def test_available_status_mentions_definition_repository(self): method test_error_status_includes_troubleshooting_guidance (line 108) | def test_error_status_includes_troubleshooting_guidance(self): method test_error_status_mentions_console_for_details (line 113) | def test_error_status_mentions_console_for_details(self): method test_error_status_suggests_creating_new_connection (line 118) | def test_error_status_suggests_creating_new_connection(self): method test_unknown_status_returns_unknown_message (line 123) | def test_unknown_status_returns_unknown_message(self): method test_empty_status_returns_unknown_message (line 129) | def test_empty_status_returns_unknown_message(self): method test_case_sensitive_status_pending (line 134) | def test_case_sensitive_status_pending(self): method test_case_sensitive_status_available (line 139) | def test_case_sensitive_status_available(self): method test_case_sensitive_status_error (line 144) | def test_case_sensitive_status_error(self): method test_pending_guidance_full_content (line 149) | def test_pending_guidance_full_content(self): method test_available_guidance_full_content (line 159) | def test_available_guidance_full_content(self): method test_error_guidance_full_content (line 169) | def test_error_guidance_full_content(self): function mock_ctx (line 180) | def mock_ctx(): function mock_client (line 188) | def mock_client(): class TestListCodeconnections (line 193) | class TestListCodeconnections: method test_list_codeconnections_success (line 197) | async def test_list_codeconnections_success(self, mock_ctx, mock_client): method test_list_codeconnections_with_pagination (line 222) | async def test_list_codeconnections_with_pagination(self, mock_ctx, mo... method test_list_codeconnections_with_provider_filter (line 246) | async def test_list_codeconnections_with_provider_filter(self, mock_ct... method test_list_codeconnections_pending_status (line 268) | async def test_list_codeconnections_pending_status(self, mock_ctx, moc... method test_list_codeconnections_client_error (line 290) | async def test_list_codeconnections_client_error(self, mock_ctx, mock_... method test_list_codeconnections_botocore_error (line 307) | async def test_list_codeconnections_botocore_error(self, mock_ctx, moc... method test_list_codeconnections_unexpected_error (line 321) | async def test_list_codeconnections_unexpected_error(self, mock_ctx, m... method test_list_codeconnections_with_next_token (line 335) | async def test_list_codeconnections_with_next_token(self, mock_ctx, mo... method test_list_codeconnections_empty_result (line 349) | async def test_list_codeconnections_empty_result(self, mock_ctx, mock_... method test_list_codeconnections_max_results (line 363) | async def test_list_codeconnections_max_results(self, mock_ctx, mock_c... class TestCreateCodeconnection (line 377) | class TestCreateCodeconnection: method test_create_codeconnection_success (line 381) | async def test_create_codeconnection_success(self, mock_ctx, mock_clie... method test_create_codeconnection_with_tags (line 411) | async def test_create_codeconnection_with_tags(self, mock_ctx, mock_cl... method test_create_codeconnection_console_url_region (line 441) | async def test_create_codeconnection_console_url_region(self, mock_ctx... method test_create_codeconnection_guidance_is_pending (line 465) | async def test_create_codeconnection_guidance_is_pending(self, mock_ct... method test_create_codeconnection_client_error (line 489) | async def test_create_codeconnection_client_error(self, mock_ctx, mock... method test_create_codeconnection_botocore_error (line 515) | async def test_create_codeconnection_botocore_error(self, mock_ctx, mo... method test_create_codeconnection_unexpected_error (line 538) | async def test_create_codeconnection_unexpected_error(self, mock_ctx, ... method test_create_codeconnection_short_arn (line 561) | async def test_create_codeconnection_short_arn(self, mock_ctx, mock_cl... method test_create_codeconnection_no_tags (line 586) | async def test_create_codeconnection_no_tags(self, mock_ctx, mock_clie... class TestGetCodeconnection (line 611) | class TestGetCodeconnection: method test_get_codeconnection_success (line 615) | async def test_get_codeconnection_success(self, mock_ctx, mock_client): method test_get_codeconnection_with_host_arn (line 648) | async def test_get_codeconnection_with_host_arn(self, mock_ctx, mock_c... method test_get_codeconnection_pending_status (line 681) | async def test_get_codeconnection_pending_status(self, mock_ctx, mock_... method test_get_codeconnection_not_found (line 713) | async def test_get_codeconnection_not_found(self, mock_ctx, mock_client): method test_get_codeconnection_client_error (line 740) | async def test_get_codeconnection_client_error(self, mock_ctx, mock_cl... method test_get_codeconnection_botocore_error (line 767) | async def test_get_codeconnection_botocore_error(self, mock_ctx, mock_... method test_get_codeconnection_unexpected_error (line 791) | async def test_get_codeconnection_unexpected_error(self, mock_ctx, moc... method test_get_codeconnection_error_status (line 815) | async def test_get_codeconnection_error_status(self, mock_ctx, mock_cl... method test_get_codeconnection_codestar_arn (line 847) | async def test_get_codeconnection_codestar_arn(self, mock_ctx, mock_cl... method test_get_codeconnection_no_host_arn (line 878) | async def test_get_codeconnection_no_host_arn(self, mock_ctx, mock_cli... FILE: src/aws-healthomics-mcp-server/tests/test_consts.py class TestConstants (line 22) | class TestConstants: method test_default_max_results_from_environment (line 26) | def test_default_max_results_from_environment(self): method test_default_max_results_default_value (line 37) | def test_default_max_results_default_value(self): method test_default_max_results_custom_value (line 48) | def test_default_max_results_custom_value(self): method test_default_max_results_invalid_value (line 59) | def test_default_max_results_invalid_value(self): class TestServiceConstants (line 70) | class TestServiceConstants: method test_default_region (line 73) | def test_default_region(self): method test_default_storage_type (line 77) | def test_default_storage_type(self): method test_default_omics_service_name (line 81) | def test_default_omics_service_name(self): method test_healthomics_supported_regions (line 85) | def test_healthomics_supported_regions(self): class TestStorageTypes (line 101) | class TestStorageTypes: method test_storage_type_constants (line 104) | def test_storage_type_constants(self): method test_storage_types_list (line 109) | def test_storage_types_list(self): class TestCacheBehaviors (line 117) | class TestCacheBehaviors: method test_cache_behavior_constants (line 120) | def test_cache_behavior_constants(self): method test_cache_behaviors_list (line 125) | def test_cache_behaviors_list(self): class TestRunStatuses (line 133) | class TestRunStatuses: method test_run_status_constants (line 136) | def test_run_status_constants(self): method test_run_statuses_list (line 145) | def test_run_statuses_list(self): class TestExportTypes (line 167) | class TestExportTypes: method test_export_type_definition (line 170) | def test_export_type_definition(self): class TestErrorMessages (line 175) | class TestErrorMessages: method test_error_message_constants (line 178) | def test_error_message_constants(self): method test_error_messages_are_strings (line 187) | def test_error_messages_are_strings(self): method test_error_messages_contain_placeholders (line 194) | def test_error_messages_contain_placeholders(self): class TestConstantsIntegration (line 202) | class TestConstantsIntegration: method test_storage_types_match_individual_constants (line 205) | def test_storage_types_match_individual_constants(self): method test_cache_behaviors_match_individual_constants (line 211) | def test_cache_behaviors_match_individual_constants(self): method test_run_statuses_completeness (line 217) | def test_run_statuses_completeness(self): method test_default_region_in_supported_regions (line 230) | def test_default_region_in_supported_regions(self): FILE: src/aws-healthomics-mcp-server/tests/test_content_resolver.py class TestContentInputTypeDetection (line 90) | class TestContentInputTypeDetection: method test_s3_uri_detected (line 98) | def test_s3_uri_detected(self, uri: str) -> None: method test_non_s3_non_file_is_inline (line 107) | def test_non_s3_non_file_is_inline(self, content: str) -> None: method test_existing_file_detected_as_local (line 122) | def test_existing_file_detected_as_local(self, tmp_path: Path, filenam... class TestS3URIPrecedence (line 139) | class TestS3URIPrecedence: method test_s3_prefix_always_wins (line 147) | def test_s3_prefix_always_wins(self, bucket: str, key: str) -> None: class TestPathTraversalRejection (line 168) | class TestPathTraversalRejection: method test_traversal_paths_rejected (line 176) | def test_traversal_paths_rejected(self, path: str) -> None: class TestS3URIFormatValidation (line 191) | class TestS3URIFormatValidation: method test_missing_bucket_rejected (line 199) | def test_missing_bucket_rejected(self, data: st.DataObject) -> None: method test_invalid_bucket_chars_rejected (line 212) | def test_invalid_bucket_chars_rejected(self, data: st.DataObject) -> N... method test_empty_key_rejected (line 236) | def test_empty_key_rejected(self, bucket: str) -> None: class TestFileSizeLimitEnforcement (line 265) | class TestFileSizeLimitEnforcement: method test_oversized_content_rejected (line 276) | def test_oversized_content_rejected(self, max_size: int, excess: int) ... method test_within_limit_accepted (line 289) | def test_within_limit_accepted(self, max_size: int) -> None: class TestLocalFileContentRoundTrip (line 307) | class TestLocalFileContentRoundTrip: method test_text_mode_round_trip (line 329) | async def test_text_mode_round_trip(self, tmp_path: Path, content: str... method test_binary_mode_round_trip (line 352) | async def test_binary_mode_round_trip(self, tmp_path: Path, content: b... class TestS3ObjectContentRoundTrip (line 372) | class TestS3ObjectContentRoundTrip: method test_text_mode_round_trip (line 386) | async def test_text_mode_round_trip( method test_binary_mode_round_trip (line 419) | async def test_binary_mode_round_trip( class TestInlineContentPassthrough (line 450) | class TestInlineContentPassthrough: method test_non_s3_non_file_passthrough (line 460) | async def test_non_s3_non_file_passthrough(self, content: str) -> None: class TestLocalBundleRoundTrip (line 506) | class TestLocalBundleRoundTrip: method test_directory_round_trip (line 518) | async def test_directory_round_trip( method test_zip_round_trip (line 549) | async def test_zip_round_trip(self, tmp_path: Path, file_dict: dict, s... class TestS3BundleRoundTrip (line 571) | class TestS3BundleRoundTrip: method test_s3_prefix_round_trip (line 585) | async def test_s3_prefix_round_trip( method test_s3_zip_round_trip (line 638) | async def test_s3_zip_round_trip( class TestAdditionalFilesIndividualResolution (line 677) | class TestAdditionalFilesIndividualResolution: method test_mixed_file_and_inline_resolution (line 703) | async def test_mixed_file_and_inline_resolution( class TestDeprecatedAliasEquivalence (line 751) | class TestDeprecatedAliasEquivalence: method test_alias_produces_same_result (line 766) | async def test_alias_produces_same_result( class TestDefinitionSourcePrecedence (line 828) | class TestDefinitionSourcePrecedence: method test_definition_source_wins_over_alias (line 849) | async def test_definition_source_wins_over_alias( class TestDetectionEdgeCases (line 911) | class TestDetectionEdgeCases: method test_empty_string (line 918) | def test_empty_string(self) -> None: method test_whitespace_only (line 922) | def test_whitespace_only(self) -> None: method test_very_long_string (line 926) | def test_very_long_string(self) -> None: method test_special_characters (line 931) | def test_special_characters(self) -> None: method test_newlines_and_tabs (line 935) | def test_newlines_and_tabs(self) -> None: method test_unicode_content (line 940) | def test_unicode_content(self) -> None: method test_s3_prefix_case_sensitive (line 944) | def test_s3_prefix_case_sensitive(self) -> None: class TestErrorPropagation (line 949) | class TestErrorPropagation: method test_file_not_found (line 957) | async def test_file_not_found(self, tmp_path: Path) -> None: method test_permission_denied (line 974) | async def test_permission_denied(self, tmp_path: Path) -> None: method test_s3_404_error (line 990) | async def test_s3_404_error(self, mock_get_session: MagicMock) -> None: method test_s3_403_error (line 1009) | async def test_s3_403_error(self, mock_get_session: MagicMock) -> None: class TestZipEdgeCases (line 1027) | class TestZipEdgeCases: method test_empty_zip (line 1033) | def test_empty_zip(self) -> None: method test_zip_with_nested_directories (line 1045) | def test_zip_with_nested_directories(self) -> None: method test_zip_with_binary_file_raises (line 1061) | def test_zip_with_binary_file_raises(self) -> None: method test_invalid_zip_data_raises (line 1073) | def test_invalid_zip_data_raises(self) -> None: method test_zip_skips_directory_entries (line 1082) | def test_zip_skips_directory_entries(self) -> None: class TestDirectoryEdgeCases (line 1099) | class TestDirectoryEdgeCases: method test_empty_directory (line 1106) | async def test_empty_directory(self, tmp_path: Path) -> None: method test_directory_with_subdirectories (line 1115) | async def test_directory_with_subdirectories(self, tmp_path: Path) -> ... method test_directory_with_non_utf8_file (line 1129) | async def test_directory_with_non_utf8_file(self, tmp_path: Path) -> N... method test_directory_not_a_directory (line 1140) | async def test_directory_not_a_directory(self, tmp_path: Path) -> None: class TestCoverageGaps (line 1156) | class TestCoverageGaps: method test_validate_local_path_normpath_traversal (line 1159) | def test_validate_local_path_normpath_traversal(self) -> None: method test_s3_object_reraise_non_404_403 (line 1174) | async def test_s3_object_reraise_non_404_403(self, mock_get_session: M... method test_read_local_directory_not_found (line 1194) | def test_read_local_directory_not_found(self) -> None: method test_s3_prefix_skips_directory_marker (line 1204) | def test_s3_prefix_skips_directory_marker(self, mock_get_session: Magi... method test_s3_prefix_access_denied (line 1236) | def test_s3_prefix_access_denied(self, mock_get_session: MagicMock) ->... method test_s3_prefix_reraise_non_403 (line 1259) | def test_s3_prefix_reraise_non_403(self, mock_get_session: MagicMock) ... method test_resolve_bundle_inline_content_raises (line 1282) | async def test_resolve_bundle_inline_content_raises(self) -> None: method test_resolve_bundle_s3_no_trailing_slash (line 1289) | async def test_resolve_bundle_s3_no_trailing_slash(self, mock_get_sess... method test_resolve_single_content_s3_text_mode (line 1317) | async def test_resolve_single_content_s3_text_mode(self, mock_get_sess... method test_resolve_single_content_binary_inline (line 1335) | async def test_resolve_single_content_binary_inline(self) -> None: method test_s3_prefix_size_limit_enforcement (line 1346) | def test_s3_prefix_size_limit_enforcement(self, mock_get_session: Magi... method test_read_local_directory_size_limit (line 1370) | def test_read_local_directory_size_limit(self) -> None: method test_read_local_file_rejects_directory (line 1386) | async def test_read_local_file_rejects_directory(self, tmp_path: Path)... method test_read_local_file_rejects_directory_binary_mode (line 1402) | async def test_read_local_file_rejects_directory_binary_mode(self, tmp... FILE: src/aws-healthomics-mcp-server/tests/test_content_resolver_security.py class TestPathTraversalRejection (line 42) | class TestPathTraversalRejection: method test_simple_parent_traversal (line 48) | def test_simple_parent_traversal(self) -> None: method test_mid_path_traversal (line 53) | def test_mid_path_traversal(self) -> None: method test_trailing_traversal (line 58) | def test_trailing_traversal(self) -> None: method test_bare_double_dot (line 63) | def test_bare_double_dot(self) -> None: method test_nested_traversal (line 68) | def test_nested_traversal(self) -> None: method test_backslash_traversal (line 73) | def test_backslash_traversal(self) -> None: method test_backslash_dot_dot_windows (line 83) | def test_backslash_dot_dot_windows(self) -> None: method test_double_traversal_to_etc_passwd (line 91) | def test_double_traversal_to_etc_passwd(self) -> None: method test_traversal_with_absolute_prefix (line 96) | def test_traversal_with_absolute_prefix(self) -> None: method test_traversal_falls_through_to_inline (line 101) | def test_traversal_falls_through_to_inline(self) -> None: method test_safe_path_accepted (line 106) | def test_safe_path_accepted(self, tmp_path: Path) -> None: class TestS3URIFormatValidation (line 120) | class TestS3URIFormatValidation: method test_bare_s3_prefix (line 126) | def test_bare_s3_prefix(self) -> None: method test_s3_triple_slash (line 131) | def test_s3_triple_slash(self) -> None: method test_s3_triple_slash_with_key (line 136) | def test_s3_triple_slash_with_key(self) -> None: method test_uppercase_bucket (line 141) | def test_uppercase_bucket(self) -> None: method test_underscore_bucket (line 146) | def test_underscore_bucket(self) -> None: method test_too_short_bucket (line 151) | def test_too_short_bucket(self) -> None: method test_bucket_starting_with_hyphen (line 156) | def test_bucket_starting_with_hyphen(self) -> None: method test_bucket_ending_with_hyphen (line 161) | def test_bucket_ending_with_hyphen(self) -> None: method test_valid_uri_accepted (line 166) | def test_valid_uri_accepted(self) -> None: class TestSizeLimitEnforcement (line 179) | class TestSizeLimitEnforcement: method test_size_exactly_at_limit (line 185) | def test_size_exactly_at_limit(self) -> None: method test_size_one_byte_over (line 189) | def test_size_one_byte_over(self) -> None: method test_size_well_under_limit (line 194) | def test_size_well_under_limit(self) -> None: method test_local_file_size_limit (line 199) | async def test_local_file_size_limit(self, tmp_path: Path) -> None: method test_s3_object_size_limit (line 211) | async def test_s3_object_size_limit(self, mock_get_session: MagicMock)... class TestSecurityBeforeIO (line 234) | class TestSecurityBeforeIO: method test_path_traversal_checked_before_file_read (line 241) | async def test_path_traversal_checked_before_file_read(self, tmp_path:... method test_traversal_rejects_before_existence_check (line 259) | async def test_traversal_rejects_before_existence_check(self, mock_exi... method test_s3_uri_validated_before_api_call (line 274) | async def test_s3_uri_validated_before_api_call(self, mock_get_session... method test_s3_size_checked_before_download (line 286) | async def test_s3_size_checked_before_download(self, mock_get_session:... method test_local_size_checked_before_read (line 306) | async def test_local_size_checked_before_read(self, tmp_path: Path) ->... FILE: src/aws-healthomics-mcp-server/tests/test_cost_analyzer.py class TestCostAnalyzerCalculateTaskCost (line 27) | class TestCostAnalyzerCalculateTaskCost: method setup_method (line 30) | def setup_method(self): method teardown_method (line 34) | def teardown_method(self): method test_calculate_task_cost_basic (line 38) | def test_calculate_task_cost_basic(self): method test_calculate_task_cost_minimum_billing (line 45) | def test_calculate_task_cost_minimum_billing(self): method test_calculate_task_cost_zero_runtime (line 54) | def test_calculate_task_cost_zero_runtime(self): method test_calculate_task_cost_above_minimum (line 62) | def test_calculate_task_cost_above_minimum(self): method test_calculate_task_cost_pricing_unavailable (line 70) | def test_calculate_task_cost_pricing_unavailable(self): class TestCostAnalyzerCalculateStorageCost (line 78) | class TestCostAnalyzerCalculateStorageCost: method setup_method (line 81) | def setup_method(self): method teardown_method (line 85) | def teardown_method(self): method test_calculate_storage_cost_static (line 89) | def test_calculate_storage_cost_static(self): method test_calculate_storage_cost_dynamic (line 102) | def test_calculate_storage_cost_dynamic(self): method test_calculate_storage_cost_pricing_unavailable (line 115) | def test_calculate_storage_cost_pricing_unavailable(self): class TestCostAnalyzerStaticStorageAllocation (line 128) | class TestCostAnalyzerStaticStorageAllocation: method test_allocation_below_minimum (line 131) | def test_allocation_below_minimum(self): method test_allocation_at_minimum (line 138) | def test_allocation_at_minimum(self): method test_allocation_above_minimum (line 143) | def test_allocation_above_minimum(self): method test_allocation_zero (line 153) | def test_allocation_zero(self): method test_allocation_large_capacity (line 158) | def test_allocation_large_capacity(self): class TestCostAnalyzerConstants (line 165) | class TestCostAnalyzerConstants: method test_minimum_billable_seconds (line 168) | def test_minimum_billable_seconds(self): method test_static_storage_min_gib (line 172) | def test_static_storage_min_gib(self): method test_static_storage_increment_gib (line 176) | def test_static_storage_increment_gib(self): class TestCostAnalyzerPropertyBased (line 181) | class TestCostAnalyzerPropertyBased: method setup_method (line 184) | def setup_method(self): method teardown_method (line 188) | def teardown_method(self): method test_property_minimum_billable_time (line 193) | def test_property_minimum_billable_time(self, running_seconds: float): method test_property_static_storage_allocation_rounding (line 220) | def test_property_static_storage_allocation_rounding(self, capacity: f... FILE: src/aws-healthomics-mcp-server/tests/test_create_container_registry_map.py class TestCreateContainerRegistryMap (line 24) | class TestCreateContainerRegistryMap: method mock_ctx (line 28) | def mock_ctx(self): method tool_wrapper (line 33) | def tool_wrapper(self): method mock_ptc_rules_response (line 38) | def mock_ptc_rules_response(self): method test_basic_registry_map_creation (line 71) | async def test_basic_registry_map_creation( method test_explicit_account_and_region (line 112) | async def test_explicit_account_and_region( method test_skip_pull_through_cache_discovery (line 132) | async def test_skip_pull_through_cache_discovery(self, mock_ctx, tool_... method test_additional_registry_mappings (line 154) | async def test_additional_registry_mappings( method test_additional_mapping_overrides_discovered (line 196) | async def test_additional_mapping_overrides_discovered( method test_image_mappings (line 238) | async def test_image_mappings(self, mock_ctx, tool_wrapper): method test_combined_registry_and_image_mappings (line 274) | async def test_combined_registry_and_image_mappings( method test_json_output_format (line 313) | async def test_json_output_format(self, mock_ctx, tool_wrapper, mock_p... method test_invalid_additional_mapping_skipped (line 342) | async def test_invalid_additional_mapping_skipped(self, mock_ctx, tool... method test_invalid_image_mapping_skipped (line 373) | async def test_invalid_image_mapping_skipped(self, mock_ctx, tool_wrap... method test_no_usable_caches_returns_empty_mappings (line 404) | async def test_no_usable_caches_returns_empty_mappings(self, mock_ctx,... method test_ptc_discovery_failure_continues (line 439) | async def test_ptc_discovery_failure_continues(self, mock_ctx, tool_wr... method test_account_id_resolution_failure (line 469) | async def test_account_id_resolution_failure(self, mock_ctx, tool_wrap... method test_usage_hint_included (line 481) | async def test_usage_hint_included(self, mock_ctx, tool_wrapper): method test_empty_rules_list (line 502) | async def test_empty_rules_list(self, mock_ctx, tool_wrapper): FILE: src/aws-healthomics-mcp-server/tests/test_ecr_coverage.py class TestNormalizeActions (line 50) | class TestNormalizeActions: method test_normalize_actions_with_none (line 53) | def test_normalize_actions_with_none(self): method test_normalize_actions_with_string (line 58) | def test_normalize_actions_with_string(self): method test_normalize_actions_with_list (line 63) | def test_normalize_actions_with_list(self): method test_normalize_actions_with_mixed_list (line 68) | def test_normalize_actions_with_mixed_list(self): method test_normalize_actions_with_invalid_type (line 73) | def test_normalize_actions_with_invalid_type(self): method test_normalize_actions_with_dict (line 78) | def test_normalize_actions_with_dict(self): class TestCheckPrincipalMatch (line 84) | class TestCheckPrincipalMatch: method test_principal_match_with_none (line 87) | def test_principal_match_with_none(self): method test_principal_match_with_wildcard (line 92) | def test_principal_match_with_wildcard(self): method test_principal_match_with_string_match (line 97) | def test_principal_match_with_string_match(self): method test_principal_match_with_string_no_match (line 102) | def test_principal_match_with_string_no_match(self): method test_principal_match_with_service_dict_string (line 107) | def test_principal_match_with_service_dict_string(self): method test_principal_match_with_service_dict_list (line 113) | def test_principal_match_with_service_dict_list(self): method test_principal_match_with_aws_dict_string (line 119) | def test_principal_match_with_aws_dict_string(self): method test_principal_match_with_aws_dict_wildcard (line 125) | def test_principal_match_with_aws_dict_wildcard(self): method test_principal_match_with_aws_dict_list (line 131) | def test_principal_match_with_aws_dict_list(self): method test_principal_match_with_aws_dict_list_wildcard (line 137) | def test_principal_match_with_aws_dict_list_wildcard(self): method test_principal_match_with_empty_dict (line 143) | def test_principal_match_with_empty_dict(self): class TestCheckActionsAllowed (line 149) | class TestCheckActionsAllowed: method test_exact_match_allowed (line 152) | def test_exact_match_allowed(self): method test_service_wildcard_allowed (line 160) | def test_service_wildcard_allowed(self): method test_global_wildcard_allowed (line 168) | def test_global_wildcard_allowed(self): method test_missing_actions_returned (line 176) | def test_missing_actions_returned(self): method test_wildcards_disabled (line 184) | def test_wildcards_disabled(self): class TestParsePolicyDocument (line 195) | class TestParsePolicyDocument: method test_parse_valid_json (line 198) | def test_parse_valid_json(self): method test_parse_none_returns_none (line 204) | def test_parse_none_returns_none(self): method test_parse_invalid_json_returns_none (line 209) | def test_parse_invalid_json_returns_none(self): class TestCheckRegistryPolicyHealthOmicsAccess (line 215) | class TestCheckRegistryPolicyHealthOmicsAccess: method test_no_policy_returns_not_granted (line 218) | def test_no_policy_returns_not_granted(self): method test_invalid_json_returns_not_granted (line 224) | def test_invalid_json_returns_not_granted(self): method test_valid_policy_with_healthomics_access (line 230) | def test_valid_policy_with_healthomics_access(self): method test_policy_with_deny_effect_ignored (line 246) | def test_policy_with_deny_effect_ignored(self): method test_policy_with_wrong_principal_ignored (line 261) | def test_policy_with_wrong_principal_ignored(self): method test_policy_with_single_statement_dict (line 276) | def test_policy_with_single_statement_dict(self): class TestCheckRepositoryTemplateHealthOmicsAccess (line 290) | class TestCheckRepositoryTemplateHealthOmicsAccess: method test_no_template_returns_not_exists (line 293) | def test_no_template_returns_not_exists(self): method test_invalid_json_returns_exists_but_not_granted (line 300) | def test_invalid_json_returns_exists_but_not_granted(self): method test_valid_template_with_healthomics_access (line 307) | def test_valid_template_with_healthomics_access(self): method test_template_with_single_statement_dict (line 324) | def test_template_with_single_statement_dict(self): class TestInitiatePullThroughCache (line 339) | class TestInitiatePullThroughCache: method test_successful_pull_through (line 342) | def test_successful_pull_through(self): method test_pull_through_with_digest (line 366) | def test_pull_through_with_digest(self): method test_pull_through_image_not_found_failure (line 389) | def test_pull_through_image_not_found_failure(self): method test_pull_through_repository_not_found_failure (line 410) | def test_pull_through_repository_not_found_failure(self): method test_pull_through_other_failure (line 431) | def test_pull_through_other_failure(self): method test_pull_through_no_images_no_failures (line 452) | def test_pull_through_no_images_no_failures(self): method test_pull_through_repository_not_found_exception (line 468) | def test_pull_through_repository_not_found_exception(self): method test_pull_through_image_not_found_exception (line 489) | def test_pull_through_image_not_found_exception(self): method test_pull_through_access_denied_exception (line 510) | def test_pull_through_access_denied_exception(self): method test_pull_through_other_client_error (line 531) | def test_pull_through_other_client_error(self): method test_pull_through_unexpected_exception (line 552) | def test_pull_through_unexpected_exception(self): method test_pull_through_default_tag (line 565) | def test_pull_through_default_tag(self): class TestIsPullThroughCacheRepository (line 584) | class TestIsPullThroughCacheRepository: method test_other_client_error_fallback (line 587) | def test_other_client_error_fallback(self): method test_unexpected_exception_fallback (line 609) | def test_unexpected_exception_fallback(self): method test_pagination_handling (line 622) | def test_pagination_handling(self): class TestCheckPullThroughCacheHealthOmicsUsability (line 646) | class TestCheckPullThroughCacheHealthOmicsUsability: method test_no_matching_rule (line 649) | def test_no_matching_rule(self): method test_matching_rule_with_full_permissions (line 665) | def test_matching_rule_with_full_permissions(self): method test_registry_policy_not_found (line 715) | def test_registry_policy_not_found(self): method test_registry_policy_other_error (line 740) | def test_registry_policy_other_error(self): method test_template_not_found (line 762) | def test_template_not_found(self): method test_template_other_error (line 783) | def test_template_other_error(self): method test_unexpected_exception (line 803) | def test_unexpected_exception(self): method test_pagination_handling (line 817) | def test_pagination_handling(self): class TestCheckContainerAvailabilityPullThroughInitiation (line 844) | class TestCheckContainerAvailabilityPullThroughInitiation: method test_initiate_pull_through_on_repo_not_found_success (line 848) | async def test_initiate_pull_through_on_repo_not_found_success(self): method test_initiate_pull_through_on_repo_not_found_not_usable (line 918) | async def test_initiate_pull_through_on_repo_not_found_not_usable(self): method test_initiate_pull_through_on_image_not_found_success (line 959) | async def test_initiate_pull_through_on_image_not_found_success(self): method test_initiate_pull_through_failure (line 1023) | async def test_initiate_pull_through_failure(self): method test_no_initiate_when_not_ptc (line 1088) | async def test_no_initiate_when_not_ptc(self): class TestCheckContainerAvailabilityEdgeCases (line 1119) | class TestCheckContainerAvailabilityEdgeCases: method test_empty_image_details_response (line 1123) | async def test_empty_image_details_response(self): method test_botocore_error_handling (line 1147) | async def test_botocore_error_handling(self): method test_unexpected_exception_handling (line 1171) | async def test_unexpected_exception_handling(self): class TestListECRRepositoriesEdgeCases (line 1200) | class TestListECRRepositoriesEdgeCases: method test_unexpected_exception (line 1204) | async def test_unexpected_exception(self): class TestValidateHealthOmicsECRConfigAdditional (line 1231) | class TestValidateHealthOmicsECRConfigAdditional: method test_registry_policy_missing_actions (line 1235) | async def test_registry_policy_missing_actions(self): method test_template_without_policy (line 1285) | async def test_template_without_policy(self): method test_template_missing_permissions (line 1322) | async def test_template_missing_permissions(self): method test_unexpected_exception (line 1376) | async def test_unexpected_exception(self): class TestCreateContainerRegistryMap (line 1398) | class TestCreateContainerRegistryMap: method test_successful_map_creation_with_discovered_caches (line 1402) | async def test_successful_map_creation_with_discovered_caches(self): method test_map_creation_with_explicit_account_and_region (line 1478) | async def test_map_creation_with_explicit_account_and_region(self): method test_map_creation_without_ptc_discovery (line 1504) | async def test_map_creation_without_ptc_discovery(self): method test_map_creation_with_image_mappings (line 1539) | async def test_map_creation_with_image_mappings(self): method test_map_creation_with_invalid_registry_mapping (line 1573) | async def test_map_creation_with_invalid_registry_mapping(self): method test_map_creation_with_invalid_image_mapping (line 1606) | async def test_map_creation_with_invalid_image_mapping(self): method test_map_creation_account_id_error (line 1638) | async def test_map_creation_account_id_error(self): method test_map_creation_ptc_discovery_error (line 1660) | async def test_map_creation_ptc_discovery_error(self): method test_map_creation_merge_additional_mappings (line 1696) | async def test_map_creation_merge_additional_mappings(self): class TestListPullThroughCacheRulesEdgeCases (line 1788) | class TestListPullThroughCacheRulesEdgeCases: method test_unexpected_exception_handling (line 1792) | async def test_unexpected_exception_handling(self): class TestGrantHealthOmicsRepositoryAccessEdgeCases (line 1817) | class TestGrantHealthOmicsRepositoryAccessEdgeCases: method test_policy_with_single_statement_dict (line 1821) | async def test_policy_with_single_statement_dict(self): method test_policy_with_healthomics_service_in_list (line 1858) | async def test_policy_with_healthomics_service_in_list(self): method test_policy_with_healthomics_as_string_principal (line 1898) | async def test_policy_with_healthomics_as_string_principal(self): method test_verify_policy_update_fails (line 1937) | async def test_verify_policy_update_fails(self): method test_other_client_error_on_get_policy (line 1970) | async def test_other_client_error_on_get_policy(self): method test_other_client_error_on_set_policy (line 1995) | async def test_other_client_error_on_set_policy(self): class TestCreatePullThroughCacheEdgeCases (line 2029) | class TestCreatePullThroughCacheEdgeCases: method test_template_update_fails_but_has_policy (line 2033) | async def test_template_update_fails_but_has_policy(self): method test_template_update_fails_no_policy (line 2090) | async def test_template_update_fails_no_policy(self): method test_template_describe_fails_after_update_failure (line 2138) | async def test_template_describe_fails_after_update_failure(self): FILE: src/aws-healthomics-mcp-server/tests/test_ecr_models.py function container_image_strategy (line 82) | def container_image_strategy(draw): function available_container_response_strategy (line 96) | def available_container_response_strategy(draw): class TestContainerImageResponseCompleteness (line 114) | class TestContainerImageResponseCompleteness: method test_image_digest_format_when_available (line 125) | def test_image_digest_format_when_available(self, response: ContainerA... method test_image_size_bytes_type_when_available (line 150) | def test_image_size_bytes_type_when_available(self, response: Containe... method test_pushed_at_type_when_available (line 166) | def test_pushed_at_type_when_available(self, response: ContainerAvaila... method test_complete_response_structure_when_available (line 181) | def test_complete_response_structure_when_available( class TestContainerImageModel (line 219) | class TestContainerImageModel: method test_container_image_with_all_fields (line 222) | def test_container_image_with_all_fields(self): method test_container_image_with_minimal_fields (line 241) | def test_container_image_with_minimal_fields(self): method test_container_image_exists_false (line 255) | def test_container_image_exists_false(self): class TestContainerAvailabilityResponseModel (line 266) | class TestContainerAvailabilityResponseModel: method test_available_response_with_image (line 269) | def test_available_response_with_image(self): method test_unavailable_response_without_image (line 294) | def test_unavailable_response_without_image(self): method test_response_repository_not_exists (line 309) | def test_response_repository_not_exists(self): method test_response_pull_through_cache (line 322) | def test_response_pull_through_cache(self): class TestUpstreamRegistryEnum (line 341) | class TestUpstreamRegistryEnum: method test_upstream_registry_values (line 344) | def test_upstream_registry_values(self): method test_upstream_registry_urls_mapping (line 350) | def test_upstream_registry_urls_mapping(self): class TestHealthOmicsAccessStatusEnum (line 357) | class TestHealthOmicsAccessStatusEnum: method test_healthomics_access_status_values (line 360) | def test_healthomics_access_status_values(self): class TestECRRepositoryModel (line 367) | class TestECRRepositoryModel: method test_ecr_repository_with_all_fields (line 370) | def test_ecr_repository_with_all_fields(self): method test_ecr_repository_default_values (line 385) | def test_ecr_repository_default_values(self): class TestValidationModels (line 398) | class TestValidationModels: method test_validation_issue (line 401) | def test_validation_issue(self): method test_validation_result_valid (line 415) | def test_validation_result_valid(self): method test_validation_result_with_issues (line 429) | def test_validation_result_with_issues(self): class TestPullThroughCacheModels (line 459) | class TestPullThroughCacheModels: method test_pull_through_cache_rule (line 462) | def test_pull_through_cache_rule(self): method test_pull_through_cache_rule_defaults (line 481) | def test_pull_through_cache_rule_defaults(self): method test_pull_through_cache_list_response (line 495) | def test_pull_through_cache_list_response(self): method test_pull_through_cache_list_response_empty (line 516) | def test_pull_through_cache_list_response_empty(self): class TestECRRepositoryListResponse (line 524) | class TestECRRepositoryListResponse: method test_ecr_repository_list_response (line 527) | def test_ecr_repository_list_response(self): method test_ecr_repository_list_response_empty (line 552) | def test_ecr_repository_list_response_empty(self): FILE: src/aws-healthomics-mcp-server/tests/test_ecr_tools.py function ecr_repository_strategy (line 110) | def ecr_repository_strategy(draw) -> Dict[str, Any]: function ecr_describe_repositories_response_strategy (line 129) | def ecr_describe_repositories_response_strategy(draw) -> Dict[str, Any]: function ecr_response_with_token_strategy (line 154) | def ecr_response_with_token_strategy(draw) -> Dict[str, Any]: function ecr_response_without_token_strategy (line 173) | def ecr_response_without_token_strategy(draw) -> Dict[str, Any]: function pull_through_cache_repository_strategy (line 208) | def pull_through_cache_repository_strategy(draw) -> str: function non_pull_through_cache_repository_strategy (line 222) | def non_pull_through_cache_repository_strategy(draw) -> str: function _create_mock_ptc_rules_response (line 260) | def _create_mock_ptc_rules_response(prefixes: list) -> dict: function _create_mock_ecr_client (line 270) | def _create_mock_ecr_client() -> MagicMock: class TestPullThroughCacheDetection (line 304) | class TestPullThroughCacheDetection: method test_pull_through_cache_prefix_detected (line 313) | def test_pull_through_cache_prefix_detected(self, repository_name: str): method test_non_pull_through_cache_prefix_not_detected (line 342) | def test_non_pull_through_cache_prefix_not_detected(self, repository_n... method test_all_default_prefixes_detected (line 373) | def test_all_default_prefixes_detected(self, prefix: str, suffix: str): method test_prefix_without_slash_not_detected (line 403) | def test_prefix_without_slash_not_detected(self, prefix: str): method test_custom_prefix_detected_when_rule_exists (line 429) | def test_custom_prefix_detected_when_rule_exists(self): method test_fallback_to_default_prefixes_on_access_denied (line 463) | def test_fallback_to_default_prefixes_on_access_denied(self): method test_no_rules_returns_false (line 498) | def test_no_rules_returns_false(self): method test_check_container_availability_sets_is_pull_through_cache_true (line 526) | async def test_check_container_availability_sets_is_pull_through_cache... method test_check_container_availability_sets_is_pull_through_cache_false (line 573) | async def test_check_container_availability_sets_is_pull_through_cache... method test_ptc_detection_when_image_not_found (line 620) | async def test_ptc_detection_when_image_not_found(self, repository_nam... method test_ptc_detection_when_repository_not_found (line 667) | async def test_ptc_detection_when_repository_not_found(self, repositor... method test_ptc_detection_with_various_tags (line 718) | async def test_ptc_detection_with_various_tags(self, repository_name: ... class TestPaginationTokenPreservation (line 768) | class TestPaginationTokenPreservation: method test_next_token_preserved_when_present (line 779) | async def test_next_token_preserved_when_present(self, aws_response: D... method test_next_token_none_when_not_present (line 822) | async def test_next_token_none_when_not_present(self, aws_response: Di... method test_next_token_matches_aws_response (line 861) | async def test_next_token_matches_aws_response(self, aws_response: Dic... method test_input_token_passed_to_aws_and_output_preserved (line 904) | async def test_input_token_passed_to_aws_and_output_preserved( method test_token_preserved_regardless_of_repository_count (line 955) | async def test_token_preserved_regardless_of_repository_count( method test_token_preserved_regardless_of_filter (line 1015) | async def test_token_preserved_regardless_of_filter(self, token: str, ... function _create_policy_not_found_exception (line 1070) | def _create_policy_not_found_exception(): function _create_access_denied_exception (line 1083) | def _create_access_denied_exception(operation_name: str = 'DescribeRepos... function _create_client_error (line 1096) | def _create_client_error(code: str, message: str, operation_name: str = ... function _create_healthomics_policy (line 1109) | def _create_healthomics_policy() -> str: function _create_partial_healthomics_policy (line 1127) | def _create_partial_healthomics_policy() -> str: function _create_sample_repository (line 1145) | def _create_sample_repository( class TestListECRRepositoriesUnit (line 1171) | class TestListECRRepositoriesUnit: method test_successful_listing_single_repository (line 1183) | async def test_successful_listing_single_repository(self): method test_successful_listing_multiple_repositories (line 1214) | async def test_successful_listing_multiple_repositories(self): method test_empty_repository_list (line 1250) | async def test_empty_repository_list(self): method test_pagination_input_token_passed_to_api (line 1278) | async def test_pagination_input_token_passed_to_api(self): method test_pagination_output_token_returned (line 1308) | async def test_pagination_output_token_returned(self): method test_pagination_no_token_on_last_page (line 1337) | async def test_pagination_no_token_on_last_page(self): method test_max_results_passed_to_api (line 1365) | async def test_max_results_passed_to_api(self): method test_error_access_denied_exception (line 1393) | async def test_error_access_denied_exception(self): method test_error_other_client_error (line 1418) | async def test_error_other_client_error(self): method test_error_botocore_error (line 1446) | async def test_error_botocore_error(self): method test_healthomics_accessible_repository (line 1473) | async def test_healthomics_accessible_repository(self): method test_healthomics_not_accessible_no_policy (line 1504) | async def test_healthomics_not_accessible_no_policy(self): method test_healthomics_not_accessible_partial_permissions (line 1533) | async def test_healthomics_not_accessible_partial_permissions(self): method test_filter_healthomics_accessible_true (line 1564) | async def test_filter_healthomics_accessible_true(self): method test_filter_healthomics_accessible_false (line 1604) | async def test_filter_healthomics_accessible_false(self): method test_filter_healthomics_accessible_empty_result (line 1642) | async def test_filter_healthomics_accessible_empty_result(self): method test_repository_policy_check_error_marks_unknown (line 1673) | async def test_repository_policy_check_error_marks_unknown(self): method test_repository_fields_populated_correctly (line 1706) | async def test_repository_fields_populated_correctly(self): method test_mixed_accessibility_statuses (line 1747) | async def test_mixed_accessibility_statuses(self): class TestCheckContainerAvailabilityUnit (line 1805) | class TestCheckContainerAvailabilityUnit: method test_image_exists_returns_details (line 1822) | async def test_image_exists_returns_details(self): method test_image_exists_with_specific_tag (line 1862) | async def test_image_exists_with_specific_tag(self): method test_image_exists_with_digest (line 1896) | async def test_image_exists_with_digest(self): method test_image_not_found_returns_clear_message (line 1939) | async def test_image_not_found_returns_clear_message(self): method test_image_not_found_empty_image_details (line 1975) | async def test_image_not_found_empty_image_details(self): method test_repository_not_found (line 2007) | async def test_repository_not_found(self): method test_repository_not_found_ptc_message (line 2043) | async def test_repository_not_found_ptc_message(self): method test_ptc_detection_docker_hub (line 2083) | async def test_ptc_detection_docker_hub(self): method test_ptc_detection_quay (line 2116) | async def test_ptc_detection_quay(self): method test_ptc_detection_ecr_public (line 2149) | async def test_ptc_detection_ecr_public(self): method test_non_ptc_repository (line 2182) | async def test_non_ptc_repository(self): method test_ptc_image_not_found_message (line 2215) | async def test_ptc_image_not_found_message(self): method test_empty_repository_name (line 2254) | async def test_empty_repository_name(self): method test_whitespace_only_repository_name (line 2273) | async def test_whitespace_only_repository_name(self): method test_invalid_digest_format_no_sha256_prefix (line 2292) | async def test_invalid_digest_format_no_sha256_prefix(self): method test_invalid_digest_format_wrong_prefix (line 2310) | async def test_invalid_digest_format_wrong_prefix(self): method test_valid_digest_format_accepted (line 2328) | async def test_valid_digest_format_accepted(self): method test_access_denied_exception (line 2368) | async def test_access_denied_exception(self): method test_other_client_error (line 2398) | async def test_other_client_error(self): method test_botocore_error (line 2428) | async def test_botocore_error(self): method test_unexpected_exception (line 2453) | async def test_unexpected_exception(self): method test_api_called_with_tag (line 2482) | async def test_api_called_with_tag(self): method test_api_called_with_digest_takes_precedence (line 2518) | async def test_api_called_with_digest_takes_precedence(self): method test_default_tag_is_latest (line 2556) | async def test_default_tag_is_latest(self): method test_repository_name_trimmed (line 2591) | async def test_repository_name_trimmed(self): method test_healthomics_accessible_when_policy_grants_permissions (line 2631) | async def test_healthomics_accessible_when_policy_grants_permissions(s... method test_healthomics_not_accessible_when_no_policy (line 2667) | async def test_healthomics_not_accessible_when_no_policy(self): method test_healthomics_not_accessible_when_policy_missing_permissions (line 2714) | async def test_healthomics_not_accessible_when_policy_missing_permissi... method test_healthomics_unknown_when_policy_check_fails (line 2765) | async def test_healthomics_unknown_when_policy_check_fails(self): method test_healthomics_accessible_with_wildcard_actions (line 2810) | async def test_healthomics_accessible_with_wildcard_actions(self): function _create_sample_ptc_rule (line 2869) | def _create_sample_ptc_rule( function _create_registry_policy_not_found_exception (line 2886) | def _create_registry_policy_not_found_exception(): function _create_template_not_found_exception (line 2897) | def _create_template_not_found_exception(): function _create_healthomics_registry_policy (line 2908) | def _create_healthomics_registry_policy() -> str: function _create_healthomics_template_policy (line 2926) | def _create_healthomics_template_policy() -> str: class TestListPullThroughCacheRulesUnit (line 2944) | class TestListPullThroughCacheRulesUnit: method test_successful_listing_single_rule (line 2961) | async def test_successful_listing_single_rule(self): method test_successful_listing_multiple_rules (line 2996) | async def test_successful_listing_multiple_rules(self): method test_rule_includes_upstream_registry_url (line 3033) | async def test_rule_includes_upstream_registry_url(self): method test_empty_rules_returns_empty_list (line 3068) | async def test_empty_rules_returns_empty_list(self): method test_empty_rules_no_registry_policy_check (line 3094) | async def test_empty_rules_no_registry_policy_check(self): method test_healthomics_usable_when_all_permissions_granted (line 3123) | async def test_healthomics_usable_when_all_permissions_granted(self): method test_healthomics_not_usable_no_registry_policy (line 3165) | async def test_healthomics_not_usable_no_registry_policy(self): method test_healthomics_not_usable_no_template (line 3203) | async def test_healthomics_not_usable_no_template(self): method test_healthomics_not_usable_template_missing_permissions (line 3239) | async def test_healthomics_not_usable_template_missing_permissions(self): method test_registry_policy_checked_once_for_all_rules (line 3281) | async def test_registry_policy_checked_once_for_all_rules(self): method test_pagination_input_token_passed_to_api (line 3320) | async def test_pagination_input_token_passed_to_api(self): method test_pagination_output_token_returned (line 3354) | async def test_pagination_output_token_returned(self): method test_pagination_no_token_on_last_page (line 3387) | async def test_pagination_no_token_on_last_page(self): method test_max_results_passed_to_api (line 3419) | async def test_max_results_passed_to_api(self): method test_error_access_denied_exception (line 3450) | async def test_error_access_denied_exception(self): method test_error_other_client_error (line 3482) | async def test_error_other_client_error(self): method test_error_botocore_error (line 3514) | async def test_error_botocore_error(self): method test_registry_policy_error_handled_gracefully (line 3540) | async def test_registry_policy_error_handled_gracefully(self): method test_template_error_handled_gracefully (line 3581) | async def test_template_error_handled_gracefully(self): method test_rule_with_credential_arn (line 3626) | async def test_rule_with_credential_arn(self): method test_rule_without_credential_arn (line 3660) | async def test_rule_without_credential_arn(self): method test_mixed_rules_with_and_without_credentials (line 3691) | async def test_mixed_rules_with_and_without_credentials(self): method test_rule_fields_populated_correctly (line 3734) | async def test_rule_fields_populated_correctly(self): method test_template_checked_for_each_rule (line 3780) | async def test_template_checked_for_each_rule(self): class TestRegistryTypeToURLMapping (line 3825) | class TestRegistryTypeToURLMapping: method test_upstream_registry_urls_constant_mapping (line 3844) | def test_upstream_registry_urls_constant_mapping(self, registry_type: ... method test_all_registry_types_have_url_mapping (line 3862) | def test_all_registry_types_have_url_mapping(self, registry_type: str): method test_create_ptc_uses_correct_url_for_registry_type (line 3878) | async def test_create_ptc_uses_correct_url_for_registry_type(self, reg... method test_docker_hub_uses_correct_url_with_credentials (line 3941) | async def test_docker_hub_uses_correct_url_with_credentials(self, cred... method test_url_mapping_in_successful_response (line 3997) | async def test_url_mapping_in_successful_response(self, registry_type:... method test_url_mapping_when_rule_already_exists (line 4052) | async def test_url_mapping_when_rule_already_exists(self, registry_typ... method test_url_mapping_completeness (line 4121) | def test_url_mapping_completeness(self, registry_type: UpstreamRegistry): method test_url_mapping_format_validity (line 4140) | def test_url_mapping_format_validity(self, registry_type: UpstreamRegi... class TestCredentialRequirementByRegistryType (line 4169) | class TestCredentialRequirementByRegistryType: method test_docker_hub_without_credentials_rejected (line 4199) | async def test_docker_hub_without_credentials_rejected(self, data): method test_docker_hub_with_credentials_accepted (line 4248) | async def test_docker_hub_with_credentials_accepted(self, credential_a... method test_quay_succeeds_regardless_of_credentials (line 4311) | async def test_quay_succeeds_regardless_of_credentials(self, credentia... method test_quay_without_credentials_proceeds_to_api (line 4363) | async def test_quay_without_credentials_proceeds_to_api(self, data): method test_ecr_public_succeeds_regardless_of_credentials (line 4428) | async def test_ecr_public_succeeds_regardless_of_credentials( method test_ecr_public_without_credentials_proceeds_to_api (line 4483) | async def test_ecr_public_without_credentials_proceeds_to_api(self, da... method test_non_docker_hub_registries_accept_any_credential_state (line 4551) | async def test_non_docker_hub_registries_accept_any_credential_state( method test_docker_hub_credential_requirement_independent_of_prefix (line 4625) | async def test_docker_hub_credential_requirement_independent_of_prefix( method test_credential_validation_by_registry_type (line 4659) | async def test_credential_validation_by_registry_type( method test_docker_hub_rejection_message_is_informative (line 4738) | async def test_docker_hub_rejection_message_is_informative(self, data): class TestCreatePullThroughCacheForHealthOmicsUnit (line 4776) | class TestCreatePullThroughCacheForHealthOmicsUnit: method test_successful_creation_docker_hub (line 4795) | async def test_successful_creation_docker_hub(self): method test_successful_creation_quay (line 4836) | async def test_successful_creation_quay(self): method test_successful_creation_ecr_public (line 4876) | async def test_successful_creation_ecr_public(self): method test_docker_hub_requires_credential_arn (line 4920) | async def test_docker_hub_requires_credential_arn(self): method test_docker_hub_with_credential_arn_succeeds (line 4942) | async def test_docker_hub_with_credential_arn_succeeds(self): method test_existing_rule_handling (line 4984) | async def test_existing_rule_handling(self): method test_existing_rule_with_failed_describe (line 5037) | async def test_existing_rule_with_failed_describe(self): method test_registry_policy_update_failure (line 5081) | async def test_registry_policy_update_failure(self): method test_repository_template_creation_failure (line 5124) | async def test_repository_template_creation_failure(self): method test_both_permission_updates_fail (line 5167) | async def test_both_permission_updates_fail(self): method test_invalid_registry_type (line 5211) | async def test_invalid_registry_type(self): method test_empty_registry_type (line 5231) | async def test_empty_registry_type(self): method test_access_denied_error (line 5254) | async def test_access_denied_error(self): method test_invalid_parameter_exception (line 5287) | async def test_invalid_parameter_exception(self): method test_limit_exceeded_exception (line 5320) | async def test_limit_exceeded_exception(self): method test_generic_client_error (line 5353) | async def test_generic_client_error(self): method test_custom_prefix_used (line 5391) | async def test_custom_prefix_used(self): method test_default_prefix_used_when_not_provided (line 5431) | async def test_default_prefix_used_when_not_provided(self): method test_response_structure_on_success (line 5473) | async def test_response_structure_on_success(self): method test_response_structure_on_failure (line 5524) | async def test_response_structure_on_failure(self): method test_healthomics_usable_flag_when_all_permissions_succeed (line 5550) | async def test_healthomics_usable_flag_when_all_permissions_succeed(se... method test_healthomics_usable_flag_when_permissions_fail (line 5589) | async def test_healthomics_usable_flag_when_permissions_fail(self): method test_existing_registry_policy_updated (line 5631) | async def test_existing_registry_policy_updated(self): method test_template_already_exists_updated (line 5678) | async def test_template_already_exists_updated(self): method test_quay_with_optional_credentials (line 5727) | async def test_quay_with_optional_credentials(self): method test_botocore_error_handling (line 5767) | async def test_botocore_error_handling(self): function pull_through_cache_rule_strategy (line 5823) | def pull_through_cache_rule_strategy(draw) -> Dict[str, Any]: function registry_policy_scenario_strategy (line 5840) | def registry_policy_scenario_strategy(draw) -> Dict[str, Any]: function repository_template_scenario_strategy (line 5913) | def repository_template_scenario_strategy(draw) -> Dict[str, Any]: function validation_scenario_strategy (line 5997) | def validation_scenario_strategy(draw) -> Dict[str, Any]: class TestValidationIssueRemediation (line 6023) | class TestValidationIssueRemediation: method test_all_validation_issues_have_non_empty_remediation (line 6033) | async def test_all_validation_issues_have_non_empty_remediation( method test_remediation_contains_actionable_guidance (line 6116) | async def test_remediation_contains_actionable_guidance(self, scenario... method test_no_ptc_rules_issue_has_remediation (line 6217) | async def test_no_ptc_rules_issue_has_remediation(self): method test_missing_registry_policy_issue_has_remediation (line 6265) | async def test_missing_registry_policy_issue_has_remediation(self): method test_missing_template_issue_has_remediation (line 6322) | async def test_missing_template_issue_has_remediation(self): method test_valid_config_info_issue_has_remediation (line 6391) | async def test_valid_config_info_issue_has_remediation(self): method test_remediation_mentions_healthomics_for_permission_issues (line 6478) | async def test_remediation_mentions_healthomics_for_permission_issues( class TestValidateHealthomicsECRConfigUnit (line 6584) | class TestValidateHealthomicsECRConfigUnit: method test_fully_valid_configuration (line 6597) | async def test_fully_valid_configuration(self): method test_missing_registry_policy (line 6671) | async def test_missing_registry_policy(self): method test_missing_repository_templates (line 6727) | async def test_missing_repository_templates(self): method test_incorrect_template_permissions (line 6798) | async def test_incorrect_template_permissions(self): method test_no_pull_through_cache_rules (line 6882) | async def test_no_pull_through_cache_rules(self): method test_access_denied_error (line 6919) | async def test_access_denied_error(self): method test_botocore_error_handling (line 6948) | async def test_botocore_error_handling(self): method test_multiple_ptc_rules_validation (line 6974) | async def test_multiple_ptc_rules_validation(self): method test_registry_policy_missing_actions (line 7060) | async def test_registry_policy_missing_actions(self): method test_template_without_policy (line 7124) | async def test_template_without_policy(self): method test_all_issues_have_remediation (line 7190) | async def test_all_issues_have_remediation(self): method test_pagination_of_ptc_rules (line 7245) | async def test_pagination_of_ptc_rules(self): class TestGrantHealthOmicsRepositoryAccessUnit (line 7346) | class TestGrantHealthOmicsRepositoryAccessUnit: method test_grant_access_creates_new_policy (line 7359) | async def test_grant_access_creates_new_policy(self): method test_grant_access_updates_existing_policy (line 7426) | async def test_grant_access_updates_existing_policy(self): method test_grant_access_already_accessible (line 7494) | async def test_grant_access_already_accessible(self): method test_grant_access_repository_not_found (line 7524) | async def test_grant_access_repository_not_found(self): method test_grant_access_access_denied (line 7556) | async def test_grant_access_access_denied(self): method test_grant_access_empty_repository_name (line 7598) | async def test_grant_access_empty_repository_name(self): method test_grant_access_replaces_existing_healthomics_statement (line 7614) | async def test_grant_access_replaces_existing_healthomics_statement(se... FILE: src/aws-healthomics-mcp-server/tests/test_ecr_utils.py function valid_healthomics_policy_strategy (line 115) | def valid_healthomics_policy_strategy(draw) -> str: function invalid_healthomics_policy_strategy (line 165) | def invalid_healthomics_policy_strategy(draw) -> str: function policy_with_wildcard_principal_strategy (line 214) | def policy_with_wildcard_principal_strategy(draw) -> str: function multi_statement_policy_strategy (line 242) | def multi_statement_policy_strategy(draw) -> str: class TestPermissionCheckingCorrectness (line 314) | class TestPermissionCheckingCorrectness: method test_valid_policy_returns_accessible (line 324) | def test_valid_policy_returns_accessible(self, policy_text: str): method test_invalid_policy_returns_not_accessible (line 344) | def test_invalid_policy_returns_not_accessible(self, policy_text: str): method test_wildcard_principal_returns_accessible (line 378) | def test_wildcard_principal_returns_accessible(self, policy_text: str): method test_multi_statement_policy_with_valid_statement_returns_accessible (line 397) | def test_multi_statement_policy_with_valid_statement_returns_accessible( method test_none_policy_returns_unknown (line 419) | def test_none_policy_returns_unknown(self, policy_text: None): method test_invalid_json_returns_unknown (line 438) | def test_invalid_json_returns_unknown(self, invalid_json: str): method test_missing_permissions_are_correctly_identified (line 471) | def test_missing_permissions_are_correctly_identified(self, actions: L... function _is_valid_json (line 517) | def _is_valid_json(s: str) -> bool: function _principal_matches_healthomics (line 526) | def _principal_matches_healthomics(principal: Any) -> bool: function valid_registry_policy_strategy (line 576) | def valid_registry_policy_strategy(draw) -> str: function invalid_registry_policy_strategy (line 610) | def invalid_registry_policy_strategy(draw) -> str: function valid_template_policy_strategy (line 655) | def valid_template_policy_strategy(draw) -> str: function invalid_template_policy_strategy (line 689) | def invalid_template_policy_strategy(draw) -> str: class TestHealthOmicsUsabilityEvaluation (line 751) | class TestHealthOmicsUsabilityEvaluation: method test_all_conditions_met_returns_usable (line 769) | def test_all_conditions_met_returns_usable( method test_invalid_registry_policy_returns_not_usable (line 800) | def test_invalid_registry_policy_returns_not_usable( method test_invalid_template_policy_returns_not_usable (line 827) | def test_invalid_template_policy_returns_not_usable( method test_no_template_returns_not_usable (line 855) | def test_no_template_returns_not_usable(self, registry_policy: str, pr... method test_no_registry_policy_returns_not_usable (line 881) | def test_no_registry_policy_returns_not_usable( method test_both_policies_none_returns_not_usable (line 905) | def test_both_policies_none_returns_not_usable(self, prefix: Optional[... method test_both_policies_invalid_returns_not_usable (line 932) | def test_both_policies_invalid_returns_not_usable( method test_usability_iff_all_permissions_present (line 960) | def test_usability_iff_all_permissions_present( method test_result_contains_all_required_fields (line 1056) | def test_result_contains_all_required_fields(self, registry_policy: st... method test_usability_logical_conjunction (line 1096) | def test_usability_logical_conjunction( FILE: src/aws-healthomics-mcp-server/tests/test_error_utils.py function test_handle_tool_error (line 23) | async def test_handle_tool_error(): function test_handle_tool_error_with_exception_details (line 44) | async def test_handle_tool_error_with_exception_details(): FILE: src/aws-healthomics-mcp-server/tests/test_file_association_engine.py class TestFileAssociationEngine (line 26) | class TestFileAssociationEngine: method setup_method (line 29) | def setup_method(self): method create_test_file (line 34) | def create_test_file( method test_bam_index_associations (line 53) | def test_bam_index_associations(self): method test_bam_index_alternative_naming (line 70) | def test_bam_index_alternative_naming(self): method test_cram_index_associations (line 85) | def test_cram_index_associations(self): method test_fastq_pair_associations (line 101) | def test_fastq_pair_associations(self): method test_fastq_dot_notation_associations (line 129) | def test_fastq_dot_notation_associations(self): method test_fasta_index_associations (line 155) | def test_fasta_index_associations(self): method test_vcf_index_associations (line 188) | def test_vcf_index_associations(self): method test_bwa_index_collections (line 219) | def test_bwa_index_collections(self): method test_bwa_index_64bit_variants (line 245) | def test_bwa_index_64bit_variants(self): method test_mixed_bwa_index_variants (line 267) | def test_mixed_bwa_index_variants(self): method test_normalize_bwa_base_name (line 286) | def test_normalize_bwa_base_name(self): method test_healthomics_reference_associations (line 306) | def test_healthomics_reference_associations(self): method test_healthomics_sequence_store_associations (line 332) | def test_healthomics_sequence_store_associations(self): method test_sequence_store_index_associations (line 372) | def test_sequence_store_index_associations(self): method test_no_associations (line 402) | def test_no_associations(self): method test_partial_associations (line 417) | def test_partial_associations(self): method test_multiple_file_groups (line 438) | def test_multiple_file_groups(self): method test_association_score_bonus (line 464) | def test_association_score_bonus(self): method test_case_insensitive_associations (line 511) | def test_case_insensitive_associations(self): method test_complex_file_paths (line 523) | def test_complex_file_paths(self): method test_edge_cases (line 540) | def test_edge_cases(self): method test_determine_group_type (line 560) | def test_determine_group_type(self): method test_regex_error_handling (line 583) | def test_regex_error_handling(self): method test_invalid_file_type_in_determine_group_type (line 601) | def test_invalid_file_type_in_determine_group_type(self): method test_healthomics_associations_edge_cases (line 610) | def test_healthomics_associations_edge_cases(self): method test_sequence_store_without_index_info (line 627) | def test_sequence_store_without_index_info(self): method test_compiled_patterns_initialization (line 644) | def test_compiled_patterns_initialization(self): method test_extension_pattern_map_initialization (line 660) | def test_extension_pattern_map_initialization(self): method test_get_relevant_pattern_indices_bam (line 675) | def test_get_relevant_pattern_indices_bam(self): method test_get_relevant_pattern_indices_fastq (line 697) | def test_get_relevant_pattern_indices_fastq(self): method test_get_relevant_pattern_indices_unknown_extension (line 715) | def test_get_relevant_pattern_indices_unknown_extension(self): method test_get_relevant_pattern_indices_case_insensitive (line 726) | def test_get_relevant_pattern_indices_case_insensitive(self): method test_compiled_patterns_preserve_functionality (line 737) | def test_compiled_patterns_preserve_functionality(self): method test_performance_with_many_files (line 778) | def test_performance_with_many_files(self): method test_extension_map_coverage (line 803) | def test_extension_map_coverage(self): method test_pattern_optimization_reduces_checks (line 834) | def test_pattern_optimization_reduces_checks(self): method test_compiled_patterns_handle_special_characters (line 850) | def test_compiled_patterns_handle_special_characters(self): method test_build_extension_pattern_map_completeness (line 864) | def test_build_extension_pattern_map_completeness(self): method test_pattern_matching_with_optimization (line 881) | def test_pattern_matching_with_optimization(self): method test_multiple_extensions_in_path (line 920) | def test_multiple_extensions_in_path(self): method test_fasta_with_bwa_and_dict (line 937) | def test_fasta_with_bwa_and_dict(self): method test_fasta_with_only_bwa_indexes (line 955) | def test_fasta_with_only_bwa_indexes(self): method test_duplicate_association_prevention (line 969) | def test_duplicate_association_prevention(self): method test_regex_error_in_pattern_matching (line 983) | def test_regex_error_in_pattern_matching(self): method test_sequence_store_with_index_info_metadata (line 1000) | def test_sequence_store_with_index_info_metadata(self): method test_non_sequence_store_omics_files (line 1018) | def test_non_sequence_store_omics_files(self): method test_extension_pattern_map_with_compressed_files (line 1034) | def test_extension_pattern_map_with_compressed_files(self): method test_all_pattern_types_have_compiled_versions (line 1049) | def test_all_pattern_types_have_compiled_versions(self): FILE: src/aws-healthomics-mcp-server/tests/test_file_type_detector.py class TestFileTypeDetector (line 21) | class TestFileTypeDetector: method test_detect_file_type_fastq_files (line 24) | def test_detect_file_type_fastq_files(self): method test_detect_file_type_fasta_files (line 42) | def test_detect_file_type_fasta_files(self): method test_detect_file_type_fna_files (line 59) | def test_detect_file_type_fna_files(self): method test_detect_file_type_alignment_files (line 72) | def test_detect_file_type_alignment_files(self): method test_detect_file_type_variant_files (line 86) | def test_detect_file_type_variant_files(self): method test_detect_file_type_annotation_files (line 102) | def test_detect_file_type_annotation_files(self): method test_detect_file_type_index_files (line 123) | def test_detect_file_type_index_files(self): method test_detect_file_type_bwa_index_files (line 148) | def test_detect_file_type_bwa_index_files(self): method test_detect_file_type_unknown_files (line 167) | def test_detect_file_type_unknown_files(self): method test_detect_file_type_empty_or_none (line 184) | def test_detect_file_type_empty_or_none(self): method test_detect_file_type_longest_match_priority (line 189) | def test_detect_file_type_longest_match_priority(self): method test_is_compressed_file (line 203) | def test_is_compressed_file(self): method test_is_not_compressed_file (line 221) | def test_is_not_compressed_file(self): method test_is_compressed_file_empty_or_none (line 236) | def test_is_compressed_file_empty_or_none(self): method test_get_base_file_type (line 241) | def test_get_base_file_type(self): method test_get_base_file_type_empty_or_none (line 257) | def test_get_base_file_type_empty_or_none(self): method test_is_genomics_file (line 262) | def test_is_genomics_file(self): method test_is_not_genomics_file (line 278) | def test_is_not_genomics_file(self): method test_get_file_category (line 292) | def test_get_file_category(self): method test_matches_file_type_filter_exact_match (line 323) | def test_matches_file_type_filter_exact_match(self): method test_matches_file_type_filter_category_match (line 338) | def test_matches_file_type_filter_category_match(self): method test_matches_file_type_filter_aliases (line 356) | def test_matches_file_type_filter_aliases(self): method test_matches_file_type_filter_case_insensitive (line 373) | def test_matches_file_type_filter_case_insensitive(self): method test_matches_file_type_filter_unknown_file (line 388) | def test_matches_file_type_filter_unknown_file(self): method test_extension_mapping_completeness (line 396) | def test_extension_mapping_completeness(self): method test_extension_mapping_consistency (line 405) | def test_extension_mapping_consistency(self): method test_complex_file_paths (line 414) | def test_complex_file_paths(self): FILE: src/aws-healthomics-mcp-server/tests/test_gantt_generator.py function task_strategy (line 27) | def task_strategy(draw, base_time: datetime | None = None): function tasks_list_strategy (line 74) | def tasks_list_strategy(draw, min_tasks: int = 1, max_tasks: int = 20): class TestGanttGeneratorBasic (line 85) | class TestGanttGeneratorBasic: method test_empty_tasks (line 88) | def test_empty_tasks(self): method test_single_task (line 97) | def test_single_task(self): method test_status_colors (line 122) | def test_status_colors(self): method test_time_units (line 141) | def test_time_units(self): method test_many_tasks_omits_labels (line 159) | def test_many_tasks_omits_labels(self): method test_pending_phase_color (line 184) | def test_pending_phase_color(self): method test_tooltip_content (line 203) | def test_tooltip_content(self): method test_parse_time_with_z_suffix (line 230) | def test_parse_time_with_z_suffix(self): method test_parse_time_with_datetime (line 239) | def test_parse_time_with_datetime(self): method test_parse_time_with_variable_fractional_seconds (line 246) | def test_parse_time_with_variable_fractional_seconds(self): class TestGanttGeneratorPropertyBased (line 273) | class TestGanttGeneratorPropertyBased: method test_property_svg_contains_required_visual_elements (line 278) | def test_property_svg_contains_required_visual_elements(self, tasks: l... method test_property_valid_svg_for_any_parameters (line 331) | def test_property_valid_svg_for_any_parameters(self, time_unit: str, w... method test_property_status_color_mapping (line 370) | def test_property_status_color_mapping(self, status: str): FILE: src/aws-healthomics-mcp-server/tests/test_genomics_file_search_integration_working.py class TestGenomicsFileSearchIntegration (line 26) | class TestGenomicsFileSearchIntegration: method search_tool_wrapper (line 30) | def search_tool_wrapper(self): method mock_context (line 35) | def mock_context(self): method _create_mock_search_response (line 41) | def _create_mock_search_response(self, results_count: int = 2, search_... method test_search_genomics_files_success (line 83) | async def test_search_genomics_files_success(self, search_tool_wrapper... method test_search_with_default_parameters (line 127) | async def test_search_with_default_parameters(self, search_tool_wrappe... method test_search_configuration_error (line 154) | async def test_search_configuration_error(self, search_tool_wrapper, m... method test_search_execution_error (line 169) | async def test_search_execution_error(self, search_tool_wrapper, mock_... method test_invalid_file_type (line 187) | async def test_invalid_file_type(self, search_tool_wrapper, mock_conte... method test_search_with_pagination (line 199) | async def test_search_with_pagination(self, search_tool_wrapper, mock_... method test_wrapper_functionality (line 224) | def test_wrapper_functionality(self, search_tool_wrapper): method test_enhanced_response_handling (line 241) | async def test_enhanced_response_handling(self, search_tool_wrapper, m... class TestGetSupportedFileTypes (line 273) | class TestGetSupportedFileTypes: method file_types_tool_wrapper (line 277) | def file_types_tool_wrapper(self): method mock_context (line 282) | def mock_context(self): method test_get_supported_file_types_success (line 289) | async def test_get_supported_file_types_success(self, file_types_tool_... method test_get_supported_file_types_descriptions (line 336) | async def test_get_supported_file_types_descriptions( method test_get_supported_file_types_sorted_output (line 358) | async def test_get_supported_file_types_sorted_output( method test_get_supported_file_types_consistency (line 368) | async def test_get_supported_file_types_consistency( method test_get_supported_file_types_error_handling (line 384) | async def test_get_supported_file_types_error_handling( method test_get_supported_file_types_no_context_error (line 398) | async def test_get_supported_file_types_no_context_error( FILE: src/aws-healthomics-mcp-server/tests/test_genomics_search_orchestrator.py class TestGenomicsSearchOrchestrator (line 41) | class TestGenomicsSearchOrchestrator: method mock_config (line 45) | def mock_config(self): method sample_genomics_files (line 59) | def sample_genomics_files(self): method sample_search_request (line 85) | def sample_search_request(self): method orchestrator (line 97) | def orchestrator(self, mock_config): method test_init (line 125) | def test_init(self, orchestrator, mock_config): method test_from_environment (line 138) | def test_from_environment(self, mock_get_config, mock_config): method test_validate_search_request_valid (line 147) | def test_validate_search_request_valid(self, orchestrator, sample_sear... method test_validate_search_request_invalid_max_results_zero (line 152) | def test_validate_search_request_invalid_max_results_zero(self, orches... method test_validate_search_request_invalid_max_results_too_large (line 162) | def test_validate_search_request_invalid_max_results_too_large(self, o... method test_validate_search_request_invalid_file_type (line 172) | def test_validate_search_request_invalid_file_type(self, orchestrator): method test_deduplicate_files (line 182) | def test_deduplicate_files(self, orchestrator, sample_genomics_files): method test_get_searched_storage_systems_s3_only (line 193) | def test_get_searched_storage_systems_s3_only(self, mock_config): method test_get_searched_storage_systems_all_enabled (line 210) | def test_get_searched_storage_systems_all_enabled(self, orchestrator): method test_get_searched_storage_systems_no_s3 (line 217) | def test_get_searched_storage_systems_no_s3(self, mock_config): method test_get_all_s3_bucket_paths_no_adhoc_buckets (line 234) | async def test_get_all_s3_bucket_paths_no_adhoc_buckets(self, orchestr... method test_get_all_s3_bucket_paths_with_adhoc_buckets_no_duplicates (line 246) | async def test_get_all_s3_bucket_paths_with_adhoc_buckets_no_duplicate... method test_get_all_s3_bucket_paths_with_duplicate_buckets (line 272) | async def test_get_all_s3_bucket_paths_with_duplicate_buckets(self, or... method test_get_all_s3_bucket_paths_with_multiple_duplicates (line 301) | async def test_get_all_s3_bucket_paths_with_multiple_duplicates(self, ... method test_get_all_s3_bucket_paths_adhoc_validation_fails (line 350) | async def test_get_all_s3_bucket_paths_adhoc_validation_fails(self, or... method test_get_all_s3_bucket_paths_adhoc_validation_exception (line 368) | async def test_get_all_s3_bucket_paths_adhoc_validation_exception(self... method test_get_all_s3_bucket_paths_preserves_order_with_deduplication (line 388) | async def test_get_all_s3_bucket_paths_preserves_order_with_deduplicat... method test_get_all_s3_bucket_paths_empty_configured_buckets (line 426) | async def test_get_all_s3_bucket_paths_empty_configured_buckets(self, ... method test_extract_healthomics_associations_no_index (line 449) | def test_extract_healthomics_associations_no_index(self, orchestrator,... method test_extract_healthomics_associations_with_index (line 457) | def test_extract_healthomics_associations_with_index(self, orchestrator): method test_create_pagination_cache_key (line 495) | def test_create_pagination_cache_key(self, orchestrator, sample_search... method test_get_cached_pagination_state_no_cache (line 510) | def test_get_cached_pagination_state_no_cache(self, orchestrator): method test_cache_and_get_pagination_state (line 516) | def test_cache_and_get_pagination_state(self, orchestrator): method test_optimize_buffer_size_base_case (line 538) | def test_optimize_buffer_size_base_case(self, orchestrator, sample_sea... method test_optimize_buffer_size_with_metrics (line 547) | def test_optimize_buffer_size_with_metrics(self, orchestrator, sample_... method test_create_pagination_metrics (line 562) | def test_create_pagination_metrics(self, orchestrator): method test_should_use_cursor_pagination_large_buffer (line 574) | def test_should_use_cursor_pagination_large_buffer(self, orchestrator): method test_should_use_cursor_pagination_high_page_number (line 587) | def test_should_use_cursor_pagination_high_page_number(self, orchestra... method test_should_use_cursor_pagination_normal_case (line 600) | def test_should_use_cursor_pagination_normal_case(self, orchestrator): method test_cleanup_expired_pagination_cache_no_cache (line 613) | def test_cleanup_expired_pagination_cache_no_cache(self, orchestrator): method test_cleanup_expired_pagination_cache_with_entries (line 618) | def test_cleanup_expired_pagination_cache_with_entries(self, orchestra... method test_cleanup_pagination_cache_by_size (line 655) | def test_cleanup_pagination_cache_by_size(self, orchestrator): method test_cleanup_pagination_cache_by_size_no_cleanup_needed (line 691) | def test_cleanup_pagination_cache_by_size_no_cleanup_needed(self, orch... method test_cleanup_pagination_cache_by_size_no_cache (line 717) | def test_cleanup_pagination_cache_by_size_no_cache(self, orchestrator): method test_automatic_pagination_cache_size_cleanup (line 724) | def test_automatic_pagination_cache_size_cleanup(self, orchestrator): method test_smart_pagination_cache_cleanup_prioritizes_expired_entries (line 750) | def test_smart_pagination_cache_cleanup_prioritizes_expired_entries(se... method test_get_pagination_cache_stats_no_cache (line 818) | def test_get_pagination_cache_stats_no_cache(self, orchestrator): method test_get_pagination_cache_stats_with_cache (line 827) | def test_get_pagination_cache_stats_with_cache(self, orchestrator): method test_search_s3_with_timeout_success (line 871) | async def test_search_s3_with_timeout_success(self, orchestrator, samp... method test_search_s3_with_timeout_timeout (line 901) | async def test_search_s3_with_timeout_timeout(self, orchestrator, samp... method test_search_s3_with_timeout_exception (line 913) | async def test_search_s3_with_timeout_exception(self, orchestrator, sa... method test_search_healthomics_sequences_with_timeout_success (line 925) | async def test_search_healthomics_sequences_with_timeout_success( method test_search_healthomics_sequences_with_timeout_timeout (line 957) | async def test_search_healthomics_sequences_with_timeout_timeout( method test_search_healthomics_references_with_timeout_success (line 973) | async def test_search_healthomics_references_with_timeout_success( method test_execute_parallel_searches_s3_only (line 1005) | async def test_execute_parallel_searches_s3_only( method test_execute_parallel_searches_all_systems (line 1025) | async def test_execute_parallel_searches_all_systems( method test_execute_parallel_searches_with_exceptions (line 1068) | async def test_execute_parallel_searches_with_exceptions( method test_execute_parallel_searches_no_systems_configured (line 1093) | async def test_execute_parallel_searches_no_systems_configured( method test_execute_parallel_searches_no_buckets_adhoc_only (line 1105) | async def test_execute_parallel_searches_no_buckets_adhoc_only( method test_score_results (line 1133) | async def test_score_results(self, orchestrator, sample_genomics_files): method test_execute_parallel_paginated_searches_success (line 1156) | async def test_execute_parallel_paginated_searches_success( method test_execute_parallel_paginated_searches_with_continuation (line 1227) | async def test_execute_parallel_paginated_searches_with_continuation( method test_execute_parallel_paginated_searches_s3_only (line 1300) | async def test_execute_parallel_paginated_searches_s3_only( method test_execute_parallel_paginated_searches_healthomics_only (line 1354) | async def test_execute_parallel_paginated_searches_healthomics_only( method test_execute_parallel_paginated_searches_with_exceptions (line 1424) | async def test_execute_parallel_paginated_searches_with_exceptions( method test_execute_parallel_paginated_searches_no_systems_configured (line 1489) | async def test_execute_parallel_paginated_searches_no_systems_configured( method test_execute_parallel_paginated_searches_no_buckets_adhoc_only (line 1510) | async def test_execute_parallel_paginated_searches_no_buckets_adhoc_only( method test_execute_parallel_paginated_searches_mixed_continuation_tokens (line 1564) | async def test_execute_parallel_paginated_searches_mixed_continuation_... method test_execute_parallel_paginated_searches_invalid_continuation_tokens (line 1661) | async def test_execute_parallel_paginated_searches_invalid_continuatio... method test_execute_parallel_paginated_searches_unexpected_response_format (line 1734) | async def test_execute_parallel_paginated_searches_unexpected_response... method test_search_s3_paginated_with_timeout_success (line 1805) | async def test_search_s3_paginated_with_timeout_success( method test_search_s3_paginated_with_timeout_timeout (line 1851) | async def test_search_s3_paginated_with_timeout_timeout( method test_search_s3_paginated_with_timeout_exception (line 1875) | async def test_search_s3_paginated_with_timeout_exception( method test_search_healthomics_sequences_paginated_with_timeout_success (line 1899) | async def test_search_healthomics_sequences_paginated_with_timeout_suc... method test_search_healthomics_sequences_paginated_with_timeout_timeout (line 1946) | async def test_search_healthomics_sequences_paginated_with_timeout_tim... method test_search_healthomics_references_paginated_with_timeout_success (line 1972) | async def test_search_healthomics_references_paginated_with_timeout_su... method test_search_healthomics_references_paginated_with_timeout_timeout (line 2019) | async def test_search_healthomics_references_paginated_with_timeout_ti... method test_search_main_method_success (line 2045) | async def test_search_main_method_success( method test_search_main_method_validation_error (line 2096) | async def test_search_main_method_validation_error(self, orchestrator): method test_search_main_method_execution_error (line 2109) | async def test_search_main_method_execution_error(self, orchestrator, ... method test_search_paginated_main_method_success (line 2123) | async def test_search_paginated_main_method_success( method test_search_paginated_with_continuation_token (line 2181) | async def test_search_paginated_with_continuation_token( method test_search_paginated_validation_error (line 2218) | async def test_search_paginated_validation_error(self, orchestrator): method test_search_with_file_associations (line 2231) | async def test_search_with_file_associations( method test_search_with_empty_results (line 2304) | async def test_search_with_empty_results(self, orchestrator, sample_se... method test_search_with_healthomics_associations (line 2331) | async def test_search_with_healthomics_associations(self, orchestrator... method test_search_performance_logging (line 2400) | async def test_search_performance_logging( method test_search_paginated_with_invalid_continuation_token (line 2461) | async def test_search_paginated_with_invalid_continuation_token( method test_search_paginated_with_score_threshold_filtering (line 2494) | async def test_search_paginated_with_score_threshold_filtering( method test_search_paginated_with_score_threshold_update (line 2560) | async def test_search_paginated_with_score_threshold_update( method test_execute_parallel_paginated_searches_with_token_parsing_errors (line 2633) | async def test_execute_parallel_paginated_searches_with_token_parsing_... method test_execute_parallel_paginated_searches_with_attribute_errors (line 2682) | async def test_execute_parallel_paginated_searches_with_attribute_errors( method test_cache_cleanup_during_search (line 2712) | async def test_cache_cleanup_during_search(self, orchestrator, sample_... method test_cache_cleanup_exception_handling (line 2728) | async def test_cache_cleanup_exception_handling(self, orchestrator, sa... method test_search_healthomics_references_with_timeout_exception (line 2747) | async def test_search_healthomics_references_with_timeout_exception( method test_search_healthomics_sequences_with_timeout_exception (line 2762) | async def test_search_healthomics_sequences_with_timeout_exception( method test_search_healthomics_sequences_paginated_with_timeout_exception (line 2777) | async def test_search_healthomics_sequences_paginated_with_timeout_exc... method test_search_healthomics_references_paginated_with_timeout_exception (line 2795) | async def test_search_healthomics_references_paginated_with_timeout_ex... method test_pagination_cache_cleanup_exception_handling (line 2811) | async def test_pagination_cache_cleanup_exception_handling( method test_search_paginated_exception_handling (line 2850) | async def test_search_paginated_exception_handling(self, orchestrator,... method test_search_s3_with_timeout_exception_handling (line 2866) | async def test_search_s3_with_timeout_exception_handling( method test_search_s3_paginated_with_timeout_exception_handling (line 2879) | async def test_search_s3_paginated_with_timeout_exception_handling( method test_complex_search_coordination_logic (line 2895) | async def test_complex_search_coordination_logic(self, orchestrator, s... method test_init_with_s3_engine_initialization_failure (line 2953) | def test_init_with_s3_engine_initialization_failure(self, mock_config): method test_get_all_s3_bucket_paths_with_adhoc_validation_error (line 2971) | async def test_get_all_s3_bucket_paths_with_adhoc_validation_error( method test_get_all_s3_bucket_paths_with_no_validated_adhoc_buckets (line 2990) | async def test_get_all_s3_bucket_paths_with_no_validated_adhoc_buckets( method test_search_s3_with_timeout_for_buckets_no_engine (line 3008) | async def test_search_s3_with_timeout_for_buckets_no_engine( method test_search_s3_paginated_with_timeout_for_buckets_no_engine (line 3026) | async def test_search_s3_paginated_with_timeout_for_buckets_no_engine( method test_search_s3_paginated_with_timeout_no_engine (line 3046) | async def test_search_s3_paginated_with_timeout_no_engine( method test_cleanup_pagination_cache_by_size_with_expired_and_valid_mixed (line 3065) | def test_cleanup_pagination_cache_by_size_with_expired_and_valid_mixed... method test_cleanup_pagination_cache_by_size_double_check_key_exists (line 3144) | def test_cleanup_pagination_cache_by_size_double_check_key_exists(self... method test_search_s3_with_timeout_for_buckets_timeout (line 3207) | async def test_search_s3_with_timeout_for_buckets_timeout( method test_search_s3_paginated_with_timeout_for_buckets_timeout (line 3220) | async def test_search_s3_paginated_with_timeout_for_buckets_timeout( method test_search_with_no_s3_engine_available (line 3237) | async def test_search_with_no_s3_engine_available(self, mock_config, s... method test_get_all_s3_bucket_paths_with_successful_adhoc_validation (line 3259) | async def test_get_all_s3_bucket_paths_with_successful_adhoc_validation( method test_search_s3_paginated_with_timeout_for_buckets_exception (line 3283) | async def test_search_s3_paginated_with_timeout_for_buckets_exception( method test_init_with_provided_s3_engine (line 3299) | def test_init_with_provided_s3_engine(self, mock_config): method test_execute_parallel_searches_with_s3_engine_none (line 3315) | async def test_execute_parallel_searches_with_s3_engine_none( class TestPropertyOrchestratorBucketUnion (line 3343) | class TestPropertyOrchestratorBucketUnion: method test_orchestrator_searches_union_of_configured_and_adhoc_buckets (line 3353) | async def test_orchestrator_searches_union_of_configured_and_adhoc_buc... FILE: src/aws-healthomics-mcp-server/tests/test_healthomics_search_engine.py class TestHealthOmicsSearchEngine (line 32) | class TestHealthOmicsSearchEngine: method search_config (line 36) | def search_config(self): method search_engine (line 52) | def search_engine(self, search_config): method test_list_read_sets_client_error (line 60) | async def test_list_read_sets_client_error(self, search_engine): method test_search_references_fallback_to_client_filtering (line 70) | async def test_search_references_fallback_to_client_filtering(self, se... method test_search_references_server_side_success (line 88) | async def test_search_references_server_side_success(self, search_engi... method test_list_references_with_filter_error_handling (line 102) | async def test_list_references_with_filter_error_handling(self, search... method test_complex_workflow_analysis_error_handling (line 113) | async def test_complex_workflow_analysis_error_handling(self, search_e... method test_edge_case_handling_in_search (line 126) | async def test_edge_case_handling_in_search(self, search_engine): method mock_omics_client (line 140) | def mock_omics_client(self): method sample_sequence_stores (line 146) | def sample_sequence_stores(self): method sample_reference_stores (line 166) | def sample_reference_stores(self): method sample_read_sets (line 179) | def sample_read_sets(self): method sample_references (line 207) | def sample_references(self): method test_init (line 229) | def test_init(self, search_config): method test_search_sequence_stores_success (line 246) | async def test_search_sequence_stores_success( method test_search_sequence_stores_with_results (line 265) | async def test_search_sequence_stores_with_results( method test_search_sequence_stores_exception_handling (line 292) | async def test_search_sequence_stores_exception_handling( method test_search_reference_stores_success (line 309) | async def test_search_reference_stores_success(self, search_engine, sa... method test_list_sequence_stores (line 321) | async def test_list_sequence_stores(self, search_engine): method test_list_reference_stores (line 344) | async def test_list_reference_stores(self, search_engine): method test_list_read_sets (line 367) | async def test_list_read_sets(self, search_engine, sample_read_sets): method test_list_references (line 382) | async def test_list_references(self, search_engine, sample_references): method test_get_read_set_metadata (line 394) | async def test_get_read_set_metadata(self, search_engine): method test_get_read_set_tags (line 413) | async def test_get_read_set_tags(self, search_engine): method test_get_reference_tags (line 427) | async def test_get_reference_tags(self, search_engine): method test_matches_search_terms_metadata (line 440) | def test_matches_search_terms_metadata(self, search_engine): method test_get_region (line 461) | def test_get_region(self, search_engine): method test_get_account_id (line 473) | def test_get_account_id(self, search_engine): method test_convert_read_set_to_genomics_file (line 490) | async def test_convert_read_set_to_genomics_file(self, search_engine): method test_convert_reference_to_genomics_file (line 543) | async def test_convert_reference_to_genomics_file(self, search_engine): method test_search_sequence_stores_paginated (line 580) | async def test_search_sequence_stores_paginated(self, search_engine, s... method test_search_reference_stores_paginated (line 600) | async def test_search_reference_stores_paginated(self, search_engine, ... method test_error_handling_client_error (line 620) | async def test_error_handling_client_error(self, search_engine): method test_error_handling_general_exception (line 633) | async def test_error_handling_general_exception(self, search_engine): method test_search_single_sequence_store (line 643) | async def test_search_single_sequence_store(self, search_engine, sampl... method test_search_single_reference_store (line 658) | async def test_search_single_reference_store(self, search_engine, samp... method test_list_read_sets_paginated (line 673) | async def test_list_read_sets_paginated(self, search_engine): method test_list_references_with_filter (line 696) | async def test_list_references_with_filter(self, search_engine): method test_search_sequence_stores_with_exception_results (line 719) | async def test_search_sequence_stores_with_exception_results( method test_search_sequence_stores_with_unexpected_result_type (line 740) | async def test_search_sequence_stores_with_unexpected_result_type( method test_search_reference_stores_with_exception_results (line 760) | async def test_search_reference_stores_with_exception_results( method test_search_reference_stores_with_unexpected_result_type (line 777) | async def test_search_reference_stores_with_unexpected_result_type( method test_search_sequence_stores_paginated_with_invalid_token (line 794) | async def test_search_sequence_stores_paginated_with_invalid_token( method test_search_reference_stores_paginated_with_invalid_token (line 821) | async def test_search_reference_stores_paginated_with_invalid_token( method test_search_single_sequence_store_paginated_success (line 845) | async def test_search_single_sequence_store_paginated_success(self, se... method test_search_single_sequence_store_paginated_with_filtering (line 881) | async def test_search_single_sequence_store_paginated_with_filtering(s... method test_search_single_sequence_store_paginated_error_handling (line 912) | async def test_search_single_sequence_store_paginated_error_handling(s... method test_list_references_with_filter_paginated_success (line 928) | async def test_list_references_with_filter_paginated_success(self, sea... method test_list_references_with_filter_paginated_multiple_pages (line 958) | async def test_list_references_with_filter_paginated_multiple_pages(se... method test_list_references_with_filter_paginated_max_results_limit (line 990) | async def test_list_references_with_filter_paginated_max_results_limit... method test_list_references_with_filter_paginated_client_error (line 1016) | async def test_list_references_with_filter_paginated_client_error(self... method test_search_single_reference_store_paginated_success (line 1034) | async def test_search_single_reference_store_paginated_success(self, s... method test_search_single_reference_store_paginated_with_fallback (line 1060) | async def test_search_single_reference_store_paginated_with_fallback(s... method test_search_single_reference_store_paginated_no_search_terms (line 1092) | async def test_search_single_reference_store_paginated_no_search_terms... method test_search_single_reference_store_paginated_duplicate_removal (line 1123) | async def test_search_single_reference_store_paginated_duplicate_remov... method test_search_single_reference_store_paginated_error_handling (line 1160) | async def test_search_single_reference_store_paginated_error_handling(... method test_convert_read_set_to_genomics_file_with_enhanced_metadata (line 1178) | async def test_convert_read_set_to_genomics_file_with_enhanced_metadat... method test_convert_read_set_to_genomics_file_different_file_types (line 1209) | async def test_convert_read_set_to_genomics_file_different_file_types(... method test_convert_read_set_to_genomics_file_with_file_type_filter (line 1243) | async def test_convert_read_set_to_genomics_file_with_file_type_filter... method test_convert_read_set_to_genomics_file_search_terms_filtering (line 1268) | async def test_convert_read_set_to_genomics_file_search_terms_filterin... method test_convert_read_set_to_genomics_file_error_handling (line 1299) | async def test_convert_read_set_to_genomics_file_error_handling(self, ... method test_search_single_sequence_store_with_file_type_filter (line 1316) | async def test_search_single_sequence_store_with_file_type_filter( method test_search_single_reference_store_with_file_type_filter (line 1338) | async def test_search_single_reference_store_with_file_type_filter( method test_list_read_sets_with_empty_response (line 1359) | async def test_list_read_sets_with_empty_response(self, search_engine): method test_list_references_with_empty_response (line 1370) | async def test_list_references_with_empty_response(self, search_engine): method test_get_read_set_metadata_with_client_error (line 1381) | async def test_get_read_set_metadata_with_client_error(self, search_en... method test_get_read_set_tags_with_client_error (line 1396) | async def test_get_read_set_tags_with_client_error(self, search_engine): method test_get_reference_tags_with_client_error (line 1413) | async def test_get_reference_tags_with_client_error(self, search_engine): method test_matches_search_terms_with_name_and_metadata (line 1429) | def test_matches_search_terms_with_name_and_metadata(self, search_engi... method test_matches_search_terms_no_match (line 1442) | def test_matches_search_terms_no_match(self, search_engine): method test_matches_search_terms_empty_search_terms (line 1454) | def test_matches_search_terms_empty_search_terms(self, search_engine): method test_convert_read_set_to_genomics_file_with_minimal_data (line 1464) | async def test_convert_read_set_to_genomics_file_with_minimal_data(sel... method test_convert_reference_to_genomics_file_with_minimal_data (line 1496) | async def test_convert_reference_to_genomics_file_with_minimal_data(se... method test_list_read_sets_no_results (line 1527) | async def test_list_read_sets_no_results(self, search_engine): method test_list_references_with_filter_no_results (line 1536) | async def test_list_references_with_filter_no_results(self, search_eng... method test_search_sequence_stores_paginated_with_has_more_results (line 1545) | async def test_search_sequence_stores_paginated_with_has_more_results( method test_search_reference_stores_paginated_with_has_more_results (line 1567) | async def test_search_reference_stores_paginated_with_has_more_results( method test_search_sequence_stores_with_general_exception (line 1589) | async def test_search_sequence_stores_with_general_exception( method test_search_sequence_stores_paginated_with_general_exception (line 1604) | async def test_search_sequence_stores_paginated_with_general_exception... method test_search_reference_stores_with_general_exception (line 1622) | async def test_search_reference_stores_with_general_exception( method test_search_reference_stores_paginated_with_general_exception (line 1637) | async def test_search_reference_stores_paginated_with_general_exceptio... method test_convert_read_set_to_genomics_file_with_inactive_status (line 1655) | async def test_convert_read_set_to_genomics_file_with_inactive_status(... method test_convert_read_set_to_genomics_file_with_missing_status (line 1677) | async def test_convert_read_set_to_genomics_file_with_missing_status(s... method test_convert_read_set_to_genomics_file_with_conversion_exception (line 1704) | async def test_convert_read_set_to_genomics_file_with_conversion_excep... method test_search_sequence_stores_paginated_max_results_break (line 1725) | async def test_search_sequence_stores_paginated_max_results_break( method test_get_read_set_metadata_with_client_error_handling (line 1765) | async def test_get_read_set_metadata_with_client_error_handling(self, ... method test_get_read_set_tags_with_client_error_handling (line 1779) | async def test_get_read_set_tags_with_client_error_handling(self, sear... method test_get_reference_tags_with_client_error_handling (line 1796) | async def test_get_reference_tags_with_client_error_handling(self, sea... method test_list_read_sets_with_default_max_results (line 1813) | async def test_list_read_sets_with_default_max_results(self, search_en... method test_list_references_with_empty_search_terms (line 1827) | async def test_list_references_with_empty_search_terms(self, search_en... method test_list_references_with_filter_applied (line 1841) | async def test_list_references_with_filter_applied(self, search_engine... method test_convert_read_set_to_genomics_file_with_file_type_mapping (line 1855) | async def test_convert_read_set_to_genomics_file_with_file_type_mappin... method test_convert_reference_to_genomics_file_with_exception (line 1881) | async def test_convert_reference_to_genomics_file_with_exception(self,... method test_matches_search_terms_metadata_with_none_values (line 1900) | async def test_matches_search_terms_metadata_with_none_values(self, se... method test_search_single_sequence_store_with_empty_read_sets (line 1916) | async def test_search_single_sequence_store_with_empty_read_sets(self,... method test_search_single_reference_store_with_empty_references (line 1931) | async def test_search_single_reference_store_with_empty_references(sel... method test_list_reference_stores_with_client_error (line 1946) | async def test_list_reference_stores_with_client_error(self, search_en... method test_search_single_sequence_store_with_exception (line 1959) | async def test_search_single_sequence_store_with_exception(self, searc... method test_search_single_reference_store_with_exception (line 1976) | async def test_search_single_reference_store_with_exception(self, sear... method test_list_read_sets_paginated_with_client_error (line 1991) | async def test_list_read_sets_paginated_with_client_error(self, search... method test_list_read_sets_paginated_with_multiple_pages_and_break (line 2005) | async def test_list_read_sets_paginated_with_multiple_pages_and_break(... method test_convert_reference_to_genomics_file_with_metadata_retrieval (line 2030) | async def test_convert_reference_to_genomics_file_with_metadata_retrie... method test_convert_reference_to_genomics_file_with_metadata_exception (line 2067) | async def test_convert_reference_to_genomics_file_with_metadata_except... method test_convert_reference_to_genomics_file_with_index_size_only (line 2097) | async def test_convert_reference_to_genomics_file_with_index_size_only... method test_list_references_with_filter_paginated_no_more_pages (line 2133) | async def test_list_references_with_filter_paginated_no_more_pages(sel... method test_list_references_with_filter_paginated_exact_max_results (line 2159) | async def test_list_references_with_filter_paginated_exact_max_results... method test_search_single_reference_store_paginated_with_server_side_filtering_success (line 2187) | async def test_search_single_reference_store_paginated_with_server_sid... FILE: src/aws-healthomics-mcp-server/tests/test_helper_tools.py function test_get_supported_regions_success (line 25) | async def test_get_supported_regions_success(): function test_get_supported_regions_empty_response (line 57) | async def test_get_supported_regions_empty_response(): function test_get_supported_regions_boto_error (line 83) | async def test_get_supported_regions_boto_error(): function test_get_supported_regions_client_error (line 110) | async def test_get_supported_regions_client_error(): function test_get_supported_regions_unexpected_error (line 139) | async def test_get_supported_regions_unexpected_error(): FILE: src/aws-healthomics-mcp-server/tests/test_helper_tools_resolution.py function _unzip_base64 (line 32) | def _unzip_base64(b64: str) -> dict[str, str]: class TestPackageWorkflowResolution (line 39) | class TestPackageWorkflowResolution: method test_local_file_path (line 47) | async def test_local_file_path(self, tmp_path): method test_s3_uri (line 69) | async def test_s3_uri(self): method test_inline_content (line 101) | async def test_inline_content(self): method test_additional_files_resolved_individually (line 121) | async def test_additional_files_resolved_individually(self, tmp_path): method test_error_propagation_main_file (line 149) | async def test_error_propagation_main_file(self): method test_error_propagation_additional_file (line 173) | async def test_error_propagation_additional_file(self): method test_unexpected_exception_in_package_workflow (line 216) | async def test_unexpected_exception_in_package_workflow(self): FILE: src/aws-healthomics-mcp-server/tests/test_helpers.py function call_mcp_tool_directly (line 22) | async def call_mcp_tool_directly(tool_func, ctx: Context, **kwargs) -> Any: function extract_field_defaults (line 65) | def extract_field_defaults(tool_func) -> Dict[str, Any]: class MCPToolTestWrapper (line 91) | class MCPToolTestWrapper: method __init__ (line 98) | def __init__(self, tool_func): method call (line 103) | async def call(self, ctx: Context, **kwargs) -> Any: method get_defaults (line 115) | def get_defaults(self) -> Dict[str, Any]: FILE: src/aws-healthomics-mcp-server/tests/test_init.py class TestInit (line 17) | class TestInit: method test_version (line 20) | def test_version(self): method test_module_reload (line 37) | def test_module_reload(self): FILE: src/aws-healthomics-mcp-server/tests/test_instance_recommender.py class TestInstanceRecommenderRecommendInstance (line 26) | class TestInstanceRecommenderRecommendInstance: method test_recommend_instance_small_workload (line 29) | def test_recommend_instance_small_workload(self): method test_recommend_instance_memory_heavy (line 40) | def test_recommend_instance_memory_heavy(self): method test_recommend_instance_cpu_heavy (line 52) | def test_recommend_instance_cpu_heavy(self): method test_recommend_instance_zero_usage (line 64) | def test_recommend_instance_zero_usage(self): method test_recommend_instance_custom_headroom (line 75) | def test_recommend_instance_custom_headroom(self): method test_recommend_instance_fallback_to_largest (line 84) | def test_recommend_instance_fallback_to_largest(self): method test_negative_headroom_raises_error (line 92) | def test_negative_headroom_raises_error(self): method test_negative_headroom_large_value_raises_error (line 97) | def test_negative_headroom_large_value_raises_error(self): method test_zero_headroom_allowed (line 102) | def test_zero_headroom_allowed(self): class TestInstanceRecommenderCalculateSavings (line 113) | class TestInstanceRecommenderCalculateSavings: method setup_method (line 116) | def setup_method(self): method teardown_method (line 120) | def teardown_method(self): method test_calculate_savings_basic (line 124) | def test_calculate_savings_basic(self): method test_calculate_savings_no_savings (line 138) | def test_calculate_savings_no_savings(self): method test_calculate_savings_minimum_billing (line 152) | def test_calculate_savings_minimum_billing(self): method test_calculate_savings_pricing_unavailable (line 168) | def test_calculate_savings_pricing_unavailable(self): class TestInstanceRecommenderHighPrioritySaving (line 181) | class TestInstanceRecommenderHighPrioritySaving: method test_high_priority_above_threshold (line 184) | def test_high_priority_above_threshold(self): method test_high_priority_at_threshold (line 190) | def test_high_priority_at_threshold(self): method test_high_priority_below_threshold (line 196) | def test_high_priority_below_threshold(self): method test_high_priority_zero_cost (line 202) | def test_high_priority_zero_cost(self): method test_high_priority_negative_cost (line 207) | def test_high_priority_negative_cost(self): class TestInstanceRecommenderPropertyBased (line 216) | class TestInstanceRecommenderPropertyBased: method test_property_recommended_instance_fits_required_resources (line 224) | def test_property_recommended_instance_fits_required_resources( method test_property_savings_calculation_correctness (line 272) | def test_property_savings_calculation_correctness( method test_property_high_priority_savings_threshold (line 309) | def test_property_high_priority_savings_threshold( FILE: src/aws-healthomics-mcp-server/tests/test_integration_framework.py class TestIntegrationFramework (line 26) | class TestIntegrationFramework: method mock_context (line 30) | def mock_context(self): method test_genomics_test_data_fixtures_structure (line 36) | def test_genomics_test_data_fixtures_structure(self): method test_large_dataset_generation (line 71) | def test_large_dataset_generation(self): method test_cross_storage_scenarios (line 88) | def test_cross_storage_scenarios(self): method test_pagination_scenarios (line 107) | def test_pagination_scenarios(self): method test_json_serialization_of_fixtures (line 121) | def test_json_serialization_of_fixtures(self): method test_file_type_extraction_helper (line 141) | def test_file_type_extraction_helper(self): method test_file_size_formatting_helper (line 158) | def test_file_size_formatting_helper(self): method test_mock_response_creation_helpers (line 173) | def test_mock_response_creation_helpers(self): method test_async_test_framework (line 191) | async def test_async_test_framework(self, mock_context): method test_datetime_handling_in_fixtures (line 204) | def test_datetime_handling_in_fixtures(self): method test_tag_structure_in_fixtures (line 218) | def test_tag_structure_in_fixtures(self): method _extract_file_type (line 234) | def _extract_file_type(self, key: str) -> str: method _format_file_size (line 250) | def _format_file_size(self, size_bytes: int) -> str: method _create_basic_mock_response (line 259) | def _create_basic_mock_response(self, test_data: List[Dict]): FILE: src/aws-healthomics-mcp-server/tests/test_json_response_builder.py class TestJsonResponseBuilder (line 27) | class TestJsonResponseBuilder: method builder (line 31) | def builder(self): method sample_genomics_file (line 36) | def sample_genomics_file(self): method sample_associated_file (line 50) | def sample_associated_file(self): method sample_result (line 64) | def sample_result(self, sample_genomics_file, sample_associated_file): method test_init (line 73) | def test_init(self, builder): method test_build_search_response_basic (line 77) | def test_build_search_response_basic(self, builder, sample_result): method test_build_search_response_with_optional_params (line 100) | def test_build_search_response_with_optional_params(self, builder, sam... method test_build_search_response_empty_results (line 120) | def test_build_search_response_empty_results(self, builder): method test_serialize_results (line 131) | def test_serialize_results(self, builder, sample_result): method test_serialize_genomics_file (line 153) | def test_serialize_genomics_file(self, builder, sample_genomics_file): method test_build_performance_metrics (line 173) | def test_build_performance_metrics(self, builder): method test_build_performance_metrics_zero_duration (line 186) | def test_build_performance_metrics_zero_duration(self, builder): method test_build_response_metadata (line 195) | def test_build_response_metadata(self, builder, sample_result): method test_build_response_metadata_empty_results (line 216) | def test_build_response_metadata_empty_results(self, builder): method test_get_association_types (line 224) | def test_get_association_types(self, builder): method test_build_score_breakdown (line 310) | def test_build_score_breakdown(self, builder, sample_result): method test_assess_match_quality (line 319) | def test_assess_match_quality(self, builder): method test_format_file_size (line 326) | def test_format_file_size(self, builder): method test_extract_file_extension (line 335) | def test_extract_file_extension(self, builder): method test_extract_basename (line 347) | def test_extract_basename(self, builder): method test_is_compressed_file (line 353) | def test_is_compressed_file(self, builder): method test_categorize_storage_tier (line 362) | def test_categorize_storage_tier(self, builder): method test_complex_workflow (line 372) | def test_complex_workflow(self, builder): FILE: src/aws-healthomics-mcp-server/tests/test_main.py class TestMain (line 17) | class TestMain: method test_main_default (line 22) | def test_main_default(self, mock_run): method test_module_execution (line 31) | def test_module_execution(self): FILE: src/aws-healthomics-mcp-server/tests/test_models.py function test_workflow_type_enum (line 45) | def test_workflow_type_enum(): function test_storage_type_enum (line 56) | def test_storage_type_enum(): function test_cache_behavior_enum (line 66) | def test_cache_behavior_enum(): function test_run_status_enum (line 72) | def test_run_status_enum(): function test_export_type_enum (line 82) | def test_export_type_enum(): function test_workflow_summary (line 89) | def test_workflow_summary(): function test_workflow_list_response (line 125) | def test_workflow_list_response(): function test_run_summary (line 156) | def test_run_summary(): function test_run_list_response (line 198) | def test_run_list_response(): function test_task_summary (line 231) | def test_task_summary(): function test_task_list_response (line 267) | def test_task_list_response(): function test_log_event (line 297) | def test_log_event(): function test_log_response (line 307) | def test_log_response(): function test_storage_request (line 326) | def test_storage_request(): function test_analysis_result (line 345) | def test_analysis_result(): function test_analysis_response (line 380) | def test_analysis_response(): function test_workflow_summary_validation (line 424) | def test_workflow_summary_validation(): function test_run_summary_validation (line 443) | def test_run_summary_validation(): function test_task_summary_validation (line 465) | def test_task_summary_validation(): function test_log_event_validation (line 484) | def test_log_event_validation(): function test_storage_request_edge_cases (line 499) | def test_storage_request_edge_cases(): function test_analysis_result_validation (line 510) | def test_analysis_result_validation(): function test_empty_lists (line 541) | def test_empty_lists(): function test_model_serialization (line 564) | def test_model_serialization(): function test_model_json_serialization (line 598) | def test_model_json_serialization(): function test_registry_mapping (line 619) | def test_registry_mapping(): function test_registry_mapping_validation (line 634) | def test_registry_mapping_validation(): function test_image_mapping (line 652) | def test_image_mapping(): function test_image_mapping_validation (line 663) | def test_image_mapping_validation(): function test_container_registry_map (line 679) | def test_container_registry_map(): function test_container_registry_map_none_conversion (line 713) | def test_container_registry_map_none_conversion(): function test_container_registry_map_dict_creation (line 727) | def test_container_registry_map_dict_creation(): function test_container_registry_map_empty_dict (line 754) | def test_container_registry_map_empty_dict(): function test_container_registry_map_validation_errors (line 769) | def test_container_registry_map_validation_errors(): function test_container_registry_map_serialization (line 794) | def test_container_registry_map_serialization(): function test_genomics_file_search_request_validation (line 827) | def test_genomics_file_search_request_validation(): function test_genomics_file_search_request_adhoc_s3_buckets_validation (line 852) | def test_genomics_file_search_request_adhoc_s3_buckets_validation(): function test_genomics_file_search_response (line 896) | def test_genomics_file_search_response(): function test_storage_pagination_request (line 927) | def test_storage_pagination_request(): class TestDefinitionRepositoryModel (line 968) | class TestDefinitionRepositoryModel: method test_definition_repository_valid (line 971) | def test_definition_repository_valid(self): method test_definition_repository_empty_full_repository_id (line 993) | def test_definition_repository_empty_full_repository_id(self): method test_definition_repository_whitespace_full_repository_id (line 1010) | def test_definition_repository_whitespace_full_repository_id(self): method test_definition_repository_invalid_connection_arn (line 1027) | def test_definition_repository_invalid_connection_arn(self): method test_definition_repository_with_exclude_patterns (line 1044) | def test_definition_repository_with_exclude_patterns(self): class TestSourceReferenceModel (line 1062) | class TestSourceReferenceModel: method test_source_reference_valid_branch (line 1065) | def test_source_reference_valid_branch(self): method test_source_reference_valid_tag (line 1076) | def test_source_reference_valid_tag(self): method test_source_reference_valid_commit_id (line 1087) | def test_source_reference_valid_commit_id(self): method test_source_reference_empty_value (line 1098) | def test_source_reference_empty_value(self): method test_source_reference_whitespace_value (line 1110) | def test_source_reference_whitespace_value(self): method test_source_reference_invalid_type (line 1122) | def test_source_reference_invalid_type(self): FILE: src/aws-healthomics-mcp-server/tests/test_package_workflow_output.py class TestWriteZipToLocal (line 43) | class TestWriteZipToLocal: method test_write_and_read_back (line 46) | def test_write_and_read_back(self, tmp_path): method test_no_overwrite (line 56) | def test_no_overwrite(self, tmp_path): method test_creates_parent_directories (line 66) | def test_creates_parent_directories(self, tmp_path): method test_rejects_path_traversal (line 75) | def test_rejects_path_traversal(self, tmp_path): method test_rejects_null_bytes (line 82) | def test_rejects_null_bytes(self): class TestWriteZipToS3 (line 95) | class TestWriteZipToS3: method _mock_session (line 98) | def _mock_session(self, s3_client): method test_successful_upload (line 103) | def test_successful_upload(self): method test_no_overwrite (line 127) | def test_no_overwrite(self): method test_missing_key_raises_value_error (line 145) | def test_missing_key_raises_value_error(self): method test_invalid_uri_raises_value_error (line 160) | def test_invalid_uri_raises_value_error(self): method test_bucket_owner_passed_through (line 167) | def test_bucket_owner_passed_through(self): class TestPackageWorkflowOutputPath (line 193) | class TestPackageWorkflowOutputPath: method test_none_output_path_returns_base64 (line 197) | async def test_none_output_path_returns_base64(self): method test_local_output_path_writes_zip (line 217) | async def test_local_output_path_writes_zip(self, tmp_path): method test_local_output_path_with_additional_files (line 243) | async def test_local_output_path_with_additional_files(self, tmp_path): method test_s3_output_path_calls_write_zip_to_s3 (line 265) | async def test_s3_output_path_calls_write_zip_to_s3(self): method test_s3_output_path_sentinel_resolves_account_id (line 296) | async def test_s3_output_path_sentinel_resolves_account_id(self): method test_s3_output_path_explicit_owner (line 329) | async def test_s3_output_path_explicit_owner(self): method test_local_path_does_not_call_s3 (line 357) | async def test_local_path_does_not_call_s3(self, tmp_path): method test_s3_path_does_not_call_local (line 376) | async def test_s3_path_does_not_call_local(self): method test_error_value_error_on_write (line 403) | async def test_error_value_error_on_write(self, tmp_path): method test_error_file_exists (line 425) | async def test_error_file_exists(self, tmp_path): method test_error_os_error (line 445) | async def test_error_os_error(self): method test_error_permission_error (line 467) | async def test_error_permission_error(self): method test_error_client_error_s3 (line 489) | async def test_error_client_error_s3(self): method test_error_no_credentials_s3 (line 513) | async def test_error_no_credentials_s3(self): FILE: src/aws-healthomics-mcp-server/tests/test_pagination.py class TestStoragePaginationRequest (line 33) | class TestStoragePaginationRequest: method test_valid_request (line 36) | def test_valid_request(self): method test_default_values (line 46) | def test_default_values(self): method test_buffer_size_adjustment (line 54) | def test_buffer_size_adjustment(self): method test_validation_errors (line 60) | def test_validation_errors(self): class TestStoragePaginationResponse (line 74) | class TestStoragePaginationResponse: method setup_method (line 77) | def setup_method(self): method create_test_file (line 81) | def create_test_file(self, path: str, file_type: GenomicsFileType) -> ... method test_response_creation (line 94) | def test_response_creation(self): method test_default_values (line 115) | def test_default_values(self): class TestGlobalContinuationToken (line 126) | class TestGlobalContinuationToken: method test_token_creation (line 129) | def test_token_creation(self): method test_default_values (line 147) | def test_default_values(self): method test_encode_decode (line 158) | def test_encode_decode(self): method test_encode_decode_empty_token (line 188) | def test_encode_decode_empty_token(self): method test_decode_invalid_token (line 200) | def test_decode_invalid_token(self): method test_is_empty (line 220) | def test_is_empty(self): method test_has_more_pages (line 238) | def test_has_more_pages(self): class TestCursorBasedPaginationToken (line 257) | class TestCursorBasedPaginationToken: method test_token_creation (line 260) | def test_token_creation(self): method test_encode_decode (line 276) | def test_encode_decode(self): method test_decode_invalid_cursor_token (line 300) | def test_decode_invalid_cursor_token(self): class TestPaginationMetrics (line 316) | class TestPaginationMetrics: method test_metrics_creation (line 319) | def test_metrics_creation(self): method test_metrics_to_dict (line 345) | def test_metrics_to_dict(self): method test_metrics_edge_cases (line 375) | def test_metrics_edge_cases(self): class TestPaginationCacheEntry (line 392) | class TestPaginationCacheEntry: method setup_method (line 395) | def setup_method(self): method create_test_file (line 399) | def create_test_file(self, path: str) -> GenomicsFile: method test_cache_entry_creation (line 412) | def test_cache_entry_creation(self): method test_is_expired (line 439) | def test_is_expired(self): method test_update_timestamp (line 459) | def test_update_timestamp(self): class TestPaginationIntegration (line 478) | class TestPaginationIntegration: method test_token_roundtrip_consistency (line 481) | def test_token_roundtrip_consistency(self): method test_pagination_state_transitions (line 523) | def test_pagination_state_transitions(self): method test_pagination_metrics_accumulation (line 553) | def test_pagination_metrics_accumulation(self): FILE: src/aws-healthomics-mcp-server/tests/test_pattern_matcher.py class TestPatternMatcher (line 20) | class TestPatternMatcher: method setup_method (line 23) | def setup_method(self): method test_exact_match_score (line 27) | def test_exact_match_score(self): method test_substring_match_score (line 38) | def test_substring_match_score(self): method test_fuzzy_match_score (line 56) | def test_fuzzy_match_score(self): method test_calculate_match_score_single_pattern (line 72) | def test_calculate_match_score_single_pattern(self): method test_calculate_match_score_multiple_patterns (line 89) | def test_calculate_match_score_multiple_patterns(self): method test_calculate_match_score_edge_cases (line 103) | def test_calculate_match_score_edge_cases(self): method test_match_file_path (line 123) | def test_match_file_path(self): method test_match_file_path_edge_cases (line 144) | def test_match_file_path_edge_cases(self): method test_match_tags (line 156) | def test_match_tags(self): method test_match_tags_edge_cases (line 182) | def test_match_tags_edge_cases(self): method test_extract_filename_components (line 194) | def test_extract_filename_components(self): method test_genomics_specific_patterns (line 233) | def test_genomics_specific_patterns(self): method test_case_insensitive_matching (line 251) | def test_case_insensitive_matching(self): method test_special_characters_in_patterns (line 263) | def test_special_characters_in_patterns(self): method test_performance_with_long_patterns (line 277) | def test_performance_with_long_patterns(self): method test_unicode_handling (line 287) | def test_unicode_handling(self): FILE: src/aws-healthomics-mcp-server/tests/test_performance_comparison.py function test_performance_improvement_demonstration (line 23) | def test_performance_improvement_demonstration(): FILE: src/aws-healthomics-mcp-server/tests/test_pricing_cache.py class TestPricingCacheGetInstanceSpecs (line 22) | class TestPricingCacheGetInstanceSpecs: method test_get_instance_specs_m_xlarge (line 25) | def test_get_instance_specs_m_xlarge(self): method test_get_instance_specs_c_2xlarge (line 31) | def test_get_instance_specs_c_2xlarge(self): method test_get_instance_specs_r_4xlarge (line 37) | def test_get_instance_specs_r_4xlarge(self): method test_get_instance_specs_large (line 43) | def test_get_instance_specs_large(self): method test_get_instance_specs_48xlarge (line 49) | def test_get_instance_specs_48xlarge(self): method test_get_instance_specs_invalid_format (line 55) | def test_get_instance_specs_invalid_format(self): method test_get_instance_specs_unknown_size (line 61) | def test_get_instance_specs_unknown_size(self): method test_get_instance_specs_unknown_family_uses_default (line 67) | def test_get_instance_specs_unknown_family_uses_default(self): class TestPricingCacheCacheBehavior (line 74) | class TestPricingCacheCacheBehavior: method setup_method (line 77) | def setup_method(self): method teardown_method (line 82) | def teardown_method(self): method test_cache_miss_then_hit (line 87) | def test_cache_miss_then_hit(self): method test_cache_different_regions (line 120) | def test_cache_different_regions(self): method test_cache_size (line 168) | def test_cache_size(self): method test_clear_cache (line 179) | def test_clear_cache(self): class TestPricingCacheFetchFromApi (line 188) | class TestPricingCacheFetchFromApi: method setup_method (line 191) | def setup_method(self): method teardown_method (line 196) | def teardown_method(self): method test_fetch_price_unknown_region (line 201) | def test_fetch_price_unknown_region(self): method test_fetch_price_empty_price_list (line 206) | def test_fetch_price_empty_price_list(self): method test_fetch_price_api_exception (line 216) | def test_fetch_price_api_exception(self): method test_fetch_price_storage_type (line 226) | def test_fetch_price_storage_type(self): class TestPricingCacheConstants (line 259) | class TestPricingCacheConstants: method test_size_to_cpus_mapping (line 262) | def test_size_to_cpus_mapping(self): method test_family_memory_ratio_mapping (line 275) | def test_family_memory_ratio_mapping(self): method test_region_name_map (line 281) | def test_region_name_map(self): class TestPricingCacheGetPriceWithError (line 289) | class TestPricingCacheGetPriceWithError: method setup_method (line 292) | def setup_method(self): method teardown_method (line 297) | def teardown_method(self): method test_get_price_with_error_success (line 302) | def test_get_price_with_error_success(self): method test_get_price_with_error_api_unavailable (line 330) | def test_get_price_with_error_api_unavailable(self): method test_get_price_with_error_empty_price_list (line 344) | def test_get_price_with_error_empty_price_list(self): method test_get_price_with_error_unknown_region (line 359) | def test_get_price_with_error_unknown_region(self): method test_get_price_with_error_uses_cache (line 368) | def test_get_price_with_error_uses_cache(self): FILE: src/aws-healthomics-mcp-server/tests/test_pull_through_cache_initiation.py function _create_mock_ptc_rules_response (line 44) | def _create_mock_ptc_rules_response(prefixes: list) -> dict: function _create_healthomics_registry_policy (line 54) | def _create_healthomics_registry_policy() -> str: function _create_healthomics_repository_policy (line 75) | def _create_healthomics_repository_policy() -> str: function _create_mock_ecr_client_with_healthomics_access (line 95) | def _create_mock_ecr_client_with_healthomics_access() -> MagicMock: class TestGetPullThroughCacheRuleForRepository (line 132) | class TestGetPullThroughCacheRuleForRepository: method test_finds_matching_rule (line 135) | def test_finds_matching_rule(self): method test_returns_none_for_no_match (line 147) | def test_returns_none_for_no_match(self): method test_returns_none_for_empty_rules (line 157) | def test_returns_none_for_empty_rules(self): method test_prefix_must_be_followed_by_slash (line 163) | def test_prefix_must_be_followed_by_slash(self): class TestInitiatePullThroughCache (line 183) | class TestInitiatePullThroughCache: method test_successful_pull_through (line 186) | def test_successful_pull_through(self): method test_image_not_found_in_upstream (line 214) | def test_image_not_found_in_upstream(self): method test_repository_not_found_exception (line 238) | def test_repository_not_found_exception(self): method test_access_denied_exception (line 261) | def test_access_denied_exception(self): method test_with_image_digest (line 284) | def test_with_image_digest(self): class TestCheckPullThroughCacheHealthOmicsUsability (line 319) | class TestCheckPullThroughCacheHealthOmicsUsability: method test_usable_when_fully_configured (line 322) | def test_usable_when_fully_configured(self): method test_not_usable_when_no_registry_policy (line 336) | def test_not_usable_when_no_registry_policy(self): method test_not_usable_when_no_template (line 360) | def test_not_usable_when_no_template(self): method test_not_ptc_for_regular_repository (line 384) | def test_not_ptc_for_regular_repository(self): class TestCheckContainerAvailabilityWithPullThroughInitiation (line 403) | class TestCheckContainerAvailabilityWithPullThroughInitiation: method tool_wrapper (line 407) | def tool_wrapper(self): method test_initiates_pull_through_on_image_not_found (line 412) | async def test_initiates_pull_through_on_image_not_found(self, tool_wr... method test_initiates_pull_through_on_repository_not_found (line 460) | async def test_initiates_pull_through_on_repository_not_found(self, to... method test_no_pull_through_when_flag_is_false (line 506) | async def test_no_pull_through_when_flag_is_false(self, tool_wrapper): method test_no_pull_through_for_non_ptc_repository (line 540) | async def test_no_pull_through_for_non_ptc_repository(self, tool_wrapp... method test_no_pull_through_when_healthomics_not_usable (line 574) | async def test_no_pull_through_when_healthomics_not_usable(self, tool_... method test_pull_through_failure_returns_not_available (line 618) | async def test_pull_through_failure_returns_not_available(self, tool_w... method test_image_already_available_no_pull_through_needed (line 663) | async def test_image_already_available_no_pull_through_needed(self, to... method test_response_includes_pull_through_fields (line 697) | async def test_response_includes_pull_through_fields(self, tool_wrapper): FILE: src/aws-healthomics-mcp-server/tests/test_reference_store_tools.py class TestResolveReferenceStoreId (line 44) | class TestResolveReferenceStoreId: method test_returns_explicit_id (line 47) | def test_returns_explicit_id(self): method test_auto_resolves_when_none (line 53) | def test_auto_resolves_when_none(self): method test_auto_resolves_when_empty_string (line 62) | def test_auto_resolves_when_empty_string(self): method test_raises_when_no_stores (line 70) | def test_raises_when_no_stores(self): class TestAutoResolveIntegration (line 82) | class TestAutoResolveIntegration: method test_list_references_auto_resolves (line 86) | async def test_list_references_auto_resolves(self): method test_list_import_jobs_auto_resolves (line 102) | async def test_list_import_jobs_auto_resolves(self): method test_get_reference_store_auto_resolves (line 116) | async def test_get_reference_store_auto_resolves(self): method test_auto_resolve_no_store_returns_error (line 135) | async def test_auto_resolve_no_store_returns_error(self): class TestListReferenceStores (line 150) | class TestListReferenceStores: method test_happy_path (line 156) | async def test_happy_path(self): method test_empty_results (line 184) | async def test_empty_results(self): method test_with_name_filter (line 193) | async def test_with_name_filter(self): method test_with_pagination (line 213) | async def test_with_pagination(self): method test_api_error (line 235) | async def test_api_error(self): class TestGetReferenceStore (line 250) | class TestGetReferenceStore: method test_happy_path (line 256) | async def test_happy_path(self): method test_not_found_error (line 278) | async def test_not_found_error(self): class TestListReferences (line 295) | class TestListReferences: method test_happy_path (line 301) | async def test_happy_path(self): method test_with_name_filter (line 326) | async def test_with_name_filter(self): method test_with_status_filter (line 338) | async def test_with_status_filter(self): method test_with_pagination (line 350) | async def test_with_pagination(self): method test_api_error (line 370) | async def test_api_error(self): class TestGetReferenceMetadata (line 385) | class TestGetReferenceMetadata: method test_happy_path (line 391) | async def test_happy_path(self): method test_not_found_error (line 425) | async def test_not_found_error(self): class TestStartReferenceImportJob (line 444) | class TestStartReferenceImportJob: method test_happy_path (line 450) | async def test_happy_path(self): method test_invalid_sources_json (line 485) | async def test_invalid_sources_json(self): method test_api_error (line 500) | async def test_api_error(self): class TestGetReferenceImportJob (line 521) | class TestGetReferenceImportJob: method test_happy_path_with_sources (line 527) | async def test_happy_path_with_sources(self): method test_not_found_error (line 563) | async def test_not_found_error(self): class TestListReferenceImportJobs (line 584) | class TestListReferenceImportJobs: method test_happy_path (line 590) | async def test_happy_path(self): method test_with_pagination (line 623) | async def test_with_pagination(self): method test_api_error (line 652) | async def test_api_error(self): FILE: src/aws-healthomics-mcp-server/tests/test_result_ranker.py class TestResultRanker (line 27) | class TestResultRanker: method ranker (line 31) | def ranker(self): method sample_results (line 36) | def sample_results(self): method test_init (line 68) | def test_init(self, ranker): method test_rank_results_by_relevance_score (line 72) | def test_rank_results_by_relevance_score(self, ranker, sample_results): method test_rank_results_empty_list (line 89) | def test_rank_results_empty_list(self, ranker): method test_rank_results_single_result (line 94) | def test_rank_results_single_result(self, ranker, sample_results): method test_rank_results_unsupported_sort_by (line 102) | def test_rank_results_unsupported_sort_by(self, ranker, sample_results): method test_rank_results_identical_scores (line 112) | def test_rank_results_identical_scores(self, ranker): method test_apply_pagination_basic (line 146) | def test_apply_pagination_basic(self, ranker, sample_results): method test_apply_pagination_empty_list (line 165) | def test_apply_pagination_empty_list(self, ranker): method test_apply_pagination_invalid_offset (line 170) | def test_apply_pagination_invalid_offset(self, ranker, sample_results): method test_apply_pagination_invalid_max_results (line 181) | def test_apply_pagination_invalid_max_results(self, ranker, sample_res... method test_apply_pagination_large_max_results (line 191) | def test_apply_pagination_large_max_results(self, ranker, sample_resul... method test_get_ranking_statistics_basic (line 197) | def test_get_ranking_statistics_basic(self, ranker, sample_results): method test_get_ranking_statistics_empty_list (line 218) | def test_get_ranking_statistics_empty_list(self, ranker): method test_get_ranking_statistics_single_result (line 225) | def test_get_ranking_statistics_single_result(self, ranker, sample_res... method test_get_ranking_statistics_identical_scores (line 243) | def test_get_ranking_statistics_identical_scores(self, ranker): method test_full_workflow (line 285) | def test_full_workflow(self, ranker, sample_results): method test_edge_cases_with_extreme_scores (line 304) | def test_edge_cases_with_extreme_scores(self, ranker): FILE: src/aws-healthomics-mcp-server/tests/test_run_analysis.py class TestNormalizeRunIds (line 39) | class TestNormalizeRunIds: method test_normalize_run_ids_list (line 42) | def test_normalize_run_ids_list(self): method test_normalize_run_ids_json_string (line 53) | def test_normalize_run_ids_json_string(self): method test_normalize_run_ids_comma_separated (line 64) | def test_normalize_run_ids_comma_separated(self): method test_normalize_run_ids_single_string (line 75) | def test_normalize_run_ids_single_string(self): method test_normalize_run_ids_with_spaces (line 86) | def test_normalize_run_ids_with_spaces(self): method test_normalize_run_ids_fallback_case (line 97) | def test_normalize_run_ids_fallback_case(self): class TestConvertDatetimeToString (line 109) | class TestConvertDatetimeToString: method test_convert_datetime_object (line 112) | def test_convert_datetime_object(self): method test_convert_dict_with_datetime (line 123) | def test_convert_dict_with_datetime(self): method test_convert_list_with_datetime (line 135) | def test_convert_list_with_datetime(self): method test_convert_non_datetime_object (line 147) | def test_convert_non_datetime_object(self): class TestSafeJsonDumps (line 159) | class TestSafeJsonDumps: method test_safe_json_dumps_with_datetime (line 162) | def test_safe_json_dumps_with_datetime(self): method test_safe_json_dumps_regular_data (line 174) | def test_safe_json_dumps_regular_data(self): class TestJsonSerializer (line 187) | class TestJsonSerializer: method test_json_serializer_datetime (line 190) | def test_json_serializer_datetime(self): method test_json_serializer_non_datetime_raises_error (line 201) | def test_json_serializer_non_datetime_raises_error(self): class TestExtractTaskMetricsFromManifest (line 211) | class TestExtractTaskMetricsFromManifest: method test_extract_task_metrics_complete_data (line 214) | def test_extract_task_metrics_complete_data(self): method test_extract_task_metrics_over_provisioned (line 260) | def test_extract_task_metrics_over_provisioned(self): method test_extract_task_metrics_under_provisioned (line 290) | def test_extract_task_metrics_under_provisioned(self): method test_extract_task_metrics_zero_reserved_resources (line 318) | def test_extract_task_metrics_zero_reserved_resources(self): method test_extract_task_metrics_missing_data (line 346) | def test_extract_task_metrics_missing_data(self): method test_extract_task_metrics_exception_handling (line 364) | def test_extract_task_metrics_exception_handling(self): class TestAggregateTaskMetrics (line 376) | class TestAggregateTaskMetrics: method test_aggregate_task_metrics_empty_list (line 379) | def test_aggregate_task_metrics_empty_list(self): method test_aggregate_task_metrics_single_task (line 387) | def test_aggregate_task_metrics_single_task(self): method test_aggregate_task_metrics_multiple_scattered_tasks (line 412) | def test_aggregate_task_metrics_multiple_scattered_tasks(self): method test_aggregate_task_metrics_with_instance_recommender (line 465) | def test_aggregate_task_metrics_with_instance_recommender(self): method test_aggregate_task_metrics_without_instance_recommender (line 510) | def test_aggregate_task_metrics_without_instance_recommender(self): class TestParseManifestForAnalysis (line 536) | class TestParseManifestForAnalysis: method test_parse_manifest_for_analysis_complete_data (line 540) | async def test_parse_manifest_for_analysis_complete_data(self): method test_parse_manifest_for_analysis_no_events (line 604) | async def test_parse_manifest_for_analysis_no_events(self): method test_parse_manifest_for_analysis_invalid_json (line 618) | async def test_parse_manifest_for_analysis_invalid_json(self): method test_parse_manifest_for_analysis_exception_handling (line 640) | async def test_parse_manifest_for_analysis_exception_handling(self): class TestGenerateAnalysisReport (line 654) | class TestGenerateAnalysisReport: method test_generate_analysis_report_complete_data (line 658) | async def test_generate_analysis_report_complete_data(self): method test_generate_analysis_report_multiple_instance_types (line 726) | async def test_generate_analysis_report_multiple_instance_types(self): method test_generate_analysis_report_no_runs (line 798) | async def test_generate_analysis_report_no_runs(self): method test_generate_analysis_report_exception_handling (line 819) | async def test_generate_analysis_report_exception_handling(self): class TestGetRunAnalysisData (line 832) | class TestGetRunAnalysisData: method test_get_run_analysis_data_success (line 838) | async def test_get_run_analysis_data_success(self, mock_get_logs, mock... method test_get_run_analysis_data_no_uuid (line 887) | async def test_get_run_analysis_data_no_uuid(self, mock_get_omics_clie... method test_get_run_analysis_data_exception_handling (line 909) | async def test_get_run_analysis_data_exception_handling(self, mock_get... method test_get_run_analysis_data_get_run_exception (line 926) | async def test_get_run_analysis_data_get_run_exception( method test_get_run_analysis_data_manifest_logs_exception (line 959) | async def test_get_run_analysis_data_manifest_logs_exception( class TestAnalyzeRunPerformance (line 987) | class TestAnalyzeRunPerformance: method test_analyze_run_performance_success (line 993) | async def test_analyze_run_performance_success(self, mock_generate_rep... method test_analyze_run_performance_no_data (line 1020) | async def test_analyze_run_performance_no_data(self, mock_get_data): method test_analyze_run_performance_exception_handling (line 1038) | async def test_analyze_run_performance_exception_handling(self, mock_g... method test_analyze_run_performance_normalize_run_ids (line 1056) | async def test_analyze_run_performance_normalize_run_ids(self): method test_analyze_run_performance_negative_headroom_rejected (line 1076) | async def test_analyze_run_performance_negative_headroom_rejected(self): method test_analyze_run_performance_zero_headroom_allowed (line 1090) | async def test_analyze_run_performance_zero_headroom_allowed(self): function task_cost_strategy (line 1124) | def task_cost_strategy(): class TestRunAnalysisPropertyBased (line 1135) | class TestRunAnalysisPropertyBased: method test_property_total_cost_equals_sum_of_parts (line 1147) | def test_property_total_cost_equals_sum_of_parts( method test_property_grand_total_equals_sum_of_runs (line 1195) | def test_property_grand_total_equals_sum_of_runs(self, run_summaries: ... class TestAggregateCrossRunMetrics (line 1228) | class TestAggregateCrossRunMetrics: method test_aggregate_cross_run_metrics_empty_list (line 1231) | def test_aggregate_cross_run_metrics_empty_list(self): method test_aggregate_cross_run_metrics_single_run (line 1243) | def test_aggregate_cross_run_metrics_single_run(self): method test_aggregate_cross_run_metrics_multiple_runs (line 1277) | def test_aggregate_cross_run_metrics_multiple_runs(self): method test_aggregate_cross_run_metrics_with_instance_recommender (line 1355) | def test_aggregate_cross_run_metrics_with_instance_recommender(self): class TestCrossRunAggregationInTaskAggregator (line 1414) | class TestCrossRunAggregationInTaskAggregator: method test_aggregate_cross_run_tasks_empty_list (line 1417) | def test_aggregate_cross_run_tasks_empty_list(self): method test_aggregate_cross_run_tasks_no_task_metrics (line 1430) | def test_aggregate_cross_run_tasks_no_task_metrics(self): method test_aggregate_cross_run_tasks_multiple_runs (line 1447) | def test_aggregate_cross_run_tasks_multiple_runs(self): class TestParseManifestStorageCost (line 1498) | class TestParseManifestStorageCost: method test_parse_manifest_with_storage_cost_calculation (line 1502) | async def test_parse_manifest_with_storage_cost_calculation(self): method test_parse_manifest_with_json_decode_error (line 1572) | async def test_parse_manifest_with_json_decode_error(self): method test_parse_manifest_with_exception_in_message_parsing (line 1615) | async def test_parse_manifest_with_exception_in_message_parsing(self): class TestGenerateAnalysisReportCrossRunComparison (line 1655) | class TestGenerateAnalysisReportCrossRunComparison: method test_generate_analysis_report_with_cross_run_comparison (line 1659) | async def test_generate_analysis_report_with_cross_run_comparison(self): method test_generate_analysis_report_with_cross_run_aggregates (line 1743) | async def test_generate_analysis_report_with_cross_run_aggregates(self): method test_generate_analysis_report_single_run_no_cross_run_comparison (line 1838) | async def test_generate_analysis_report_single_run_no_cross_run_compar... method test_generate_analysis_report_with_high_priority_savings (line 1881) | async def test_generate_analysis_report_with_high_priority_savings(self): method test_generate_analysis_report_with_aggregated_metrics (line 1938) | async def test_generate_analysis_report_with_aggregated_metrics(self): method test_generate_analysis_report_with_detailed_json (line 2000) | async def test_generate_analysis_report_with_detailed_json(self): method test_generate_analysis_report_detailed_true_shows_all_tasks (line 2050) | async def test_generate_analysis_report_detailed_true_shows_all_tasks(... method test_generate_analysis_report_detailed_false_shows_summaries (line 2166) | async def test_generate_analysis_report_detailed_false_shows_summaries... method test_generate_analysis_report_detailed_false_still_shows_high_priority (line 2305) | async def test_generate_analysis_report_detailed_false_still_shows_hig... method test_generate_analysis_report_detailed_false_groups_scattered_under_provisioned (line 2374) | async def test_generate_analysis_report_detailed_false_groups_scattere... class TestNormalizeRunIdsEdgeCases (line 2461) | class TestNormalizeRunIdsEdgeCases: method test_normalize_run_ids_fallback_with_integer (line 2464) | def test_normalize_run_ids_fallback_with_integer(self): method test_normalize_run_ids_fallback_with_object (line 2475) | def test_normalize_run_ids_fallback_with_object(self): class TestGenerateAnalysisReportOverProvisionedTasks (line 2492) | class TestGenerateAnalysisReportOverProvisionedTasks: method test_generate_analysis_report_over_provisioned_with_recommendation (line 2496) | async def test_generate_analysis_report_over_provisioned_with_recommen... class TestParseManifestExceptionHandling (line 2553) | class TestParseManifestExceptionHandling: method test_parse_manifest_with_general_exception_in_event_loop (line 2557) | async def test_parse_manifest_with_general_exception_in_event_loop(self): class TestExtractTaskMetricsWithCostAnalyzer (line 2595) | class TestExtractTaskMetricsWithCostAnalyzer: method test_extract_task_metrics_with_cost_analyzer_none_result (line 2598) | def test_extract_task_metrics_with_cost_analyzer_none_result(self): class TestGenerateAnalysisReportInstanceSpecsEdgeCases (line 2633) | class TestGenerateAnalysisReportInstanceSpecsEdgeCases: method test_high_priority_savings_detailed_with_invalid_instance_specs (line 2637) | async def test_high_priority_savings_detailed_with_invalid_instance_sp... method test_high_priority_savings_non_detailed_with_invalid_instance_specs (line 2706) | async def test_high_priority_savings_non_detailed_with_invalid_instanc... method test_over_provisioned_tasks_detailed_with_invalid_instance_specs (line 2775) | async def test_over_provisioned_tasks_detailed_with_invalid_instance_s... method test_under_provisioned_tasks_non_detailed_with_invalid_instance_specs (line 2848) | async def test_under_provisioned_tasks_non_detailed_with_invalid_insta... method test_aggregated_metrics_with_invalid_instance_specs (line 2918) | async def test_aggregated_metrics_with_invalid_instance_specs(self): method test_cross_run_aggregates_with_invalid_instance_specs (line 2990) | async def test_cross_run_aggregates_with_invalid_instance_specs(self): method test_high_priority_savings_with_none_recommended_instance (line 3090) | async def test_high_priority_savings_with_none_recommended_instance(se... method test_aggregated_metrics_with_na_recommended_instance (line 3148) | async def test_aggregated_metrics_with_na_recommended_instance(self): FILE: src/aws-healthomics-mcp-server/tests/test_run_cache.py class TestCreateRunCacheRejectsMalformedS3URIs (line 72) | class TestCreateRunCacheRejectsMalformedS3URIs: method test_malformed_s3_uri_returns_error_without_api_call (line 88) | async def test_malformed_s3_uri_returns_error_without_api_call( class TestCreateRunCacheRejectsInvalidCacheBehavior (line 127) | class TestCreateRunCacheRejectsInvalidCacheBehavior: method test_invalid_cache_behavior_returns_error_without_api_call (line 143) | async def test_invalid_cache_behavior_returns_error_without_api_call( class TestCreateRunCacheForwardsOnlyProvidedOptionalParams (line 188) | class TestCreateRunCacheForwardsOnlyProvidedOptionalParams: method test_forwards_only_provided_optional_params (line 207) | async def test_forwards_only_provided_optional_params( class TestCreateRunCacheGeneratesValidUUID (line 281) | class TestCreateRunCacheGeneratesValidUUID: method test_generates_valid_uuid_request_id (line 297) | async def test_generates_valid_uuid_request_id(self, cache_behavior, n... class TestCreateRunCacheHeadBucketCalledWithCorrectBucket (line 352) | class TestCreateRunCacheHeadBucketCalledWithCorrectBucket: method test_head_bucket_called_with_correct_bucket_name (line 367) | async def test_head_bucket_called_with_correct_bucket_name(self, cache... class TestCreateRunCacheInaccessibleBucketPreventsApiCall (line 411) | class TestCreateRunCacheInaccessibleBucketPreventsApiCall: method test_inaccessible_bucket_returns_error_without_omics_call (line 428) | async def test_inaccessible_bucket_returns_error_without_omics_call( class TestGetRunCacheDatetimeSerialization (line 493) | class TestGetRunCacheDatetimeSerialization: method test_get_returns_all_fields_with_datetime_serialized (line 518) | async def test_get_returns_all_fields_with_datetime_serialized( class TestListRunCachesForwardsOnlyProvidedFilterParams (line 595) | class TestListRunCachesForwardsOnlyProvidedFilterParams: method test_forwards_only_provided_filter_params (line 614) | async def test_forwards_only_provided_filter_params( class TestListRunCachesNextTokenPresence (line 670) | class TestListRunCachesNextTokenPresence: method test_next_token_present_iff_api_response_has_it (line 687) | async def test_next_token_present_iff_api_response_has_it( class TestUpdateRunCacheForwardsOnlyProvidedOptionalFields (line 743) | class TestUpdateRunCacheForwardsOnlyProvidedOptionalFields: method test_forwards_only_provided_optional_fields (line 765) | async def test_forwards_only_provided_optional_fields( class TestAllToolsReturnStructuredErrorsOnApiExceptions (line 818) | class TestAllToolsReturnStructuredErrorsOnApiExceptions: method test_create_run_cache_returns_error_on_api_exception (line 831) | async def test_create_run_cache_returns_error_on_api_exception(self, e... method test_get_run_cache_returns_error_on_api_exception (line 867) | async def test_get_run_cache_returns_error_on_api_exception(self, erro... method test_list_run_caches_returns_error_on_api_exception (line 892) | async def test_list_run_caches_returns_error_on_api_exception(self, er... method test_update_run_cache_returns_error_on_api_exception (line 914) | async def test_update_run_cache_returns_error_on_api_exception(self, e... class TestCreateRunCacheUnitTests (line 941) | class TestCreateRunCacheUnitTests: method test_create_with_all_params (line 945) | async def test_create_with_all_params(self): method test_create_with_minimal_params (line 1000) | async def test_create_with_minimal_params(self): method test_create_s3_bucket_not_found (line 1048) | async def test_create_s3_bucket_not_found(self): method test_create_s3_access_denied (line 1095) | async def test_create_s3_access_denied(self): class TestGetRunCacheUnitTests (line 1142) | class TestGetRunCacheUnitTests: method test_get_with_all_fields (line 1146) | async def test_get_with_all_fields(self): class TestListRunCachesUnitTests (line 1190) | class TestListRunCachesUnitTests: method test_list_empty_results (line 1194) | async def test_list_empty_results(self): method test_list_with_pagination (line 1215) | async def test_list_with_pagination(self): class TestUpdateRunCacheUnitTests (line 1252) | class TestUpdateRunCacheUnitTests: method test_update_with_partial_params (line 1256) | async def test_update_with_partial_params(self): method test_update_raises_unexpected_exception (line 1285) | async def test_update_raises_unexpected_exception(self): class TestCreateRunCacheS3OtherErrorCode (line 1309) | class TestCreateRunCacheS3OtherErrorCode: method test_create_s3_unexpected_error_code (line 1313) | async def test_create_s3_unexpected_error_code(self): FILE: src/aws-healthomics-mcp-server/tests/test_run_group.py class TestCreateRunGroupForwardsOnlyProvidedParams (line 60) | class TestCreateRunGroupForwardsOnlyProvidedParams: method test_forwards_only_provided_optional_params (line 81) | async def test_forwards_only_provided_optional_params( class TestCreateRunGroupAutoGeneratesUUID (line 149) | class TestCreateRunGroupAutoGeneratesUUID: method test_auto_generates_valid_uuid_request_id (line 168) | async def test_auto_generates_valid_uuid_request_id( class TestCreateRunGroupReturnsArnIdTags (line 215) | class TestCreateRunGroupReturnsArnIdTags: method test_returns_arn_id_and_tags_from_api (line 238) | async def test_returns_arn_id_and_tags_from_api(self, rg_id, rg_arn, r... class TestGetRunGroupReturnsAllDetailFields (line 275) | class TestGetRunGroupReturnsAllDetailFields: method test_returns_all_detail_fields (line 297) | async def test_returns_all_detail_fields( class TestListRunGroupsForwardsOnlyProvidedFilterParams (line 360) | class TestListRunGroupsForwardsOnlyProvidedFilterParams: method test_forwards_only_provided_filter_params (line 377) | async def test_forwards_only_provided_filter_params(self, name, max_re... class TestListRunGroupsForwardsNextToken (line 422) | class TestListRunGroupsForwardsNextToken: method test_includes_next_token_when_present (line 438) | async def test_includes_next_token_when_present(self, next_token, max_... method test_excludes_next_token_when_absent (line 464) | async def test_excludes_next_token_when_absent(self, max_results): class TestUpdateRunGroupForwardsOnlyProvidedParams (line 490) | class TestUpdateRunGroupForwardsOnlyProvidedParams: method test_forwards_only_provided_update_params (line 511) | async def test_forwards_only_provided_update_params( class TestAllRunGroupToolsReturnStructuredErrorsOnApiFailure (line 580) | class TestAllRunGroupToolsReturnStructuredErrorsOnApiFailure: method test_create_run_group_returns_structured_error (line 593) | async def test_create_run_group_returns_structured_error(self, error_m... method test_get_run_group_returns_structured_error (line 633) | async def test_get_run_group_returns_structured_error(self, run_group_... method test_list_run_groups_returns_structured_error (line 668) | async def test_list_run_groups_returns_structured_error(self, error_msg): method test_update_run_group_returns_structured_error (line 706) | async def test_update_run_group_returns_structured_error(self, run_gro... function test_create_run_group_success_all_params (line 748) | async def test_create_run_group_success_all_params(): function test_create_run_group_success_minimal_params (line 788) | async def test_create_run_group_success_minimal_params(): function test_create_run_group_api_error (line 814) | async def test_create_run_group_api_error(): function test_get_run_group_success (line 841) | async def test_get_run_group_success(): function test_get_run_group_api_error (line 877) | async def test_get_run_group_api_error(): function test_list_run_groups_success (line 904) | async def test_list_run_groups_success(): function test_list_run_groups_with_filters (line 940) | async def test_list_run_groups_with_filters(): function test_list_run_groups_empty_response (line 964) | async def test_list_run_groups_empty_response(): function test_list_run_groups_pagination (line 981) | async def test_list_run_groups_pagination(): function test_list_run_groups_api_error (line 1008) | async def test_list_run_groups_api_error(): function test_update_run_group_success_all_params (line 1035) | async def test_update_run_group_success_all_params(): function test_update_run_group_success_partial_params (line 1068) | async def test_update_run_group_success_partial_params(): function test_update_run_group_success_name_only (line 1090) | async def test_update_run_group_success_name_only(): function test_update_run_group_api_error (line 1112) | async def test_update_run_group_api_error(): FILE: src/aws-healthomics-mcp-server/tests/test_run_group_models.py class TestRunGroupModelRoundTrip (line 47) | class TestRunGroupModelRoundTrip: method test_run_group_summary_round_trip (line 67) | def test_run_group_summary_round_trip( method test_run_group_detail_round_trip (line 118) | def test_run_group_detail_round_trip( method test_run_group_list_response_round_trip (line 158) | def test_run_group_list_response_round_trip( FILE: src/aws-healthomics-mcp-server/tests/test_run_timeline.py class TestExtractTaskForTimeline (line 25) | class TestExtractTaskForTimeline: method test_extract_task_with_all_fields (line 28) | def test_extract_task_with_all_fields(self): method test_extract_task_missing_creation_time (line 57) | def test_extract_task_missing_creation_time(self): method test_extract_task_missing_stop_time (line 67) | def test_extract_task_missing_stop_time(self): method test_extract_task_with_default_values (line 77) | def test_extract_task_with_default_values(self): class TestGenerateRunTimeline (line 94) | class TestGenerateRunTimeline: method test_generate_timeline_success (line 100) | async def test_generate_timeline_success(self, mock_get_logs, mock_get... method test_generate_timeline_invalid_time_unit (line 145) | async def test_generate_timeline_invalid_time_unit(self, mock_get_omic... method test_generate_timeline_no_tasks (line 160) | async def test_generate_timeline_no_tasks(self, mock_get_logs, mock_ge... method test_generate_timeline_run_without_uuid (line 184) | async def test_generate_timeline_run_without_uuid(self, mock_get_omics... method test_generate_timeline_exception_handling (line 204) | async def test_generate_timeline_exception_handling(self, mock_get_omi... method test_generate_timeline_base64_output (line 221) | async def test_generate_timeline_base64_output(self, mock_get_logs, mo... method test_generate_timeline_invalid_output_format (line 262) | async def test_generate_timeline_invalid_output_format(self, mock_get_... FILE: src/aws-healthomics-mcp-server/tests/test_run_timeline_output.py function _build_timeline_mocks (line 107) | def _build_timeline_mocks(task_count=1): class TestPathSanitizationSecurity (line 154) | class TestPathSanitizationSecurity: method test_null_bytes_rejected (line 171) | def test_null_bytes_rejected(self, base, injection_point): method test_traversal_sequences_rejected (line 201) | def test_traversal_sequences_rejected(self, prefix, suffix, traversal): method test_valid_paths_return_absolute (line 224) | def test_valid_paths_return_absolute(self, filename): method test_resolved_path_has_no_traversal (line 234) | def test_resolved_path_has_no_traversal(self, filename): method test_safe_arbitrary_strings_return_absolute (line 254) | def test_safe_arbitrary_strings_return_absolute(self, data): class TestLocalWriteRoundTrip (line 272) | class TestLocalWriteRoundTrip: method test_write_then_read_matches (line 298) | def test_write_then_read_matches(self, tmp_path, svg_content, path_suf... class TestLocalNoOverwrite (line 323) | class TestLocalNoOverwrite: method test_existing_file_raises_and_content_unchanged (line 350) | def test_existing_file_raises_and_content_unchanged( class TestParentDirectoryCreation (line 387) | class TestParentDirectoryCreation: method test_nested_dirs_created_and_file_written (line 410) | def test_nested_dirs_created_and_file_written( class TestContentResolverRefactorRegression (line 453) | class TestContentResolverRefactorRegression: method test_detect_content_input_type_s3_uri (line 459) | def test_detect_content_input_type_s3_uri(self): method test_detect_content_input_type_inline (line 468) | def test_detect_content_input_type_inline(self): method test_detect_content_input_type_local_file (line 477) | def test_detect_content_input_type_local_file(self, tmp_path): method test_path_traversal_rejected_via_shared_import (line 488) | def test_path_traversal_rejected_via_shared_import(self): method test_s3_uri_validation_via_shared_import (line 499) | def test_s3_uri_validation_via_shared_import(self): method test_shared_validate_local_path_is_same_function (line 509) | def test_shared_validate_local_path_is_same_function(self): method test_shared_validate_s3_uri_format_is_same_function (line 519) | def test_shared_validate_s3_uri_format_is_same_function(self): method test_resolve_single_content_local_file (line 529) | async def test_resolve_single_content_local_file(self, tmp_path): method test_resolve_bundle_content_local_dir (line 543) | async def test_resolve_bundle_content_local_dir(self, tmp_path): class TestS3UploadCorrectness (line 563) | class TestS3UploadCorrectness: method test_put_object_called_with_correct_args_and_path_returned (line 579) | def test_put_object_called_with_correct_args_and_path_returned(self, s... class TestS3NoOverwrite (line 630) | class TestS3NoOverwrite: method test_existing_object_raises_file_exists_and_no_put_object (line 645) | def test_existing_object_raises_file_exists_and_no_put_object(self, sv... class TestS3PathFormatValidation (line 686) | class TestS3PathFormatValidation: method test_empty_bucket_rejected (line 700) | def test_empty_bucket_rejected(self, svg_content): method test_bare_s3_prefix_rejected (line 729) | def test_bare_s3_prefix_rejected(self, svg_content): method test_invalid_bucket_name_rejected (line 772) | def test_invalid_bucket_name_rejected(self, svg_content, invalid_bucke... method test_empty_key_rejected (line 803) | def test_empty_key_rejected(self, svg_content, bucket): class TestExpectedBucketOwnerResolution (line 835) | class TestExpectedBucketOwnerResolution: method test_none_skips_expected_bucket_owner (line 847) | def test_none_skips_expected_bucket_owner(self): method test_explicit_account_id_passed_to_head_bucket (line 866) | def test_explicit_account_id_passed_to_head_bucket(self, account_id): method test_arbitrary_non_none_string_passed_to_head_bucket (line 887) | def test_arbitrary_non_none_string_passed_to_head_bucket(self, owner_s... class TestOutputPathRoutingCorrectness (line 910) | class TestOutputPathRoutingCorrectness: method test_s3_path_routes_to_s3_handler (line 925) | async def test_s3_path_routes_to_s3_handler(self, data): method test_non_s3_path_routes_to_local_handler (line 977) | async def test_non_s3_path_routes_to_local_handler(self, local_path): method test_none_output_path_returns_svg_content (line 1017) | async def test_none_output_path_returns_svg_content(self): class TestSuccessResponseStructure (line 1065) | class TestSuccessResponseStructure: method test_local_success_response_has_exact_keys_and_status (line 1080) | async def test_local_success_response_has_exact_keys_and_status(self, ... method test_s3_success_response_has_exact_keys_and_status (line 1143) | async def test_s3_success_response_has_exact_keys_and_status(self, data): class TestErrorHandlingConsistency (line 1218) | class TestErrorHandlingConsistency: method test_value_error_delegates_to_handle_tool_error (line 1232) | async def test_value_error_delegates_to_handle_tool_error(self, data): method test_file_exists_error_delegates_to_handle_tool_error (line 1279) | async def test_file_exists_error_delegates_to_handle_tool_error(self, ... method test_os_error_delegates_to_handle_tool_error (line 1326) | async def test_os_error_delegates_to_handle_tool_error(self, data): method test_client_error_delegates_to_handle_tool_error (line 1373) | async def test_client_error_delegates_to_handle_tool_error(self, data): class TestGenerateRunTimelineOutputPathIntegration (line 1436) | class TestGenerateRunTimelineOutputPathIntegration: method test_none_output_path_returns_base64_svg (line 1452) | async def test_none_output_path_returns_base64_svg(self): method test_none_output_path_returns_raw_svg (line 1490) | async def test_none_output_path_returns_raw_svg(self): method test_local_file_write_end_to_end (line 1527) | async def test_local_file_write_end_to_end(self, tmp_path): method test_s3_write_end_to_end (line 1575) | async def test_s3_write_end_to_end(self): method test_sentinel_default_triggers_get_account_id (line 1632) | async def test_sentinel_default_triggers_get_account_id(self): method test_explicit_none_skips_get_account_id (line 1682) | async def test_explicit_none_skips_get_account_id(self): method test_error_file_exists (line 1729) | async def test_error_file_exists(self): method test_error_permission_denied (line 1772) | async def test_error_permission_denied(self): method test_error_s3_bucket_not_found (line 1814) | async def test_error_s3_bucket_not_found(self): method test_error_s3_access_denied (line 1865) | async def test_error_s3_access_denied(self): method test_error_s3_bucket_owner_mismatch (line 1920) | async def test_error_s3_bucket_owner_mismatch(self): FILE: src/aws-healthomics-mcp-server/tests/test_s3_file_model.py class TestS3File (line 32) | class TestS3File: method test_s3_file_creation (line 35) | def test_s3_file_creation(self): method test_s3_file_from_uri (line 48) | def test_s3_file_from_uri(self): method test_s3_file_validation (line 60) | def test_s3_file_validation(self): method test_s3_file_bucket_validation_edge_cases (line 74) | def test_s3_file_bucket_validation_edge_cases(self): method test_s3_file_key_validation_edge_cases (line 159) | def test_s3_file_key_validation_edge_cases(self): method test_get_presigned_url (line 167) | def test_get_presigned_url(self, mock_get_session): method test_get_presigned_url_with_version_id (line 192) | def test_get_presigned_url_with_version_id(self, mock_get_session): method test_get_presigned_url_put_object (line 218) | def test_get_presigned_url_put_object(self, mock_get_session): method test_s3_file_from_uri_edge_cases (line 243) | def test_s3_file_from_uri_edge_cases(self): method test_s3_file_properties (line 257) | def test_s3_file_properties(self): method test_s3_file_key_manipulation (line 271) | def test_s3_file_key_manipulation(self): method test_s3_file_directory_operations (line 288) | def test_s3_file_directory_operations(self): class TestGenomicsFileIntegration (line 301) | class TestGenomicsFileIntegration: method test_genomics_file_s3_integration (line 304) | def test_genomics_file_s3_integration(self): method test_genomics_file_from_s3_file (line 326) | def test_genomics_file_from_s3_file(self): class TestS3Utilities (line 346) | class TestS3Utilities: method test_create_s3_file_from_object (line 349) | def test_create_s3_file_from_object(self): method test_create_genomics_file_from_s3_object (line 370) | def test_create_genomics_file_from_s3_object(self): method test_build_and_parse_s3_uri (line 391) | def test_build_and_parse_s3_uri(self): method test_get_s3_file_associations (line 412) | def test_get_s3_file_associations(self): method test_get_s3_file_associations_fastq_patterns (line 438) | def test_get_s3_file_associations_fastq_patterns(self): FILE: src/aws-healthomics-mcp-server/tests/test_s3_search_engine.py class TestS3SearchEngine (line 32) | class TestS3SearchEngine: method search_config (line 36) | def search_config(self): method mock_s3_client (line 51) | def mock_s3_client(self): method search_engine (line 80) | def search_engine(self, search_config, mock_s3_client): method test_init (line 89) | def test_init(self, search_config): method test_direct_constructor_prevented (line 106) | def test_direct_constructor_prevented(self, search_config): method test_from_environment (line 118) | def test_from_environment(self, mock_session, mock_validate, mock_conf... method test_from_environment_validation_error (line 140) | def test_from_environment_validation_error(self, mock_validate, mock_c... method test_from_environment_empty_configured_buckets (line 150) | def test_from_environment_empty_configured_buckets(self, mock_session,... method test_search_buckets_success (line 163) | async def test_search_buckets_success(self, search_engine): method test_search_buckets_empty_paths (line 190) | async def test_search_buckets_empty_paths(self, search_engine): method test_search_buckets_with_timeout (line 199) | async def test_search_buckets_with_timeout(self, search_engine): method test_search_buckets_paginated (line 218) | async def test_search_buckets_paginated(self, search_engine): method test_search_buckets_paginated_empty_paths (line 239) | async def test_search_buckets_paginated_empty_paths(self, search_engine): method test_search_buckets_paginated_invalid_continuation_token (line 251) | async def test_search_buckets_paginated_invalid_continuation_token(sel... method test_search_buckets_paginated_buffer_overflow (line 273) | async def test_search_buckets_paginated_buffer_overflow(self, search_e... method test_search_buckets_paginated_exception_handling (line 312) | async def test_search_buckets_paginated_exception_handling(self, searc... method test_search_buckets_paginated_unexpected_result_type (line 333) | async def test_search_buckets_paginated_unexpected_result_type(self, s... method test_validate_bucket_access_success (line 356) | async def test_validate_bucket_access_success(self, search_engine): method test_validate_bucket_access_failure (line 366) | async def test_validate_bucket_access_failure(self, search_engine): method test_list_s3_objects (line 376) | async def test_list_s3_objects(self, search_engine): method test_list_s3_objects_empty (line 399) | async def test_list_s3_objects_empty(self, search_engine): method test_list_s3_objects_client_error (line 410) | async def test_list_s3_objects_client_error(self, search_engine): method test_list_s3_objects_paginated (line 420) | async def test_list_s3_objects_paginated(self, search_engine): method test_create_genomics_file_from_object (line 457) | def test_create_genomics_file_from_object(self, search_engine): method test_get_object_tags_cached (line 478) | async def test_get_object_tags_cached(self, search_engine): method test_get_object_tags_error (line 496) | async def test_get_object_tags_error(self, search_engine): method test_matches_file_type_filter (line 505) | def test_matches_file_type_filter(self, search_engine): method test_matches_search_terms (line 519) | def test_matches_search_terms(self, search_engine): method test_is_related_index_file (line 536) | def test_is_related_index_file(self, search_engine): method test_create_search_cache_key (line 547) | def test_create_search_cache_key(self, search_engine): method test_cache_operations (line 568) | def test_cache_operations(self, search_engine): method test_get_cache_stats (line 595) | def test_get_cache_stats(self, search_engine): method test_cleanup_expired_cache_entries (line 629) | def test_cleanup_expired_cache_entries(self, search_engine): method test_cleanup_cache_by_size_tag_cache (line 644) | def test_cleanup_cache_by_size_tag_cache(self, search_engine): method test_cleanup_cache_by_size_result_cache (line 676) | def test_cleanup_cache_by_size_result_cache(self, search_engine): method test_cleanup_cache_by_size_no_cleanup_needed (line 710) | def test_cleanup_cache_by_size_no_cleanup_needed(self, search_engine): method test_automatic_tag_cache_size_cleanup (line 735) | async def test_automatic_tag_cache_size_cleanup(self, search_engine): method test_automatic_result_cache_size_cleanup (line 753) | def test_automatic_result_cache_size_cleanup(self, search_engine): method test_smart_cache_cleanup_prioritizes_expired_entries (line 766) | def test_smart_cache_cleanup_prioritizes_expired_entries(self, search_... method test_smart_cache_cleanup_only_expired_entries (line 811) | def test_smart_cache_cleanup_only_expired_entries(self, search_engine): method test_search_single_bucket_path_optimized_success (line 860) | async def test_search_single_bucket_path_optimized_success(self, searc... method test_search_single_bucket_path_optimized_with_tags (line 912) | async def test_search_single_bucket_path_optimized_with_tags(self, sea... method test_search_single_bucket_path_optimized_no_search_terms (line 953) | async def test_search_single_bucket_path_optimized_no_search_terms(sel... method test_search_single_bucket_path_optimized_file_type_filtering (line 985) | async def test_search_single_bucket_path_optimized_file_type_filtering... method test_search_single_bucket_path_optimized_exception_handling (line 1028) | async def test_search_single_bucket_path_optimized_exception_handling(... method test_search_single_bucket_path_paginated_success (line 1042) | async def test_search_single_bucket_path_paginated_success(self, searc... method test_search_single_bucket_path_paginated_with_tags (line 1080) | async def test_search_single_bucket_path_paginated_with_tags(self, sea... method test_search_single_bucket_path_paginated_exception_handling (line 1122) | async def test_search_single_bucket_path_paginated_exception_handling(... method test_get_tags_for_objects_batch_empty_keys (line 1134) | async def test_get_tags_for_objects_batch_empty_keys(self, search_engi... method test_get_tags_for_objects_batch_all_cached (line 1141) | async def test_get_tags_for_objects_batch_all_cached(self, search_engi... method test_get_tags_for_objects_batch_expired_cache (line 1165) | async def test_get_tags_for_objects_batch_expired_cache(self, search_e... method test_get_tags_for_objects_batch_with_batching (line 1185) | async def test_get_tags_for_objects_batch_with_batching(self, search_e... method test_get_tags_for_objects_batch_with_exceptions (line 1204) | async def test_get_tags_for_objects_batch_with_exceptions(self, search... method test_list_s3_objects_paginated_success (line 1221) | async def test_list_s3_objects_paginated_success(self, search_engine): method test_list_s3_objects_paginated_no_continuation_token (line 1251) | async def test_list_s3_objects_paginated_no_continuation_token(self, s... method test_list_s3_objects_paginated_empty_result (line 1279) | async def test_list_s3_objects_paginated_empty_result(self, search_eng... method test_list_s3_objects_paginated_client_error (line 1294) | async def test_list_s3_objects_paginated_client_error(self, search_eng... method test_matches_file_type_filter_exact_match (line 1303) | def test_matches_file_type_filter_exact_match(self, search_engine): method test_matches_file_type_filter_no_filter (line 1308) | def test_matches_file_type_filter_no_filter(self, search_engine): method test_matches_file_type_filter_no_match (line 1313) | def test_matches_file_type_filter_no_match(self, search_engine): method test_matches_file_type_filter_case_insensitive (line 1318) | def test_matches_file_type_filter_case_insensitive(self, search_engine): method test_matches_search_terms_path_and_tags (line 1323) | def test_matches_search_terms_path_and_tags(self, search_engine): method test_matches_search_terms_tags_only (line 1335) | def test_matches_search_terms_tags_only(self, search_engine): method test_matches_search_terms_no_match (line 1346) | def test_matches_search_terms_no_match(self, search_engine): method test_is_related_index_file_bam_bai (line 1355) | def test_is_related_index_file_bam_bai(self, search_engine): method test_is_related_index_file_fastq_no_index (line 1360) | def test_is_related_index_file_fastq_no_index(self, search_engine): method test_is_related_index_file_vcf_tbi (line 1365) | def test_is_related_index_file_vcf_tbi(self, search_engine): method test_is_related_index_file_fasta_fai (line 1370) | def test_is_related_index_file_fasta_fai(self, search_engine): method test_is_related_index_file_no_relationship (line 1375) | def test_is_related_index_file_no_relationship(self, search_engine): method test_search_buckets_with_cached_results (line 1381) | async def test_search_buckets_with_cached_results(self, search_engine): method test_get_tags_for_objects_batch_with_client_error (line 1393) | async def test_get_tags_for_objects_batch_with_client_error(self, sear... FILE: src/aws-healthomics-mcp-server/tests/test_s3_utils.py class TestEnsureS3UriEndsWithSlash (line 29) | class TestEnsureS3UriEndsWithSlash: method test_ensure_s3_uri_ends_with_slash_already_has_slash (line 32) | def test_ensure_s3_uri_ends_with_slash_already_has_slash(self): method test_ensure_s3_uri_ends_with_slash_no_slash (line 38) | def test_ensure_s3_uri_ends_with_slash_no_slash(self): method test_ensure_s3_uri_ends_with_slash_root_bucket (line 44) | def test_ensure_s3_uri_ends_with_slash_root_bucket(self): method test_ensure_s3_uri_ends_with_slash_root_bucket_with_slash (line 50) | def test_ensure_s3_uri_ends_with_slash_root_bucket_with_slash(self): method test_ensure_s3_uri_ends_with_slash_invalid_scheme (line 56) | def test_ensure_s3_uri_ends_with_slash_invalid_scheme(self): method test_ensure_s3_uri_ends_with_slash_empty_string (line 62) | def test_ensure_s3_uri_ends_with_slash_empty_string(self): method test_ensure_s3_uri_ends_with_slash_complex_path (line 68) | def test_ensure_s3_uri_ends_with_slash_complex_path(self): class TestParseS3Path (line 75) | class TestParseS3Path: method test_parse_s3_path_valid_bucket_only (line 78) | def test_parse_s3_path_valid_bucket_only(self): method test_parse_s3_path_valid_bucket_with_slash (line 84) | def test_parse_s3_path_valid_bucket_with_slash(self): method test_parse_s3_path_valid_with_prefix (line 90) | def test_parse_s3_path_valid_with_prefix(self): method test_parse_s3_path_valid_with_prefix_and_slash (line 96) | def test_parse_s3_path_valid_with_prefix_and_slash(self): method test_parse_s3_path_invalid_no_s3_scheme (line 102) | def test_parse_s3_path_invalid_no_s3_scheme(self): method test_parse_s3_path_invalid_empty_string (line 107) | def test_parse_s3_path_invalid_empty_string(self): method test_parse_s3_path_invalid_no_bucket (line 112) | def test_parse_s3_path_invalid_no_bucket(self): method test_parse_s3_path_invalid_only_slash (line 117) | def test_parse_s3_path_invalid_only_slash(self): method test_parse_s3_path_complex_prefix (line 122) | def test_parse_s3_path_complex_prefix(self): class TestIsValidBucketName (line 129) | class TestIsValidBucketName: method test_is_valid_bucket_name_valid_simple (line 132) | def test_is_valid_bucket_name_valid_simple(self): method test_is_valid_bucket_name_valid_with_hyphens (line 136) | def test_is_valid_bucket_name_valid_with_hyphens(self): method test_is_valid_bucket_name_valid_with_numbers (line 140) | def test_is_valid_bucket_name_valid_with_numbers(self): method test_is_valid_bucket_name_valid_with_dots (line 145) | def test_is_valid_bucket_name_valid_with_dots(self): method test_is_valid_bucket_name_valid_minimum_length (line 149) | def test_is_valid_bucket_name_valid_minimum_length(self): method test_is_valid_bucket_name_valid_maximum_length (line 153) | def test_is_valid_bucket_name_valid_maximum_length(self): method test_is_valid_bucket_name_invalid_empty (line 158) | def test_is_valid_bucket_name_invalid_empty(self): method test_is_valid_bucket_name_invalid_too_short (line 162) | def test_is_valid_bucket_name_invalid_too_short(self): method test_is_valid_bucket_name_invalid_too_long (line 166) | def test_is_valid_bucket_name_invalid_too_long(self): method test_is_valid_bucket_name_invalid_uppercase (line 171) | def test_is_valid_bucket_name_invalid_uppercase(self): method test_is_valid_bucket_name_invalid_special_chars (line 176) | def test_is_valid_bucket_name_invalid_special_chars(self): method test_is_valid_bucket_name_invalid_starts_with_hyphen (line 182) | def test_is_valid_bucket_name_invalid_starts_with_hyphen(self): method test_is_valid_bucket_name_invalid_ends_with_hyphen (line 186) | def test_is_valid_bucket_name_invalid_ends_with_hyphen(self): method test_is_valid_bucket_name_invalid_starts_with_dot (line 190) | def test_is_valid_bucket_name_invalid_starts_with_dot(self): method test_is_valid_bucket_name_invalid_ends_with_dot (line 194) | def test_is_valid_bucket_name_invalid_ends_with_dot(self): class TestValidateAndNormalizeS3Path (line 199) | class TestValidateAndNormalizeS3Path: method test_validate_and_normalize_s3_path_valid_simple (line 202) | def test_validate_and_normalize_s3_path_valid_simple(self): method test_validate_and_normalize_s3_path_valid_with_prefix (line 207) | def test_validate_and_normalize_s3_path_valid_with_prefix(self): method test_validate_and_normalize_s3_path_already_normalized (line 212) | def test_validate_and_normalize_s3_path_already_normalized(self): method test_validate_and_normalize_s3_path_invalid_scheme (line 217) | def test_validate_and_normalize_s3_path_invalid_scheme(self): method test_validate_and_normalize_s3_path_invalid_bucket_name (line 222) | def test_validate_and_normalize_s3_path_invalid_bucket_name(self): method test_validate_and_normalize_s3_path_empty_string (line 227) | def test_validate_and_normalize_s3_path_empty_string(self): method test_validate_and_normalize_s3_path_complex_valid (line 232) | def test_validate_and_normalize_s3_path_complex_valid(self): class TestValidateBucketAccess (line 238) | class TestValidateBucketAccess: method test_validate_bucket_access_empty_paths (line 241) | def test_validate_bucket_access_empty_paths(self): method test_validate_bucket_access_all_accessible (line 249) | def test_validate_bucket_access_all_accessible(self, mock_get_session): method test_validate_bucket_access_some_inaccessible (line 269) | def test_validate_bucket_access_some_inaccessible(self, mock_get_sessi... method test_validate_bucket_access_all_inaccessible (line 293) | def test_validate_bucket_access_all_inaccessible(self, mock_get_session): method test_validate_bucket_access_no_credentials (line 312) | def test_validate_bucket_access_no_credentials(self, mock_get_session): method test_validate_bucket_access_access_denied (line 329) | def test_validate_bucket_access_access_denied(self, mock_get_session): method test_validate_bucket_access_mixed_results (line 348) | def test_validate_bucket_access_mixed_results(self, mock_get_session): method test_validate_bucket_access_unexpected_error (line 378) | def test_validate_bucket_access_unexpected_error(self, mock_get_session): method test_validate_bucket_access_duplicate_buckets (line 395) | def test_validate_bucket_access_duplicate_buckets(self, mock_get_sessi... method test_validate_bucket_access_invalid_s3_path (line 414) | def test_validate_bucket_access_invalid_s3_path(self): method test_validate_bucket_access_mixed_valid_invalid_paths (line 422) | def test_validate_bucket_access_mixed_valid_invalid_paths(self, mock_g... method test_validate_bucket_access_other_client_error (line 444) | def test_validate_bucket_access_other_client_error(self, mock_get_sess... FILE: src/aws-healthomics-mcp-server/tests/test_scoring_engine.py class TestScoringEngine (line 26) | class TestScoringEngine: method setup_method (line 29) | def setup_method(self): method create_test_file (line 34) | def create_test_file( method test_calculate_score_basic (line 54) | def test_calculate_score_basic(self): method test_pattern_match_scoring (line 66) | def test_pattern_match_scoring(self): method test_pattern_match_with_tags (line 82) | def test_pattern_match_with_tags(self): method test_pattern_match_with_metadata (line 99) | def test_pattern_match_with_metadata(self): method test_file_type_relevance_scoring (line 120) | def test_file_type_relevance_scoring(self): method test_file_type_index_relationships (line 144) | def test_file_type_index_relationships(self): method test_association_scoring (line 159) | def test_association_scoring(self): method test_storage_accessibility_scoring (line 186) | def test_storage_accessibility_scoring(self): method test_complete_file_set_detection (line 219) | def test_complete_file_set_detection(self): method test_fastq_pair_detection (line 242) | def test_fastq_pair_detection(self): method test_weighted_scoring (line 270) | def test_weighted_scoring(self): method test_rank_results (line 331) | def test_rank_results(self): method test_match_metadata_edge_cases (line 352) | def test_match_metadata_edge_cases(self): method test_scoring_edge_cases (line 375) | def test_scoring_edge_cases(self): method test_file_type_relationships (line 392) | def test_file_type_relationships(self): method test_storage_multipliers (line 410) | def test_storage_multipliers(self): method test_scoring_weights_sum_to_one (line 434) | def test_scoring_weights_sum_to_one(self): method test_score_bounds (line 439) | def test_score_bounds(self): method test_comprehensive_scoring_scenario (line 466) | def test_comprehensive_scoring_scenario(self): method test_unknown_file_type_filter (line 509) | def test_unknown_file_type_filter(self): method test_reverse_file_type_relationships (line 518) | def test_reverse_file_type_relationships(self): method test_metadata_matching_with_non_string_values (line 528) | def test_metadata_matching_with_non_string_values(self): method test_fastq_pair_detection_edge_cases (line 543) | def test_fastq_pair_detection_edge_cases(self): method test_complete_file_set_detection_edge_cases (line 559) | def test_complete_file_set_detection_edge_cases(self): FILE: src/aws-healthomics-mcp-server/tests/test_search_config.py function valid_s3_bucket_name (line 38) | def valid_s3_bucket_name(draw): function valid_s3_path (line 58) | def valid_s3_path(draw): class TestSearchConfig (line 80) | class TestSearchConfig: method setup_method (line 83) | def setup_method(self): method test_get_s3_bucket_paths_valid_single_bucket (line 100) | def test_get_s3_bucket_paths_valid_single_bucket(self): method test_get_s3_bucket_paths_valid_multiple_buckets (line 113) | def test_get_s3_bucket_paths_valid_multiple_buckets(self): method test_get_s3_bucket_paths_empty_env_var (line 126) | def test_get_s3_bucket_paths_empty_env_var(self): method test_get_s3_bucket_paths_missing_env_var (line 133) | def test_get_s3_bucket_paths_missing_env_var(self): method test_get_s3_bucket_paths_whitespace_only (line 139) | def test_get_s3_bucket_paths_whitespace_only(self): method test_get_s3_bucket_paths_invalid_path (line 146) | def test_get_s3_bucket_paths_invalid_path(self): method test_get_max_concurrent_searches_valid_value (line 157) | def test_get_max_concurrent_searches_valid_value(self): method test_get_max_concurrent_searches_default_value (line 165) | def test_get_max_concurrent_searches_default_value(self): method test_get_max_concurrent_searches_invalid_value (line 172) | def test_get_max_concurrent_searches_invalid_value(self): method test_get_max_concurrent_searches_zero_value (line 180) | def test_get_max_concurrent_searches_zero_value(self): method test_get_max_concurrent_searches_negative_value (line 188) | def test_get_max_concurrent_searches_negative_value(self): method test_get_search_timeout_seconds_valid_value (line 196) | def test_get_search_timeout_seconds_valid_value(self): method test_get_search_timeout_seconds_default_value (line 204) | def test_get_search_timeout_seconds_default_value(self): method test_get_search_timeout_seconds_invalid_value (line 211) | def test_get_search_timeout_seconds_invalid_value(self): method test_get_search_timeout_seconds_zero_value (line 219) | def test_get_search_timeout_seconds_zero_value(self): method test_get_search_timeout_seconds_negative_value (line 227) | def test_get_search_timeout_seconds_negative_value(self): method test_get_enable_healthomics_search_true_values (line 235) | def test_get_enable_healthomics_search_true_values(self): method test_get_enable_healthomics_search_false_values (line 244) | def test_get_enable_healthomics_search_false_values(self): method test_get_enable_healthomics_search_default_value (line 264) | def test_get_enable_healthomics_search_default_value(self): method test_get_enable_healthomics_search_invalid_value (line 271) | def test_get_enable_healthomics_search_invalid_value(self): method test_get_enable_s3_tag_search_true_values (line 279) | def test_get_enable_s3_tag_search_true_values(self): method test_get_enable_s3_tag_search_false_values (line 288) | def test_get_enable_s3_tag_search_false_values(self): method test_get_enable_s3_tag_search_default_value (line 308) | def test_get_enable_s3_tag_search_default_value(self): method test_get_enable_s3_tag_search_invalid_value (line 315) | def test_get_enable_s3_tag_search_invalid_value(self): method test_get_max_tag_batch_size_valid_value (line 323) | def test_get_max_tag_batch_size_valid_value(self): method test_get_max_tag_batch_size_default_value (line 331) | def test_get_max_tag_batch_size_default_value(self): method test_get_max_tag_batch_size_invalid_value (line 338) | def test_get_max_tag_batch_size_invalid_value(self): method test_get_max_tag_batch_size_zero_value (line 346) | def test_get_max_tag_batch_size_zero_value(self): method test_get_result_cache_ttl_valid_value (line 354) | def test_get_result_cache_ttl_valid_value(self): method test_get_result_cache_ttl_default_value (line 362) | def test_get_result_cache_ttl_default_value(self): method test_get_result_cache_ttl_invalid_value (line 369) | def test_get_result_cache_ttl_invalid_value(self): method test_get_result_cache_ttl_negative_value (line 377) | def test_get_result_cache_ttl_negative_value(self): method test_get_result_cache_ttl_zero_value (line 385) | def test_get_result_cache_ttl_zero_value(self): method test_get_tag_cache_ttl_valid_value (line 393) | def test_get_tag_cache_ttl_valid_value(self): method test_get_tag_cache_ttl_default_value (line 401) | def test_get_tag_cache_ttl_default_value(self): method test_get_tag_cache_ttl_invalid_value (line 408) | def test_get_tag_cache_ttl_invalid_value(self): method test_get_tag_cache_ttl_negative_value (line 416) | def test_get_tag_cache_ttl_negative_value(self): method test_get_tag_cache_ttl_zero_value (line 424) | def test_get_tag_cache_ttl_zero_value(self): method test_get_genomics_search_config_complete (line 433) | def test_get_genomics_search_config_complete(self, mock_validate): method test_get_genomics_search_config_defaults (line 460) | def test_get_genomics_search_config_defaults(self, mock_validate): method test_get_genomics_search_config_missing_buckets (line 477) | def test_get_genomics_search_config_missing_buckets(self): method test_validate_bucket_access_permissions_success (line 490) | def test_validate_bucket_access_permissions_success( method test_validate_bucket_access_permissions_config_error (line 514) | def test_validate_bucket_access_permissions_config_error(self, mock_ge... method test_validate_bucket_access_permissions_access_error (line 523) | def test_validate_bucket_access_permissions_access_error( method test_integration_workflow (line 544) | def test_integration_workflow(self): class TestPropertyS3PathConfigRoundTrip (line 594) | class TestPropertyS3PathConfigRoundTrip: method setup_method (line 601) | def setup_method(self): method test_valid_s3_paths_survive_config_round_trip (line 608) | def test_valid_s3_paths_survive_config_round_trip(self, data): FILE: src/aws-healthomics-mcp-server/tests/test_sequence_store_tools.py class TestCreateSequenceStore (line 49) | class TestCreateSequenceStore: method test_happy_path_all_params (line 55) | async def test_happy_path_all_params(self): method test_happy_path_minimal_params (line 88) | async def test_happy_path_minimal_params(self): method test_api_error (line 108) | async def test_api_error(self): method test_invalid_tags_json (line 118) | async def test_invalid_tags_json(self): class TestListSequenceStores (line 133) | class TestListSequenceStores: method test_happy_path (line 139) | async def test_happy_path(self): method test_empty_results (line 168) | async def test_empty_results(self): method test_with_name_filter (line 177) | async def test_with_name_filter(self): method test_with_pagination (line 197) | async def test_with_pagination(self): method test_api_error (line 219) | async def test_api_error(self): class TestGetSequenceStore (line 234) | class TestGetSequenceStore: method test_happy_path (line 240) | async def test_happy_path(self): method test_not_found_error (line 264) | async def test_not_found_error(self): class TestUpdateSequenceStore (line 281) | class TestUpdateSequenceStore: method test_happy_path_all_fields (line 287) | async def test_happy_path_all_fields(self): method test_etag_management (line 319) | async def test_etag_management(self): method test_api_error_on_get (line 346) | async def test_api_error_on_get(self): method test_api_error_on_update_etag_conflict (line 361) | async def test_api_error_on_update_etag_conflict(self): method test_update_without_etag (line 379) | async def test_update_without_etag(self): class TestListReadSets (line 408) | class TestListReadSets: method test_happy_path (line 414) | async def test_happy_path(self): method test_with_sample_id_filter (line 442) | async def test_with_sample_id_filter(self): method test_with_subject_id_filter (line 454) | async def test_with_subject_id_filter(self): method test_with_status_filter (line 466) | async def test_with_status_filter(self): method test_with_file_type_filter (line 478) | async def test_with_file_type_filter(self): method test_with_reference_arn_filter (line 501) | async def test_with_reference_arn_filter(self): method test_with_created_after_filter (line 517) | async def test_with_created_after_filter(self): method test_with_created_before_filter (line 531) | async def test_with_created_before_filter(self): method test_with_pagination (line 545) | async def test_with_pagination(self): method test_api_error (line 565) | async def test_api_error(self): class TestGetReadSetMetadata (line 580) | class TestGetReadSetMetadata: method test_happy_path (line 586) | async def test_happy_path(self): method test_not_found_error (line 630) | async def test_not_found_error(self): class TestStartReadSetImportJob (line 649) | class TestStartReadSetImportJob: method test_happy_path (line 655) | async def test_happy_path(self): method test_with_tags (line 691) | async def test_with_tags(self): method test_invalid_sources_json (line 723) | async def test_invalid_sources_json(self): method test_invalid_tags_json (line 738) | async def test_invalid_tags_json(self): method test_api_error (line 764) | async def test_api_error(self): class TestGetReadSetImportJob (line 794) | class TestGetReadSetImportJob: method test_happy_path_with_sources (line 800) | async def test_happy_path_with_sources(self): method test_not_found_error (line 836) | async def test_not_found_error(self): class TestListReadSetImportJobs (line 857) | class TestListReadSetImportJobs: method test_happy_path (line 863) | async def test_happy_path(self): method test_with_pagination (line 896) | async def test_with_pagination(self): method test_api_error (line 925) | async def test_api_error(self): class TestStartReadSetExportJob (line 942) | class TestStartReadSetExportJob: method test_happy_path (line 948) | async def test_happy_path(self): method test_plain_string_treated_as_single_id (line 979) | async def test_plain_string_treated_as_single_id(self): method test_api_error (line 1000) | async def test_api_error(self): class TestGetReadSetExportJob (line 1022) | class TestGetReadSetExportJob: method test_happy_path (line 1028) | async def test_happy_path(self): method test_not_found_error (line 1054) | async def test_not_found_error(self): class TestListReadSetExportJobs (line 1075) | class TestListReadSetExportJobs: method test_happy_path (line 1081) | async def test_happy_path(self): method test_with_pagination (line 1114) | async def test_with_pagination(self): method test_api_error (line 1143) | async def test_api_error(self): class TestActivateReadSets (line 1160) | class TestActivateReadSets: method test_happy_path (line 1166) | async def test_happy_path(self): method test_plain_string_treated_as_single_id (line 1190) | async def test_plain_string_treated_as_single_id(self): method test_api_error_invalid_state (line 1207) | async def test_api_error_invalid_state(self): FILE: src/aws-healthomics-mcp-server/tests/test_server.py function test_server_initialization (line 16) | def test_server_initialization(): function test_server_has_required_tools (line 28) | def test_server_has_required_tools(): FILE: src/aws-healthomics-mcp-server/tests/test_store_models.py class TestReadSetFileTypeEnum (line 40) | class TestReadSetFileTypeEnum: method test_values (line 43) | def test_values(self): method test_membership (line 49) | def test_membership(self): class TestReadSetStatusEnum (line 54) | class TestReadSetStatusEnum: method test_values (line 57) | def test_values(self): method test_membership (line 66) | def test_membership(self): class TestImportJobStatusEnum (line 71) | class TestImportJobStatusEnum: method test_values (line 74) | def test_values(self): method test_membership (line 83) | def test_membership(self): class TestReferenceStatusEnum (line 88) | class TestReferenceStatusEnum: method test_values (line 91) | def test_values(self): method test_membership (line 96) | def test_membership(self): class TestSequenceStoreSummary (line 104) | class TestSequenceStoreSummary: method test_all_fields (line 107) | def test_all_fields(self): method test_minimal_fields (line 124) | def test_minimal_fields(self): method test_missing_required_fields (line 135) | def test_missing_required_fields(self): method test_serialization (line 139) | def test_serialization(self): method test_serialization_exclude_none (line 154) | def test_serialization_exclude_none(self): class TestSequenceStoreDetail (line 168) | class TestSequenceStoreDetail: method test_all_fields (line 171) | def test_all_fields(self): method test_minimal_fields (line 192) | def test_minimal_fields(self): method test_serialization (line 205) | def test_serialization(self): class TestReadSetSummary (line 220) | class TestReadSetSummary: method test_all_fields (line 223) | def test_all_fields(self): method test_minimal_fields (line 247) | def test_minimal_fields(self): method test_missing_required_fields (line 262) | def test_missing_required_fields(self): method test_serialization (line 266) | def test_serialization(self): method test_serialization_exclude_none (line 281) | def test_serialization_exclude_none(self): class TestSourceFiles (line 298) | class TestSourceFiles: method test_paired_end (line 301) | def test_paired_end(self): method test_single_end (line 309) | def test_single_end(self): method test_missing_source1 (line 314) | def test_missing_source1(self): method test_serialization_exclude_none (line 318) | def test_serialization_exclude_none(self): class TestReadSetImportSource (line 325) | class TestReadSetImportSource: method test_all_fields (line 328) | def test_all_fields(self): method test_minimal_fields (line 354) | def test_minimal_fields(self): method test_missing_required_fields (line 368) | def test_missing_required_fields(self): method test_missing_subject_id (line 372) | def test_missing_subject_id(self): method test_missing_sample_id (line 380) | def test_missing_sample_id(self): method test_serialization (line 388) | def test_serialization(self): method test_serialization_exclude_none (line 403) | def test_serialization_exclude_none(self): class TestReferenceStoreSummary (line 423) | class TestReferenceStoreSummary: method test_all_fields (line 426) | def test_all_fields(self): method test_minimal_fields (line 441) | def test_minimal_fields(self): method test_missing_required_fields (line 451) | def test_missing_required_fields(self): method test_serialization (line 455) | def test_serialization(self): method test_serialization_exclude_none (line 468) | def test_serialization_exclude_none(self): class TestReferenceStoreDetail (line 480) | class TestReferenceStoreDetail: method test_all_fields (line 483) | def test_all_fields(self): method test_minimal_fields (line 502) | def test_minimal_fields(self): method test_serialization (line 514) | def test_serialization(self): class TestReferenceSummary (line 529) | class TestReferenceSummary: method test_all_fields (line 532) | def test_all_fields(self): method test_minimal_fields (line 552) | def test_minimal_fields(self): method test_missing_required_fields (line 565) | def test_missing_required_fields(self): method test_serialization (line 569) | def test_serialization(self): method test_serialization_exclude_none (line 584) | def test_serialization_exclude_none(self): class TestReferenceImportSource (line 599) | class TestReferenceImportSource: method test_all_fields (line 602) | def test_all_fields(self): method test_minimal_fields (line 614) | def test_minimal_fields(self): method test_missing_required_fields (line 622) | def test_missing_required_fields(self): method test_serialization (line 626) | def test_serialization(self): method test_serialization_exclude_none (line 637) | def test_serialization_exclude_none(self): FILE: src/aws-healthomics-mcp-server/tests/test_store_properties.py class TestCreateStoreReturnsRequiredFields (line 73) | class TestCreateStoreReturnsRequiredFields: method test_create_store_returns_id_arn_creation_time (line 85) | async def test_create_store_returns_id_arn_creation_time(self, name): class TestOptionalCreateParametersForwarded (line 108) | class TestOptionalCreateParametersForwarded: method test_optional_params_forwarded_to_api (line 127) | async def test_optional_params_forwarded_to_api( class TestApiErrorsProduceErrorResponseDicts (line 180) | class TestApiErrorsProduceErrorResponseDicts: method test_create_sequence_store_error (line 192) | async def test_create_sequence_store_error(self, name): method test_list_sequence_stores_error (line 208) | async def test_list_sequence_stores_error(self, name): method test_get_sequence_store_error (line 224) | async def test_get_sequence_store_error(self, store_id): method test_update_sequence_store_error (line 240) | async def test_update_sequence_store_error(self, store_id): class TestListToolsReturnItemsAndForwardPagination (line 257) | class TestListToolsReturnItemsAndForwardPagination: method test_list_returns_items_and_forwards_pagination (line 273) | async def test_list_returns_items_and_forwards_pagination(self, max_re... class TestListFilterParametersForwarded (line 302) | class TestListFilterParametersForwarded: method test_name_filter_forwarded_to_api (line 314) | async def test_name_filter_forwarded_to_api(self, name_filter): class TestGetStoreDetailReturnsAllFields (line 340) | class TestGetStoreDetailReturnsAllFields: method test_get_store_returns_all_fields (line 352) | async def test_get_store_returns_all_fields(self, store_id): class TestUpdateToolsManageETagsAndForwardFields (line 385) | class TestUpdateToolsManageETagsAndForwardFields: method test_update_fetches_etag_and_forwards_fields (line 403) | async def test_update_fetches_etag_and_forwards_fields( class TestGetMetadataReturnsAllSpecifiedFields (line 465) | class TestGetMetadataReturnsAllSpecifiedFields: method test_get_metadata_returns_all_fields (line 477) | async def test_get_metadata_returns_all_fields(self, store_id, read_se... class TestStartImportJobForwardsSourcesAndParams (line 520) | class TestStartImportJobForwardsSourcesAndParams: method test_sources_and_params_forwarded_to_api (line 551) | async def test_sources_and_params_forwarded_to_api(self, store_id, rol... class TestGetImportJobReturnsDetailsWithSourceStatuses (line 583) | class TestGetImportJobReturnsDetailsWithSourceStatuses: method test_get_import_job_returns_details (line 595) | async def test_get_import_job_returns_details(self, store_id, job_id): class TestStartExportJobForwardsDestinationAndIds (line 626) | class TestStartExportJobForwardsDestinationAndIds: method test_export_forwards_destination_and_ids (line 643) | async def test_export_forwards_destination_and_ids( class TestGetExportJobReturnsDetailsWithDestination (line 679) | class TestGetExportJobReturnsDetailsWithDestination: method test_get_export_job_returns_details (line 691) | async def test_get_export_job_returns_details(self, store_id, job_id): class TestActivateForwardsAllReadSetIds (line 722) | class TestActivateForwardsAllReadSetIds: method test_activate_forwards_all_ids (line 737) | async def test_activate_forwards_all_ids(self, store_id, read_set_ids): FILE: src/aws-healthomics-mcp-server/tests/test_svg_builder.py class TestSVGBuilderBasic (line 24) | class TestSVGBuilderBasic: method test_init (line 27) | def test_init(self): method test_add_title_default_position (line 35) | def test_add_title_default_position(self): method test_add_title_custom_position (line 43) | def test_add_title_custom_position(self): method test_add_rect_without_tooltip (line 51) | def test_add_rect_without_tooltip(self): method test_add_rect_with_tooltip (line 63) | def test_add_rect_with_tooltip(self): method test_add_rect_minimum_width (line 71) | def test_add_rect_minimum_width(self): method test_add_text (line 77) | def test_add_text(self): method test_add_line (line 88) | def test_add_line(self): method test_add_x_axis (line 100) | def test_add_x_axis(self): method test_escape_special_characters (line 108) | def test_escape_special_characters(self): method test_build_empty (line 121) | def test_build_empty(self): method test_build_with_elements (line 131) | def test_build_with_elements(self): method test_build_includes_style (line 146) | def test_build_includes_style(self): class TestSVGBuilderPropertyBased (line 153) | class TestSVGBuilderPropertyBased: method test_property_valid_svg_output (line 165) | def test_property_valid_svg_output( method test_property_escape_produces_valid_xml (line 238) | def test_property_escape_produces_valid_xml(self, text: str): method test_property_x_axis_produces_valid_svg (line 268) | def test_property_x_axis_produces_valid_svg( FILE: src/aws-healthomics-mcp-server/tests/test_task_aggregator.py class TestTaskAggregatorNormalizeTaskName (line 23) | class TestTaskAggregatorNormalizeTaskName: method test_normalize_wdl_pattern_basic (line 26) | def test_normalize_wdl_pattern_basic(self): method test_normalize_wdl_pattern_multi_digit (line 30) | def test_normalize_wdl_pattern_multi_digit(self): method test_normalize_wdl_pattern_with_hyphen_in_name (line 35) | def test_normalize_wdl_pattern_with_hyphen_in_name(self): method test_normalize_wdl_pattern_with_text_suffix (line 39) | def test_normalize_wdl_pattern_with_text_suffix(self): method test_normalize_nextflow_pattern_basic (line 48) | def test_normalize_nextflow_pattern_basic(self): method test_normalize_nextflow_pattern_string_index (line 52) | def test_normalize_nextflow_pattern_string_index(self): method test_normalize_cwl_pattern_basic (line 57) | def test_normalize_cwl_pattern_basic(self): method test_normalize_cwl_pattern_multi_digit (line 61) | def test_normalize_cwl_pattern_multi_digit(self): method test_normalize_no_pattern_match (line 66) | def test_normalize_no_pattern_match(self): method test_normalize_empty_string (line 71) | def test_normalize_empty_string(self): method test_normalize_none_handling (line 75) | def test_normalize_none_handling(self): class TestTaskAggregatorAggregateTasks (line 80) | class TestTaskAggregatorAggregateTasks: method test_aggregate_empty_list (line 83) | def test_aggregate_empty_list(self): method test_aggregate_single_task (line 89) | def test_aggregate_single_task(self): method test_aggregate_multiple_scattered_tasks (line 111) | def test_aggregate_multiple_scattered_tasks(self): method test_aggregate_multiple_task_types (line 143) | def test_aggregate_multiple_task_types(self): method test_aggregate_missing_fields (line 187) | def test_aggregate_missing_fields(self): method test_aggregate_max_utilization_metrics (line 200) | def test_aggregate_max_utilization_metrics(self): class TestTaskAggregatorPropertyBased (line 235) | class TestTaskAggregatorPropertyBased: method test_property_normalization_idempotence (line 247) | def test_property_normalization_idempotence(self, base_name: str): method test_property_normalization_idempotence_wdl (line 265) | def test_property_normalization_idempotence_wdl( method test_property_normalization_idempotence_nextflow (line 283) | def test_property_normalization_idempotence_nextflow(self, base_name: ... method test_property_normalization_idempotence_cwl (line 299) | def test_property_normalization_idempotence_cwl(self, base_name: str, ... function task_strategy (line 312) | def task_strategy(): class TestTaskAggregatorAggregationPropertyBased (line 333) | class TestTaskAggregatorAggregationPropertyBased: method test_property_aggregation_count_invariant (line 338) | def test_property_aggregation_count_invariant(self, tasks: list[dict]): FILE: src/aws-healthomics-mcp-server/tests/test_troubleshooting.py function mock_context (line 28) | def mock_context(): function mock_omics_client (line 35) | def mock_omics_client(): function sample_failed_run_response (line 42) | def sample_failed_run_response(): function sample_running_run_response (line 59) | def sample_running_run_response(): function sample_failed_tasks (line 70) | def sample_failed_tasks(): function sample_log_events (line 92) | def sample_log_events(): class TestDiagnoseRunFailure (line 103) | class TestDiagnoseRunFailure: method test_diagnose_run_failure_success (line 113) | async def test_diagnose_run_failure_success( method test_diagnose_run_failure_not_failed (line 225) | async def test_diagnose_run_failure_not_failed( method test_diagnose_run_failure_no_uuid (line 254) | async def test_diagnose_run_failure_no_uuid( method test_diagnose_run_failure_engine_logs_error (line 298) | async def test_diagnose_run_failure_engine_logs_error( method test_diagnose_run_failure_task_logs_error (line 340) | async def test_diagnose_run_failure_task_logs_error( method test_diagnose_run_failure_boto_error (line 379) | async def test_diagnose_run_failure_boto_error( method test_diagnose_run_failure_unexpected_error (line 407) | async def test_diagnose_run_failure_unexpected_error( method test_diagnose_run_failure_no_failure_reason (line 429) | async def test_diagnose_run_failure_no_failure_reason( method test_diagnose_run_failure_recommendations_included (line 464) | async def test_diagnose_run_failure_recommendations_included( method test_diagnose_run_failure_manifest_logs_error (line 506) | async def test_diagnose_run_failure_manifest_logs_error( method test_diagnose_run_failure_pagination_multiple_tasks (line 547) | async def test_diagnose_run_failure_pagination_multiple_tasks( class TestTimeWindowCalculation (line 618) | class TestTimeWindowCalculation: method test_calculate_log_time_window_with_datetime_objects (line 621) | def test_calculate_log_time_window_with_datetime_objects(self): method test_calculate_log_time_window_with_strings (line 636) | def test_calculate_log_time_window_with_strings(self): method test_calculate_log_time_window_with_invalid_inputs (line 651) | def test_calculate_log_time_window_with_invalid_inputs(self): method test_calculate_log_time_window_with_invalid_datetime_string (line 667) | def test_calculate_log_time_window_with_invalid_datetime_string(self): method test_calculate_log_time_window_with_non_datetime_objects (line 678) | def test_calculate_log_time_window_with_non_datetime_objects(self): class TestSafeDatetimeToIso (line 690) | class TestSafeDatetimeToIso: method test_safe_datetime_to_iso_with_none (line 693) | def test_safe_datetime_to_iso_with_none(self): method test_safe_datetime_to_iso_with_datetime (line 700) | def test_safe_datetime_to_iso_with_datetime(self): method test_safe_datetime_to_iso_with_string (line 708) | def test_safe_datetime_to_iso_with_string(self): method test_safe_datetime_to_iso_with_other_type (line 715) | def test_safe_datetime_to_iso_with_other_type(self): method test_diagnose_run_failure_detailed_false (line 732) | async def test_diagnose_run_failure_detailed_false( method test_diagnose_run_failure_detailed_true (line 821) | async def test_diagnose_run_failure_detailed_true( method test_diagnose_run_failure_none_stop_time (line 911) | async def test_diagnose_run_failure_none_stop_time( method test_diagnose_run_failure_datetime_objects (line 974) | async def test_diagnose_run_failure_datetime_objects( method test_diagnose_run_failure_task_timing_calculation_failure (line 1036) | async def test_diagnose_run_failure_task_timing_calculation_failure( method test_diagnose_run_failure_get_run_task_fails (line 1107) | async def test_diagnose_run_failure_get_run_task_fails( method test_diagnose_run_failure_invalid_stop_time_string (line 1163) | async def test_diagnose_run_failure_invalid_stop_time_string( FILE: src/aws-healthomics-mcp-server/tests/test_validation_utils.py class TestValidateS3Uri (line 33) | class TestValidateS3Uri: method test_validate_s3_uri_valid (line 37) | async def test_validate_s3_uri_valid(self): method test_validate_s3_uri_invalid_bucket_name (line 48) | async def test_validate_s3_uri_invalid_bucket_name(self): method test_validate_s3_uri_invalid_format (line 60) | async def test_validate_s3_uri_invalid_format(self): method test_validate_s3_uri_logs_error (line 72) | async def test_validate_s3_uri_logs_error(self, mock_logger): class TestValidateAdhocS3Buckets (line 83) | class TestValidateAdhocS3Buckets: method test_validate_adhoc_s3_buckets_none_input (line 87) | async def test_validate_adhoc_s3_buckets_none_input(self): method test_validate_adhoc_s3_buckets_empty_list (line 97) | async def test_validate_adhoc_s3_buckets_empty_list(self): method test_validate_adhoc_s3_buckets_success (line 107) | async def test_validate_adhoc_s3_buckets_success(self): method test_validate_adhoc_s3_buckets_validation_error (line 135) | async def test_validate_adhoc_s3_buckets_validation_error(self): method test_validate_adhoc_s3_buckets_partial_success (line 165) | async def test_validate_adhoc_s3_buckets_partial_success(self): function test_validate_path_to_main_valid_paths (line 200) | async def test_validate_path_to_main_valid_paths(): function test_validate_path_to_main_none_and_empty (line 222) | async def test_validate_path_to_main_none_and_empty(): function test_validate_path_to_main_absolute_paths (line 238) | async def test_validate_path_to_main_absolute_paths(): function test_validate_path_to_main_directory_traversal (line 256) | async def test_validate_path_to_main_directory_traversal(): function test_validate_path_to_main_empty_components (line 281) | async def test_validate_path_to_main_empty_components(): function test_validate_path_to_main_current_directory (line 299) | async def test_validate_path_to_main_current_directory(): function test_validate_path_to_main_invalid_extensions (line 316) | async def test_validate_path_to_main_invalid_extensions(): function test_validate_path_to_main_normalization (line 337) | async def test_validate_path_to_main_normalization(): class TestDetectReadmeInputType (line 353) | class TestDetectReadmeInputType: method test_detect_s3_uri_basic (line 356) | def test_detect_s3_uri_basic(self): method test_detect_s3_uri_with_path (line 361) | def test_detect_s3_uri_with_path(self): method test_detect_s3_uri_without_md_extension (line 366) | def test_detect_s3_uri_without_md_extension(self): method test_detect_s3_uri_empty_key (line 371) | def test_detect_s3_uri_empty_key(self): method test_detect_s3_uri_prefix_only (line 376) | def test_detect_s3_uri_prefix_only(self): method test_detect_local_file_existing (line 381) | def test_detect_local_file_existing(self): method test_detect_local_file_uppercase_extension (line 393) | def test_detect_local_file_uppercase_extension(self): method test_detect_nonexistent_md_file_as_markdown (line 405) | def test_detect_nonexistent_md_file_as_markdown(self): method test_detect_existing_file_without_md_extension_as_markdown (line 410) | def test_detect_existing_file_without_md_extension_as_markdown(self): method test_detect_markdown_content_simple (line 422) | def test_detect_markdown_content_simple(self): method test_detect_markdown_content_empty_string (line 427) | def test_detect_markdown_content_empty_string(self): method test_detect_markdown_content_multiline (line 432) | def test_detect_markdown_content_multiline(self): method test_detect_markdown_content_with_md_in_text (line 445) | def test_detect_markdown_content_with_md_in_text(self): method test_s3_uri_takes_precedence_over_md_extension (line 450) | def test_s3_uri_takes_precedence_over_md_extension(self): method test_detect_markdown_content_looks_like_path_but_not_exists (line 455) | def test_detect_markdown_content_looks_like_path_but_not_exists(self): class TestValidateReadmeInput (line 461) | class TestValidateReadmeInput: method test_validate_readme_input_none (line 465) | async def test_validate_readme_input_none(self): method test_validate_readme_input_s3_uri_valid (line 477) | async def test_validate_readme_input_s3_uri_valid(self): method test_validate_readme_input_s3_uri_invalid (line 490) | async def test_validate_readme_input_s3_uri_invalid(self): method test_validate_readme_input_local_file (line 506) | async def test_validate_readme_input_local_file(self): method test_validate_readme_input_markdown_content (line 527) | async def test_validate_readme_input_markdown_content(self): method test_validate_readme_input_empty_string (line 540) | async def test_validate_readme_input_empty_string(self): method test_validate_readme_input_mutually_exclusive_output (line 552) | async def test_validate_readme_input_mutually_exclusive_output(self): method test_validate_readme_input_local_file_unicode (line 571) | async def test_validate_readme_input_local_file_unicode(self): method test_validate_readme_input_file_not_found (line 593) | async def test_validate_readme_input_file_not_found(self): method test_validate_readme_input_io_error (line 635) | async def test_validate_readme_input_io_error(self): method test_validate_readme_input_error_logging (line 661) | async def test_validate_readme_input_error_logging(self): class TestWorkflowRepositoryIntegrationPropertyBased (line 723) | class TestWorkflowRepositoryIntegrationPropertyBased: method test_property_backward_compatibility_zip_source (line 731) | async def test_property_backward_compatibility_zip_source( method test_property_backward_compatibility_uri_source (line 778) | async def test_property_backward_compatibility_uri_source( method test_property_api_parameter_mapping_round_trip (line 828) | async def test_property_api_parameter_mapping_round_trip( method test_property_error_message_context_invalid_arn (line 906) | async def test_property_error_message_context_invalid_arn( method test_property_error_message_context_invalid_source_type (line 957) | async def test_property_error_message_context_invalid_source_type( method test_property_error_message_context_empty_source_value (line 1006) | async def test_property_error_message_context_empty_source_value( class TestValidateProviderType (line 1051) | class TestValidateProviderType: method test_validate_provider_type_none_input (line 1055) | async def test_validate_provider_type_none_input(self): method test_validate_provider_type_valid_bitbucket (line 1067) | async def test_validate_provider_type_valid_bitbucket(self): method test_validate_provider_type_valid_github (line 1079) | async def test_validate_provider_type_valid_github(self): method test_validate_provider_type_valid_github_enterprise (line 1091) | async def test_validate_provider_type_valid_github_enterprise(self): method test_validate_provider_type_valid_gitlab (line 1103) | async def test_validate_provider_type_valid_gitlab(self): method test_validate_provider_type_valid_gitlab_self_managed (line 1115) | async def test_validate_provider_type_valid_gitlab_self_managed(self): method test_validate_provider_type_all_valid_types (line 1127) | async def test_validate_provider_type_all_valid_types(self): method test_validate_provider_type_invalid_lowercase (line 1148) | async def test_validate_provider_type_invalid_lowercase(self): method test_validate_provider_type_invalid_uppercase (line 1164) | async def test_validate_provider_type_invalid_uppercase(self): method test_validate_provider_type_invalid_unknown (line 1180) | async def test_validate_provider_type_invalid_unknown(self): method test_validate_provider_type_invalid_empty_string (line 1196) | async def test_validate_provider_type_invalid_empty_string(self): method test_validate_provider_type_error_lists_valid_types (line 1212) | async def test_validate_provider_type_error_lists_valid_types(self): method test_validate_provider_type_logs_error (line 1232) | async def test_validate_provider_type_logs_error(self): method test_validate_provider_type_reports_to_context (line 1251) | async def test_validate_provider_type_reports_to_context(self): class TestValidateConnectionArn (line 1270) | class TestValidateConnectionArn: method test_validate_connection_arn_valid_codeconnections_prefix (line 1274) | async def test_validate_connection_arn_valid_codeconnections_prefix(se... method test_validate_connection_arn_valid_codestar_prefix (line 1287) | async def test_validate_connection_arn_valid_codestar_prefix(self): method test_validate_connection_arn_valid_various_regions (line 1300) | async def test_validate_connection_arn_valid_various_regions(self): method test_validate_connection_arn_invalid_prefix (line 1321) | async def test_validate_connection_arn_invalid_prefix(self): method test_validate_connection_arn_invalid_empty_string (line 1338) | async def test_validate_connection_arn_invalid_empty_string(self): method test_validate_connection_arn_invalid_random_string (line 1353) | async def test_validate_connection_arn_invalid_random_string(self): method test_validate_connection_arn_invalid_partial_prefix (line 1370) | async def test_validate_connection_arn_invalid_partial_prefix(self): method test_validate_connection_arn_error_message_format (line 1387) | async def test_validate_connection_arn_error_message_format(self): method test_validate_connection_arn_logs_error (line 1408) | async def test_validate_connection_arn_logs_error(self): method test_validate_connection_arn_reports_to_context (line 1429) | async def test_validate_connection_arn_reports_to_context(self): method test_validate_connection_arn_invalid_similar_service (line 1447) | async def test_validate_connection_arn_invalid_similar_service(self): class TestValidateRepositoryPathParams (line 1471) | class TestValidateRepositoryPathParams: method test_validate_repository_path_params_all_none (line 1480) | async def test_validate_repository_path_params_all_none(self): method test_validate_repository_path_params_with_repository (line 1492) | async def test_validate_repository_path_params_with_repository(self): method test_validate_repository_path_params_parameter_template_without_repo (line 1514) | async def test_validate_repository_path_params_parameter_template_with... method test_validate_repository_path_params_readme_path_without_repo (line 1536) | async def test_validate_repository_path_params_readme_path_without_rep... method test_validate_repository_path_params_logs_error (line 1556) | async def test_validate_repository_path_params_logs_error(self): class TestValidateDefinitionSourcesWithRepository (line 1582) | class TestValidateDefinitionSourcesWithRepository: method test_validate_definition_sources_with_repository (line 1586) | async def test_validate_definition_sources_with_repository(self): method test_validate_definition_sources_repository_with_exclude_patterns (line 1617) | async def test_validate_definition_sources_repository_with_exclude_pat... class TestValidateRepositoryDefinitionFieldObjects (line 1647) | class TestValidateRepositoryDefinitionFieldObjects: method test_validate_repository_definition_none_input (line 1651) | async def test_validate_repository_definition_none_input(self): method test_validate_repository_definition_field_object_with_none_default (line 1663) | async def test_validate_repository_definition_field_object_with_none_d... method test_validate_repository_definition_field_object_with_dict_default (line 1683) | async def test_validate_repository_definition_field_object_with_dict_d... class TestParseTags (line 1707) | class TestParseTags: method test_parse_tags_dict_input (line 1710) | def test_parse_tags_dict_input(self): method test_parse_tags_valid_json_string (line 1717) | def test_parse_tags_valid_json_string(self): method test_parse_tags_invalid_json_string (line 1724) | def test_parse_tags_invalid_json_string(self): method test_parse_tags_json_string_non_dict (line 1731) | def test_parse_tags_json_string_non_dict(self): method test_parse_tags_unsupported_type (line 1738) | def test_parse_tags_unsupported_type(self): class TestParseIdList (line 1746) | class TestParseIdList: method test_parse_id_list_native_list (line 1749) | def test_parse_id_list_native_list(self): method test_parse_id_list_int_input (line 1756) | def test_parse_id_list_int_input(self): method test_parse_id_list_float_input (line 1763) | def test_parse_id_list_float_input(self): method test_parse_id_list_json_list_string (line 1770) | def test_parse_id_list_json_list_string(self): method test_parse_id_list_plain_string (line 1777) | def test_parse_id_list_plain_string(self): method test_parse_id_list_json_scalar_string (line 1784) | def test_parse_id_list_json_scalar_string(self): method test_parse_id_list_unsupported_type (line 1791) | def test_parse_id_list_unsupported_type(self): class TestValidateDefinitionSources (line 1799) | class TestValidateDefinitionSources: method test_field_object_definition_uri (line 1803) | async def test_field_object_definition_uri(self): method test_field_object_definition_repository (line 1829) | async def test_field_object_definition_repository(self): method test_multiple_sources_error (line 1855) | async def test_multiple_sources_error(self): method test_zero_sources_error (line 1874) | async def test_zero_sources_error(self): method test_base64_decode_failure (line 1893) | async def test_base64_decode_failure(self): class TestValidateContainerRegistryParams (line 1915) | class TestValidateContainerRegistryParams: method test_field_object_container_registry_map (line 1919) | async def test_field_object_container_registry_map(self): method test_field_object_container_registry_map_uri (line 1939) | async def test_field_object_container_registry_map_uri(self): method test_both_params_error (line 1958) | async def test_both_params_error(self): method test_invalid_map_structure (line 1975) | async def test_invalid_map_structure(self): class TestValidateReadmeInputFieldObject (line 1993) | class TestValidateReadmeInputFieldObject: method test_field_object_readme (line 1997) | async def test_field_object_readme(self): class TestValidateRepositoryPathParamsFieldObjects (line 2013) | class TestValidateRepositoryPathParamsFieldObjects: method test_field_object_definition_repository (line 2017) | async def test_field_object_definition_repository(self): method test_field_object_parameter_template_path (line 2037) | async def test_field_object_parameter_template_path(self): method test_field_object_readme_path (line 2057) | async def test_field_object_readme_path(self): FILE: src/aws-healthomics-mcp-server/tests/test_workflow_analysis.py function mock_context (line 37) | def mock_context(): function mock_logs_client (line 44) | def mock_logs_client(): function sample_log_events (line 51) | def sample_log_events(): class TestGetRunLogs (line 72) | class TestGetRunLogs: method test_get_run_logs_success (line 77) | async def test_get_run_logs_success( method test_get_run_logs_with_time_range (line 116) | async def test_get_run_logs_with_time_range( method test_get_run_logs_boto_error (line 144) | async def test_get_run_logs_boto_error(self, mock_get_logs_client, moc... method test_get_run_logs_invalid_timestamp (line 173) | async def test_get_run_logs_invalid_timestamp(self, mock_get_logs_clie... class TestGetRunManifestLogs (line 195) | class TestGetRunManifestLogs: method test_get_run_manifest_logs_with_uuid (line 200) | async def test_get_run_manifest_logs_with_uuid( method test_get_run_manifest_logs_without_uuid (line 234) | async def test_get_run_manifest_logs_without_uuid( class TestGetRunEngineLogs (line 267) | class TestGetRunEngineLogs: method test_get_run_engine_logs_success (line 272) | async def test_get_run_engine_logs_success( method test_get_run_engine_logs_from_tail (line 306) | async def test_get_run_engine_logs_from_tail( class TestGetTaskLogs (line 336) | class TestGetTaskLogs: method test_get_task_logs_success (line 341) | async def test_get_task_logs_success( method test_get_task_logs_with_pagination (line 375) | async def test_get_task_logs_with_pagination( method test_get_task_logs_unexpected_error (line 411) | async def test_get_task_logs_unexpected_error(self, mock_get_logs_clie... class TestParameterValidation (line 435) | class TestParameterValidation: method test_get_run_logs_with_valid_limits (line 440) | async def test_get_run_logs_with_valid_limits( method test_get_task_logs_with_valid_limits (line 477) | async def test_get_task_logs_with_valid_limits( class TestNormalizeRunIds (line 515) | class TestNormalizeRunIds: method test_normalize_list_input (line 518) | def test_normalize_list_input(self): method test_normalize_json_string_input (line 524) | def test_normalize_json_string_input(self): method test_normalize_single_json_string (line 530) | def test_normalize_single_json_string(self): method test_normalize_comma_separated_string (line 536) | def test_normalize_comma_separated_string(self): method test_normalize_comma_separated_with_spaces (line 542) | def test_normalize_comma_separated_with_spaces(self): method test_normalize_single_string (line 548) | def test_normalize_single_string(self): method test_normalize_empty_string (line 554) | def test_normalize_empty_string(self): method test_normalize_invalid_json (line 560) | def test_normalize_invalid_json(self): method test_normalize_invalid_json_no_comma (line 567) | def test_normalize_invalid_json_no_comma(self): method test_normalize_mixed_types_in_json (line 573) | def test_normalize_mixed_types_in_json(self): class TestDatetimeConversion (line 580) | class TestDatetimeConversion: method test_convert_datetime_to_string_simple (line 583) | def test_convert_datetime_to_string_simple(self): method test_convert_datetime_to_string_dict (line 591) | def test_convert_datetime_to_string_dict(self): method test_convert_datetime_to_string_nested (line 600) | def test_convert_datetime_to_string_nested(self): method test_safe_json_dumps_with_datetime (line 620) | def test_safe_json_dumps_with_datetime(self): method test_convert_datetime_to_string_no_change (line 630) | def test_convert_datetime_to_string_no_change(self): class TestGetLogsFromStream (line 641) | class TestGetLogsFromStream: method test_get_logs_from_stream_success (line 645) | async def test_get_logs_from_stream_success(self, sample_log_events): method test_get_logs_from_stream_no_time_filter (line 680) | async def test_get_logs_from_stream_no_time_filter(self, sample_log_ev... method test_get_logs_from_stream_with_next_token (line 710) | async def test_get_logs_from_stream_with_next_token(self, sample_log_e... class TestGetRunLogsErrorHandling (line 744) | class TestGetRunLogsErrorHandling: method test_get_run_logs_boto_error (line 750) | async def test_get_run_logs_boto_error( method test_get_run_logs_unexpected_error (line 780) | async def test_get_run_logs_unexpected_error( class TestInternalWrapperFunctions (line 808) | class TestInternalWrapperFunctions: method test_get_run_manifest_logs_internal_success (line 814) | async def test_get_run_manifest_logs_internal_success( method test_get_run_manifest_logs_internal_error (line 855) | async def test_get_run_manifest_logs_internal_error( method test_get_run_engine_logs_internal_success (line 883) | async def test_get_run_engine_logs_internal_success( method test_get_run_engine_logs_internal_error (line 923) | async def test_get_run_engine_logs_internal_error( method test_get_task_logs_internal_success (line 950) | async def test_get_task_logs_internal_success( method test_get_task_logs_internal_error (line 991) | async def test_get_task_logs_internal_error( class TestGetRunManifestLogsInternal (line 1017) | class TestGetRunManifestLogsInternal: method test_get_run_manifest_logs_internal_success (line 1022) | async def test_get_run_manifest_logs_internal_success( method test_get_run_manifest_logs_internal_resource_not_found (line 1070) | async def test_get_run_manifest_logs_internal_resource_not_found(self,... method test_get_run_manifest_logs_internal_other_client_error (line 1102) | async def test_get_run_manifest_logs_internal_other_client_error(self,... method test_get_run_manifest_logs_internal_generic_exception (line 1130) | async def test_get_run_manifest_logs_internal_generic_exception(self, ... method test_get_run_manifest_logs_internal_no_time_params (line 1155) | async def test_get_run_manifest_logs_internal_no_time_params( class TestGetRunManifestLogsErrorHandling (line 1192) | class TestGetRunManifestLogsErrorHandling: method test_get_run_manifest_logs_boto_error (line 1197) | async def test_get_run_manifest_logs_boto_error(self, mock_get_logs_cl... method test_get_run_manifest_logs_unexpected_error (line 1222) | async def test_get_run_manifest_logs_unexpected_error( method test_get_run_manifest_logs_invalid_timestamp (line 1249) | async def test_get_run_manifest_logs_invalid_timestamp( class TestGetRunEngineLogsErrorHandling (line 1274) | class TestGetRunEngineLogsErrorHandling: method test_get_run_engine_logs_boto_error (line 1279) | async def test_get_run_engine_logs_boto_error(self, mock_get_logs_clie... method test_get_run_engine_logs_unexpected_error (line 1303) | async def test_get_run_engine_logs_unexpected_error(self, mock_get_log... method test_get_run_engine_logs_invalid_timestamp (line 1327) | async def test_get_run_engine_logs_invalid_timestamp(self, mock_get_lo... class TestGetTaskLogsErrorHandling (line 1349) | class TestGetTaskLogsErrorHandling: method test_get_task_logs_boto_error (line 1354) | async def test_get_task_logs_boto_error(self, mock_get_logs_client, mo... method test_get_task_logs_invalid_timestamp (line 1379) | async def test_get_task_logs_invalid_timestamp(self, mock_get_logs_cli... FILE: src/aws-healthomics-mcp-server/tests/test_workflow_execution.py function test_get_run_success (line 31) | async def test_get_run_success(): function test_get_run_minimal_response (line 91) | async def test_get_run_minimal_response(): function test_get_run_failed_status (line 135) | async def test_get_run_failed_status(): function test_get_run_boto_error (line 165) | async def test_get_run_boto_error(): function test_get_run_client_error (line 186) | async def test_get_run_client_error(): function test_get_run_unexpected_error (line 209) | async def test_get_run_unexpected_error(): function test_get_run_none_timestamps (line 229) | async def test_get_run_none_timestamps(): function test_list_runs_success (line 263) | async def test_list_runs_success(): function test_list_runs_with_filters (line 344) | async def test_list_runs_with_filters(): function test_list_runs_empty_response (line 376) | async def test_list_runs_empty_response(): function test_list_runs_invalid_status (line 404) | async def test_list_runs_invalid_status(): function test_list_runs_boto_error (line 425) | async def test_list_runs_boto_error(): function test_list_runs_client_error (line 453) | async def test_list_runs_client_error(): function test_list_runs_unexpected_error (line 483) | async def test_list_runs_unexpected_error(): function test_list_runs_minimal_run_data (line 511) | async def test_list_runs_minimal_run_data(): function test_list_runs_none_timestamps (line 559) | async def test_list_runs_none_timestamps(): function test_list_runs_default_parameters (line 600) | async def test_list_runs_default_parameters(): function test_list_runs_with_date_filters (line 628) | async def test_list_runs_with_date_filters(): function test_list_runs_with_created_before_filter (line 692) | async def test_list_runs_with_created_before_filter(): function test_list_runs_with_both_date_filters (line 750) | async def test_list_runs_with_both_date_filters(): function test_list_runs_invalid_created_after (line 807) | async def test_list_runs_invalid_created_after(): function test_list_runs_invalid_created_before (line 826) | async def test_list_runs_invalid_created_before(): function test_list_runs_date_filter_no_matching_runs (line 845) | async def test_list_runs_date_filter_no_matching_runs(): function test_list_runs_date_filter_with_missing_creation_time (line 886) | async def test_list_runs_date_filter_with_missing_creation_time(): function test_parse_iso_datetime_various_formats (line 934) | async def test_parse_iso_datetime_various_formats(): function test_filter_runs_by_creation_time (line 959) | async def test_filter_runs_by_creation_time(): function test_start_run_success (line 1007) | async def test_start_run_success(): function test_start_run_with_static_storage (line 1061) | async def test_start_run_with_static_storage(): function test_start_run_static_without_capacity (line 1109) | async def test_start_run_static_without_capacity(): function test_start_run_with_cache (line 1131) | async def test_start_run_with_cache(): function test_start_run_boto_error (line 1172) | async def test_start_run_boto_error(): function test_start_run_client_error (line 1204) | async def test_start_run_client_error(): function test_list_run_tasks_success (line 1244) | async def test_list_run_tasks_success(): function test_list_run_tasks_empty_response (line 1322) | async def test_list_run_tasks_empty_response(): function test_list_run_tasks_boto_error (line 1350) | async def test_list_run_tasks_boto_error(): function test_list_runs_with_invalid_creation_time (line 1373) | async def test_list_runs_with_invalid_creation_time(): function test_start_run_invalid_storage_type (line 1425) | async def test_start_run_invalid_storage_type(): function test_start_run_static_storage_without_capacity (line 1446) | async def test_start_run_static_storage_without_capacity(): function test_start_run_invalid_cache_behavior (line 1467) | async def test_start_run_invalid_cache_behavior(): function test_start_run_cache_behavior_without_cache_id (line 1493) | async def test_start_run_cache_behavior_without_cache_id(): function test_start_run_invalid_s3_uri (line 1514) | async def test_start_run_invalid_s3_uri(): function test_start_run_boto_error_new (line 1540) | async def test_start_run_boto_error_new(): function test_start_run_unexpected_error_new (line 1575) | async def test_start_run_unexpected_error_new(): function test_list_run_tasks_invalid_status (line 1611) | async def test_list_run_tasks_invalid_status(): function test_get_run_boto_error_new (line 1642) | async def test_get_run_boto_error_new(): function test_get_run_unexpected_error_new (line 1657) | async def test_get_run_unexpected_error_new(): function test_list_run_tasks_boto_error_new (line 1677) | async def test_list_run_tasks_boto_error_new(): function test_list_run_tasks_unexpected_error (line 1698) | async def test_list_run_tasks_unexpected_error(): function test_get_run_task_success (line 1727) | async def test_get_run_task_success(): function test_get_run_task_minimal_response (line 1780) | async def test_get_run_task_minimal_response(): function test_get_run_task_with_image_details (line 1818) | async def test_get_run_task_with_image_details(): function test_get_run_task_failed_status (line 1858) | async def test_get_run_task_failed_status(): function test_get_run_task_boto_error (line 1887) | async def test_get_run_task_boto_error(): function test_get_run_task_client_error (line 1908) | async def test_get_run_task_client_error(): function test_get_run_task_unexpected_error (line 1931) | async def test_get_run_task_unexpected_error(): FILE: src/aws-healthomics-mcp-server/tests/test_workflow_execution_run_group.py class TestStartRunConditionallyIncludesRunGroupId (line 33) | class TestStartRunConditionallyIncludesRunGroupId: method test_conditionally_includes_run_group_id (line 46) | async def test_conditionally_includes_run_group_id(self, run_group_id): class TestListRunsConditionallyIncludesRunGroupIdFilter (line 95) | class TestListRunsConditionallyIncludesRunGroupIdFilter: method test_conditionally_includes_run_group_id_filter (line 108) | async def test_conditionally_includes_run_group_id_filter(self, run_gr... class TestStartRunWithRunGroupIdUnit (line 151) | class TestStartRunWithRunGroupIdUnit: method test_start_run_with_run_group_id (line 155) | async def test_start_run_with_run_group_id(self): method test_start_run_without_run_group_id (line 193) | async def test_start_run_without_run_group_id(self): class TestListRunsWithRunGroupIdUnit (line 230) | class TestListRunsWithRunGroupIdUnit: method test_list_runs_with_run_group_id_filter (line 234) | async def test_list_runs_with_run_group_id_filter(self): method test_list_runs_without_run_group_id_filter (line 275) | async def test_list_runs_without_run_group_id_filter(self): FILE: src/aws-healthomics-mcp-server/tests/test_workflow_linting.py class TestWorkflowLinter (line 29) | class TestWorkflowLinter: method setup_method (line 32) | def setup_method(self): method test_init (line 37) | def test_init(self): method test_get_linter_unsupported_format (line 43) | async def test_get_linter_unsupported_format(self): method test_lint_wdl_success (line 50) | async def test_lint_wdl_success(self, mock_subprocess): method test_lint_wdl_validation_error (line 71) | async def test_lint_wdl_validation_error(self, mock_subprocess): method test_lint_cwl_success (line 89) | async def test_lint_cwl_success(self, mock_subprocess): class TestLintingTools (line 109) | class TestLintingTools: method setup_method (line 112) | def setup_method(self): method test_lint_workflow_definition (line 120) | async def test_lint_workflow_definition(self): method test_lint_workflow_bundle_wdl (line 152) | async def test_lint_workflow_bundle_wdl(self): method test_lint_workflow_bundle_missing_main_file (line 196) | async def test_lint_workflow_bundle_missing_main_file(self): method test_lint_cwl_bundle_success (line 228) | async def test_lint_cwl_bundle_success(self): method test_lint_cwl_bundle_missing_imports (line 291) | async def test_lint_cwl_bundle_missing_imports(self): method test_lint_bundle_missing_main_file_cwl (line 329) | async def test_lint_bundle_missing_main_file_cwl(self): method test_lint_bundle_invalid_file_structure (line 361) | async def test_lint_bundle_invalid_file_structure(self): method test_lint_workflow_bundle_unsupported_format (line 393) | async def test_lint_workflow_bundle_unsupported_format(self): method test_lint_workflow_definition_file_io_error (line 412) | async def test_lint_workflow_definition_file_io_error(self, mock_temp_... method test_wdl_event_loop_conflict (line 444) | async def test_wdl_event_loop_conflict(self): method test_cwl_event_loop_conflict (line 471) | async def test_cwl_event_loop_conflict(self): method test_lint_wdl_bundle_nested_imports (line 502) | async def test_lint_wdl_bundle_nested_imports(self): method test_lint_cwl_bundle_nested_imports (line 538) | async def test_lint_cwl_bundle_nested_imports(self): method test_lint_bundle_mixed_file_types (line 571) | async def test_lint_bundle_mixed_file_types(self): method test_lint_bundle_large_workflow (line 601) | async def test_lint_bundle_large_workflow(self): method test_file_permission_error (line 634) | async def test_file_permission_error(self): method test_disk_space_error (line 663) | async def test_disk_space_error(self): method test_wdl_workflow_with_structs (line 692) | async def test_wdl_workflow_with_structs(self): method test_lint_wdl_timeout_handling (line 722) | async def test_lint_wdl_timeout_handling(self, mock_subprocess): method test_lint_cwl_timeout_handling (line 734) | async def test_lint_cwl_timeout_handling(self, mock_subprocess): method test_lint_wdl_subprocess_exception (line 748) | async def test_lint_wdl_subprocess_exception(self, mock_subprocess): method test_lint_cwl_subprocess_exception (line 760) | async def test_lint_cwl_subprocess_exception(self, mock_subprocess): method test_lint_wdl_tempfile_exception (line 774) | async def test_lint_wdl_tempfile_exception(self, mock_tempfile): method test_lint_cwl_tempfile_exception (line 785) | async def test_lint_cwl_tempfile_exception(self, mock_tempfile): method test_lint_wdl_cleanup_exception (line 799) | async def test_lint_wdl_cleanup_exception(self, mock_subprocess, mock_... method test_lint_cwl_cleanup_exception (line 820) | async def test_lint_cwl_cleanup_exception(self, mock_subprocess, mock_... method test_lint_workflow_bundle_exception_handling (line 841) | async def test_lint_workflow_bundle_exception_handling(self): method test_lint_workflow_exception_handling (line 867) | async def test_lint_workflow_exception_handling(self): method test_lint_wdl_bundle_timeout_handling (line 894) | async def test_lint_wdl_bundle_timeout_handling(self, mock_subprocess): method test_lint_cwl_bundle_timeout_handling (line 908) | async def test_lint_cwl_bundle_timeout_handling(self, mock_subprocess): method test_lint_wdl_bundle_subprocess_exception (line 923) | async def test_lint_wdl_bundle_subprocess_exception(self, mock_subproc... method test_lint_cwl_bundle_subprocess_exception (line 937) | async def test_lint_cwl_bundle_subprocess_exception(self, mock_subproc... method test_lint_wdl_bundle_tempdir_exception (line 952) | async def test_lint_wdl_bundle_tempdir_exception(self, mock_tempdir): method test_lint_cwl_bundle_tempdir_exception (line 965) | async def test_lint_cwl_bundle_tempdir_exception(self, mock_tempdir): method test_lint_workflow_definition_api_exception (line 978) | async def test_lint_workflow_definition_api_exception(self): method test_lint_workflow_bundle_api_exception (line 1011) | async def test_lint_workflow_bundle_api_exception(self): method test_lint_workflow_bundle_unsupported_format_in_method (line 1040) | async def test_lint_workflow_bundle_unsupported_format_in_method(self): method test_lint_workflow_unsupported_format_in_method (line 1054) | async def test_lint_workflow_unsupported_format_in_method(self): method test_wdl_bundle_main_file_not_found (line 1068) | async def test_wdl_bundle_main_file_not_found(self): method test_cwl_bundle_main_file_not_found (line 1082) | async def test_cwl_bundle_main_file_not_found(self): method test_lint_workflow_cwl_path_coverage (line 1096) | async def test_lint_workflow_cwl_path_coverage(self): method test_lint_workflow_bundle_cwl_elif_branch (line 1124) | async def test_lint_workflow_bundle_cwl_elif_branch(self): method test_lint_workflow_cwl_elif_branch_direct (line 1154) | async def test_lint_workflow_cwl_elif_branch_direct(self): method test_lint_workflow_wdl_then_cwl_branch_coverage (line 1182) | async def test_lint_workflow_wdl_then_cwl_branch_coverage(self): method test_lint_workflow_bundle_wdl_then_cwl_branch_coverage (line 1233) | async def test_lint_workflow_bundle_wdl_then_cwl_branch_coverage(self): method test_cwl_workflow_with_subworkflows (line 1288) | async def test_cwl_workflow_with_subworkflows(self): method test_wdl_workflow_with_conditionals (line 1311) | async def test_wdl_workflow_with_conditionals(self): method test_cwl_workflow_with_scatter (line 1334) | async def test_cwl_workflow_with_scatter(self): method test_real_cwl_bundle_success (line 1357) | async def test_real_cwl_bundle_success(self): method test_real_wdl_nested_imports (line 1398) | async def test_real_wdl_nested_imports(self): method test_real_cwl_nested_imports (line 1435) | async def test_real_cwl_nested_imports(self): method test_real_wdl_validation_warnings (line 1475) | async def test_real_wdl_validation_warnings(self): method test_real_cwl_validation_warnings (line 1497) | async def test_real_cwl_validation_warnings(self): method test_bundle_linting_generic_exception (line 1523) | async def test_bundle_linting_generic_exception(self): method test_wdl_bundle_file_processing_errors (line 1538) | async def test_wdl_bundle_file_processing_errors(self): method test_wdl_bundle_directory_creation_failure (line 1556) | async def test_wdl_bundle_directory_creation_failure(self): method test_lint_workflow_bundle_tool_exception (line 1571) | async def test_lint_workflow_bundle_tool_exception(self): method test_wdl_bundle_main_file_not_found_error (line 1595) | async def test_wdl_bundle_main_file_not_found_error(self): method test_cwl_bundle_main_file_not_found_error (line 1609) | async def test_cwl_bundle_main_file_not_found_error(self): method test_wdl_bundle_unsupported_format_error (line 1623) | async def test_wdl_bundle_unsupported_format_error(self): method test_wdl_single_file_unsupported_format (line 1636) | async def test_wdl_single_file_unsupported_format(self): method test_wdl_bundle_tempfile_error (line 1649) | async def test_wdl_bundle_tempfile_error(self): method test_cwl_bundle_tempfile_error (line 1663) | async def test_cwl_bundle_tempfile_error(self): method test_raw_output_included_in_response (line 1677) | async def test_raw_output_included_in_response(self): method test_raw_output_included_in_bundle_response (line 1707) | async def test_raw_output_included_in_bundle_response(self): method test_subprocess_timeout_error (line 1743) | async def test_subprocess_timeout_error(self): method test_general_exception_handling (line 1769) | async def test_general_exception_handling(self): method test_bundle_general_exception_handling (line 1795) | async def test_bundle_general_exception_handling(self): method test_lint_workflow_fallback_branch (line 1823) | async def test_lint_workflow_fallback_branch(self): method test_lint_workflow_bundle_fallback_branch (line 1837) | async def test_lint_workflow_bundle_fallback_branch(self): FILE: src/aws-healthomics-mcp-server/tests/test_workflow_linting_resolution.py function _mock_linter (line 33) | def _mock_linter(): class TestLintWorkflowDefinitionResolution (line 53) | class TestLintWorkflowDefinitionResolution: method test_local_file_path (line 61) | async def test_local_file_path(self, tmp_path): method test_s3_uri (line 88) | async def test_s3_uri(self): method test_inline_content (line 126) | async def test_inline_content(self): method test_resolution_error_file_not_found (line 151) | async def test_resolution_error_file_not_found(self): class TestLintWorkflowBundleResolution (line 178) | class TestLintWorkflowBundleResolution: method test_local_directory (line 185) | async def test_local_directory(self, tmp_path): method test_dict_passthrough (line 215) | async def test_dict_passthrough(self): method test_resolution_error_propagation (line 245) | async def test_resolution_error_propagation(self): FILE: src/aws-healthomics-mcp-server/tests/test_workflow_management.py function test_list_workflows_success (line 32) | async def test_list_workflows_success(): function test_list_workflows_empty_response (line 103) | async def test_list_workflows_empty_response(): function test_list_workflows_with_pagination (line 124) | async def test_list_workflows_with_pagination(): function test_list_workflows_boto_error (line 150) | async def test_list_workflows_boto_error(): function test_list_workflows_unexpected_error (line 169) | async def test_list_workflows_unexpected_error(): function test_get_workflow_success (line 188) | async def test_get_workflow_success(): function test_get_workflow_with_export (line 231) | async def test_get_workflow_with_export(): function test_get_workflow_without_export (line 260) | async def test_get_workflow_without_export(): function test_get_workflow_minimal_response (line 297) | async def test_get_workflow_minimal_response(): function test_get_workflow_boto_error (line 333) | async def test_get_workflow_boto_error(): function test_get_workflow_unexpected_error (line 352) | async def test_get_workflow_unexpected_error(): function test_get_workflow_none_timestamp (line 371) | async def test_get_workflow_none_timestamp(): function test_get_workflow_with_status_message (line 398) | async def test_get_workflow_with_status_message(): function test_get_workflow_with_container_registry_map (line 429) | async def test_get_workflow_with_container_registry_map(): function test_get_workflow_without_container_registry_map (line 484) | async def test_get_workflow_without_container_registry_map(): function test_list_workflow_versions_success (line 520) | async def test_list_workflow_versions_success(mock_omics_client, mock_co... function test_list_workflow_versions_with_pagination (line 563) | async def test_list_workflow_versions_with_pagination(mock_omics_client,... function test_list_workflow_versions_empty_result (line 623) | async def test_list_workflow_versions_empty_result(mock_omics_client, mo... function test_list_workflow_versions_client_error (line 646) | async def test_list_workflow_versions_client_error(mock_omics_client, mo... function test_list_workflow_versions_general_exception (line 671) | async def test_list_workflow_versions_general_exception(mock_omics_clien... function test_create_workflow_success (line 688) | async def test_create_workflow_success(): function test_create_workflow_minimal (line 739) | async def test_create_workflow_minimal(): function test_create_workflow_invalid_base64 (line 786) | async def test_create_workflow_invalid_base64(): function test_create_workflow_boto_error (line 807) | async def test_create_workflow_boto_error(): function test_create_workflow_unexpected_error (line 837) | async def test_create_workflow_unexpected_error(): function test_create_workflow_with_container_registry_map (line 867) | async def test_create_workflow_with_container_registry_map(): function test_create_workflow_without_container_registry_map (line 956) | async def test_create_workflow_without_container_registry_map(): function test_create_workflow_with_container_registry_map_uri (line 1001) | async def test_create_workflow_with_container_registry_map_uri(): function test_create_workflow_invalid_container_registry_map (line 1056) | async def test_create_workflow_invalid_container_registry_map(): function test_create_workflow_both_container_registry_params_error (line 1085) | async def test_create_workflow_both_container_registry_params_error(): function test_create_workflow_version_success (line 1119) | async def test_create_workflow_version_success(): function test_create_workflow_version_with_static_storage (line 1173) | async def test_create_workflow_version_with_static_storage(): function test_create_workflow_version_static_without_capacity (line 1221) | async def test_create_workflow_version_static_without_capacity(): function test_create_workflow_version_invalid_base64 (line 1248) | async def test_create_workflow_version_invalid_base64(): function test_create_workflow_version_boto_error (line 1272) | async def test_create_workflow_version_boto_error(): function test_create_workflow_version_with_container_registry_map (line 1305) | async def test_create_workflow_version_with_container_registry_map(): function test_create_workflow_version_without_container_registry_map (line 1397) | async def test_create_workflow_version_without_container_registry_map(): function test_create_workflow_version_with_static_storage_and_container_registry_map (line 1451) | async def test_create_workflow_version_with_static_storage_and_container... function test_create_workflow_version_with_container_registry_map_uri (line 1534) | async def test_create_workflow_version_with_container_registry_map_uri(): function test_create_workflow_version_both_container_registry_params_error (line 1592) | async def test_create_workflow_version_both_container_registry_params_er... function test_create_workflow_with_s3_uri (line 1632) | async def test_create_workflow_with_s3_uri(): function test_create_workflow_both_definition_sources_error (line 1681) | async def test_create_workflow_both_definition_sources_error(): function test_create_workflow_no_definition_source_error (line 1706) | async def test_create_workflow_no_definition_source_error(): function test_create_workflow_invalid_s3_uri (line 1728) | async def test_create_workflow_invalid_s3_uri(): function test_create_workflow_version_with_s3_uri (line 1753) | async def test_create_workflow_version_with_s3_uri(): function test_create_workflow_version_both_definition_sources_error (line 1809) | async def test_create_workflow_version_both_definition_sources_error(): function test_create_workflow_version_no_definition_source_error (line 1837) | async def test_create_workflow_version_no_definition_source_error(): function test_create_workflow_version_invalid_container_registry_map (line 1862) | async def test_create_workflow_version_invalid_container_registry_map(): function test_create_workflow_version_invalid_s3_uri (line 1897) | async def test_create_workflow_version_invalid_s3_uri(): function test_create_workflow_version_unexpected_error (line 1922) | async def test_create_workflow_version_unexpected_error(): function test_create_workflow_s3_uri_minimal (line 1956) | async def test_create_workflow_s3_uri_minimal(): function test_create_workflow_version_s3_uri_with_static_storage (line 2000) | async def test_create_workflow_version_s3_uri_with_static_storage(): function test_list_workflow_versions_botocore_error (line 2050) | async def test_list_workflow_versions_botocore_error(): function test_create_workflow_with_path_to_main (line 2072) | async def test_create_workflow_with_path_to_main(): function test_create_workflow_with_path_to_main_s3_uri (line 2121) | async def test_create_workflow_with_path_to_main_s3_uri(): function test_create_workflow_with_path_to_main_nextflow (line 2167) | async def test_create_workflow_with_path_to_main_nextflow(): function test_create_workflow_version_with_path_to_main (line 2215) | async def test_create_workflow_version_with_path_to_main(): function test_create_workflow_version_with_path_to_main_s3_uri (line 2268) | async def test_create_workflow_version_with_path_to_main_s3_uri(): function test_create_workflow_version_with_path_to_main_static_storage (line 2318) | async def test_create_workflow_version_with_path_to_main_static_storage(): function test_create_workflow_version_with_path_to_main_and_container_registry (line 2374) | async def test_create_workflow_version_with_path_to_main_and_container_r... function test_create_workflow_with_path_to_main_empty_string (line 2456) | async def test_create_workflow_with_path_to_main_empty_string(): function test_create_workflow_version_with_path_to_main_empty_string (line 2503) | async def test_create_workflow_version_with_path_to_main_empty_string(): function test_create_workflow_with_invalid_path_to_main_absolute (line 2559) | async def test_create_workflow_with_invalid_path_to_main_absolute(): function test_create_workflow_with_invalid_path_to_main_traversal (line 2577) | async def test_create_workflow_with_invalid_path_to_main_traversal(): function test_create_workflow_with_invalid_path_to_main_extension (line 2595) | async def test_create_workflow_with_invalid_path_to_main_extension(): function test_create_workflow_version_with_invalid_path_to_main_absolute (line 2613) | async def test_create_workflow_version_with_invalid_path_to_main_absolut... function test_create_workflow_version_with_invalid_path_to_main_traversal (line 2633) | async def test_create_workflow_version_with_invalid_path_to_main_travers... function test_create_workflow_version_with_invalid_path_to_main_extension (line 2653) | async def test_create_workflow_version_with_invalid_path_to_main_extensi... function test_create_workflow_with_path_normalization (line 2673) | async def test_create_workflow_with_path_normalization(): function test_create_workflow_version_with_path_normalization (line 2712) | async def test_create_workflow_version_with_path_normalization(): function test_create_workflow_path_to_main_validation_absolute_path (line 2757) | async def test_create_workflow_path_to_main_validation_absolute_path(): function test_create_workflow_path_to_main_validation_directory_traversal (line 2776) | async def test_create_workflow_path_to_main_validation_directory_travers... function test_create_workflow_path_to_main_validation_invalid_extension (line 2795) | async def test_create_workflow_path_to_main_validation_invalid_extension(): function test_create_workflow_version_path_to_main_validation_absolute_path (line 2814) | async def test_create_workflow_version_path_to_main_validation_absolute_... function test_create_workflow_version_path_to_main_validation_directory_traversal (line 2835) | async def test_create_workflow_version_path_to_main_validation_directory... function test_create_workflow_version_path_to_main_validation_invalid_extension (line 2856) | async def test_create_workflow_version_path_to_main_validation_invalid_e... function test_create_workflow_with_readme_s3_uri (line 2880) | async def test_create_workflow_with_readme_s3_uri(): function test_create_workflow_with_readme_markdown_content (line 2914) | async def test_create_workflow_with_readme_markdown_content(): function test_create_workflow_version_with_readme_s3_uri (line 2948) | async def test_create_workflow_version_with_readme_s3_uri(): function test_create_workflow_version_with_readme_markdown_content (line 2985) | async def test_create_workflow_version_with_readme_markdown_content(): function test_create_workflow_with_definition_uri (line 3025) | async def test_create_workflow_with_definition_uri(): function test_create_workflow_with_definition_repository (line 3062) | async def test_create_workflow_with_definition_repository(): function test_create_workflow_with_repository_path_params (line 3112) | async def test_create_workflow_with_repository_path_params(): function test_create_workflow_version_with_definition_uri (line 3159) | async def test_create_workflow_version_with_definition_uri(): function test_create_workflow_version_with_definition_repository (line 3200) | async def test_create_workflow_version_with_definition_repository(): function test_create_workflow_version_with_repository_path_params (line 3250) | async def test_create_workflow_version_with_repository_path_params(): FILE: src/aws-healthomics-mcp-server/tests/test_workflow_management_resolution.py function _mock_omics_client (line 53) | def _mock_omics_client(): function _resolved_binary (line 61) | def _resolved_binary(content: bytes, source: str, input_type=None): class TestCreateWorkflowResolution (line 70) | class TestCreateWorkflowResolution: method test_definition_source_base64 (line 79) | async def test_definition_source_base64(self): method test_definition_source_local_zip (line 104) | async def test_definition_source_local_zip(self, tmp_path): method test_definition_source_s3_uri (line 130) | async def test_definition_source_s3_uri(self): method test_deprecated_alias_works_and_logs_warning (line 167) | async def test_deprecated_alias_works_and_logs_warning(self): method test_definition_source_precedence (line 196) | async def test_definition_source_precedence(self): method test_definition_uri_unchanged (line 232) | async def test_definition_uri_unchanged(self): method test_resolution_error_propagation (line 256) | async def test_resolution_error_propagation(self): class TestCreateWorkflowVersionResolution (line 277) | class TestCreateWorkflowVersionResolution: method test_definition_source_base64 (line 285) | async def test_definition_source_base64(self): method test_definition_source_local_zip (line 309) | async def test_definition_source_local_zip(self, tmp_path): method test_definition_source_s3_uri (line 336) | async def test_definition_source_s3_uri(self): method test_deprecated_alias_works (line 374) | async def test_deprecated_alias_works(self): method test_backward_compat_base64_format (line 398) | async def test_backward_compat_base64_format(self): method test_resolution_error_propagation (line 422) | async def test_resolution_error_propagation(self): FILE: src/aws-healthomics-mcp-server/tests/test_workflow_tools.py function test_package_workflow_basic (line 70) | async def test_package_workflow_basic(): function test_package_workflow_with_additional_files (line 103) | async def test_package_workflow_with_additional_files(): function test_package_workflow_default_filename (line 149) | async def test_package_workflow_default_filename(): function test_package_workflow_cwl_file (line 172) | async def test_package_workflow_cwl_file(): function test_package_workflow_with_subdirectories (line 201) | async def test_package_workflow_with_subdirectories(): function test_package_workflow_empty_additional_files (line 241) | async def test_package_workflow_empty_additional_files(): function test_package_workflow_error_handling (line 265) | async def test_package_workflow_error_handling(): function test_package_workflow_large_files (line 289) | async def test_package_workflow_large_files(): function test_package_workflow_special_characters (line 318) | async def test_package_workflow_special_characters(): FILE: src/aws-iac-mcp-server/awslabs/aws_iac_mcp_server/client/aws_client.py class ClientError (line 22) | class ClientError(Exception): function get_aws_client (line 33) | def get_aws_client(service_name, region_name=None): FILE: src/aws-iac-mcp-server/awslabs/aws_iac_mcp_server/client/aws_knowledge_client.py function search_documentation (line 35) | async def search_documentation( function _parse_search_documentation_result (line 65) | def _parse_search_documentation_result(result: CallToolResult) -> List[K... FILE: src/aws-iac-mcp-server/awslabs/aws_iac_mcp_server/client/mcp_proxy.py function get_remote_proxy_server_tool (line 28) | async def get_remote_proxy_server_tool( function create_local_proxied_tool (line 55) | async def create_local_proxied_tool( FILE: src/aws-iac-mcp-server/awslabs/aws_iac_mcp_server/data/cloudformation_failure_cases.py function match_failure_case (line 700) | def match_failure_case(error_message, resource_type=None, operation=None): FILE: src/aws-iac-mcp-server/awslabs/aws_iac_mcp_server/knowledge_models.py class KnowledgeResult (line 20) | class KnowledgeResult: class CDKToolResponse (line 30) | class CDKToolResponse: FILE: src/aws-iac-mcp-server/awslabs/aws_iac_mcp_server/sanitizer.py function sanitize_tool_response (line 16) | def sanitize_tool_response(content: str) -> str: function filter_unicode_tags (line 40) | def filter_unicode_tags(text: str) -> str: function encapsulate_content (line 49) | def encapsulate_content(text: str) -> str: FILE: src/aws-iac-mcp-server/awslabs/aws_iac_mcp_server/server.py function _create_read_tool_proxy (line 66) | async def _create_read_tool_proxy(): function validate_cloudformation_template (line 88) | def validate_cloudformation_template( function check_cloudformation_template_compliance (line 145) | def check_cloudformation_template_compliance( function troubleshoot_cloudformation_deployment (line 200) | def troubleshoot_cloudformation_deployment( function get_cloudformation_pre_deploy_validation_instructions (line 264) | def get_cloudformation_pre_deploy_validation_instructions() -> str: function search_cdk_documentation (line 297) | async def search_cdk_documentation(query: str) -> str: function search_cloudformation_documentation (line 361) | async def search_cloudformation_documentation(query: str) -> str: function search_cdk_samples_and_constructs (line 416) | async def search_cdk_samples_and_constructs( function cdk_best_practices (line 485) | async def cdk_best_practices() -> str: function main (line 528) | def main(): FILE: src/aws-iac-mcp-server/awslabs/aws_iac_mcp_server/tools/cloudformation_compliance_checker.py function initialize_guard_rules (line 31) | def initialize_guard_rules(rules_file_path: Optional[str] = None) -> bool: function _extract_remediation_from_rules (line 70) | def _extract_remediation_from_rules(rules_content: str) -> dict[str, str]: function _parse_template_resources (line 90) | def _parse_template_resources(template_content: str) -> dict: function _extract_resource_info (line 105) | def _extract_resource_info(node: dict, template_resources: dict) -> tupl... function check_compliance (line 148) | def check_compliance( FILE: src/aws-iac-mcp-server/awslabs/aws_iac_mcp_server/tools/cloudformation_deployment_troubleshooter.py class DeploymentTroubleshooter (line 26) | class DeploymentTroubleshooter: method __init__ (line 47) | def __init__(self, region: str = 'us-east-1'): method filter_cloudtrail_events (line 53) | def filter_cloudtrail_events( method troubleshoot_stack_deployment (line 115) | def troubleshoot_stack_deployment( FILE: src/aws-iac-mcp-server/awslabs/aws_iac_mcp_server/tools/cloudformation_pre_deploy_validation.py function cloudformation_pre_deploy_validation (line 18) | def cloudformation_pre_deploy_validation() -> str: FILE: src/aws-iac-mcp-server/awslabs/aws_iac_mcp_server/tools/cloudformation_validator.py function validate_template (line 23) | def validate_template( function _format_results (line 74) | def _format_results(matches: Sequence[Match]) -> dict[str, Any]: function _map_level (line 122) | def _map_level(rule_id: str) -> str: FILE: src/aws-iac-mcp-server/awslabs/aws_iac_mcp_server/tools/iac_tools.py function search_cdk_documentation_tool (line 31) | async def search_cdk_documentation_tool(query: str) -> CDKToolResponse: function search_cloudformation_documentation_tool (line 48) | async def search_cloudformation_documentation_tool(query: str) -> CDKToo... function search_cdk_samples_and_constructs_tool (line 63) | async def search_cdk_samples_and_constructs_tool( function cdk_best_practices_tool (line 85) | async def cdk_best_practices_tool() -> CDKToolResponse: FILE: src/aws-iac-mcp-server/tests/client/test_aws_client.py function test_get_aws_client_success (line 23) | def test_get_aws_client_success(mock_session_class): function test_get_aws_client_expired_token (line 37) | def test_get_aws_client_expired_token(mock_session_class): function test_get_aws_client_no_credentials (line 48) | def test_get_aws_client_no_credentials(mock_session_class): function test_get_aws_client_generic_error (line 59) | def test_get_aws_client_generic_error(mock_session_class): FILE: src/aws-iac-mcp-server/tests/client/test_aws_knowledge_client.py class TestSearchDocumentation (line 11) | class TestSearchDocumentation: method test_successful_search (line 16) | async def test_successful_search(self, mock_client_class): method test_client_exception (line 59) | async def test_client_exception(self, mock_client_class): method test_call_tool_exception (line 72) | async def test_call_tool_exception(self, mock_client_class): class TestParseSearchResult (line 86) | class TestParseSearchResult: method test_valid_result (line 89) | def test_valid_result(self): method test_empty_results (line 130) | def test_empty_results(self): method test_is_error_true (line 145) | def test_is_error_true(self): method test_empty_content (line 158) | def test_empty_content(self): method test_none_content (line 171) | def test_none_content(self): method test_content_not_text_type (line 184) | def test_content_not_text_type(self): method test_invalid_json (line 198) | def test_invalid_json(self): method test_missing_content_key (line 212) | def test_missing_content_key(self): method test_missing_result_key (line 226) | def test_missing_result_key(self): method test_missing_required_field_in_item (line 240) | def test_missing_required_field_in_item(self): FILE: src/aws-iac-mcp-server/tests/client/test_mcp_proxy.py class TestGetRemoteProxyServerTool (line 25) | class TestGetRemoteProxyServerTool: method test_get_remote_tool_success (line 29) | async def test_get_remote_tool_success(self): method test_get_remote_tool_not_found (line 48) | async def test_get_remote_tool_not_found(self): class TestCreateLocalProxiedTool (line 63) | class TestCreateLocalProxiedTool: method test_create_proxied_tool_basic (line 67) | async def test_create_proxied_tool_basic(self): method test_create_proxied_tool_with_description (line 85) | async def test_create_proxied_tool_with_description(self): method test_create_proxied_tool_with_transformer (line 105) | async def test_create_proxied_tool_with_transformer(self): method test_create_proxied_tool_with_all_parameters (line 128) | async def test_create_proxied_tool_with_all_parameters(self): FILE: src/aws-iac-mcp-server/tests/test_sanitizer.py function test_filter_unicode_tags (line 22) | def test_filter_unicode_tags(): function test_encapsulate_content (line 34) | def test_encapsulate_content(): function test_sanitize_tool_response_full_pipeline (line 45) | def test_sanitize_tool_response_full_pipeline(): function test_sanitize_tool_response_filters_unicode_tags (line 56) | def test_sanitize_tool_response_filters_unicode_tags(): function test_sanitize_real_cfn_validation_response (line 66) | def test_sanitize_real_cfn_validation_response(): FILE: src/aws-iac-mcp-server/tests/test_server.py class TestValidateCloudFormationTemplate (line 37) | class TestValidateCloudFormationTemplate: method test_validate_template_success (line 42) | def test_validate_template_success(self, mock_sanitize, mock_validate): method test_validate_template_with_regions (line 56) | def test_validate_template_with_regions(self, mock_sanitize, mock_vali... method test_validate_template_with_ignore_checks (line 70) | def test_validate_template_with_ignore_checks(self, mock_sanitize, moc... class TestCheckTemplateCompliance (line 83) | class TestCheckTemplateCompliance: method test_check_compliance_success (line 88) | def test_check_compliance_success(self, mock_sanitize, mock_check): method test_check_compliance_with_custom_rules (line 101) | def test_check_compliance_with_custom_rules(self, mock_sanitize, mock_... class TestTroubleshootDeployment (line 114) | class TestTroubleshootDeployment: method test_troubleshoot_cloudformation_deployment_success (line 119) | def test_troubleshoot_cloudformation_deployment_success( method test_troubleshoot_cloudformation_deployment_without_cloudtrail (line 140) | def test_troubleshoot_cloudformation_deployment_without_cloudtrail( method test_troubleshoot_cloudformation_deployment_adds_deeplink (line 160) | def test_troubleshoot_cloudformation_deployment_adds_deeplink( method test_troubleshoot_cloudformation_deployment_non_dict_result (line 183) | def test_troubleshoot_cloudformation_deployment_non_dict_result( class TestSearchCdkDocumentation (line 199) | class TestSearchCdkDocumentation: method test_search_cdk_documentation_success (line 205) | async def test_search_cdk_documentation_success(self, mock_sanitize, m... class TestSearchCloudFormationDocumentation (line 221) | class TestSearchCloudFormationDocumentation: method test_search_cloudformation_documentation_success (line 227) | async def test_search_cloudformation_documentation_success(self, mock_... class TestSearchCdkSamplesAndConstructs (line 240) | class TestSearchCdkSamplesAndConstructs: method test_search_cdk_samples_and_constructs_success (line 246) | async def test_search_cdk_samples_and_constructs_success(self, mock_sa... method test_search_cdk_samples_and_constructs_with_language (line 264) | async def test_search_cdk_samples_and_constructs_with_language( class TestPreDeployValidation (line 280) | class TestPreDeployValidation: method test_get_pre_deploy_validation_instructions (line 285) | def test_get_pre_deploy_validation_instructions(self, mock_sanitize, m... class TestCdkBestPractices (line 297) | class TestCdkBestPractices: method test_cdk_best_practices_success (line 303) | async def test_cdk_best_practices_success(self, mock_sanitize, mock_be... class TestMain (line 318) | class TestMain: method test_main_calls_mcp_run (line 323) | def test_main_calls_mcp_run(self, mock_asyncio_run, mock_mcp): class TestCreateReadToolProxy (line 333) | class TestCreateReadToolProxy: method test_create_read_tool_proxy_success (line 340) | async def test_create_read_tool_proxy_success( method test_main_handles_proxy_exception (line 366) | def test_main_handles_proxy_exception(self, mock_asyncio_run, mock_mcp): FILE: src/aws-iac-mcp-server/tests/tools/test_cdk_search_documentation_tool.py class TestSearchCDKDocumentation (line 23) | class TestSearchCDKDocumentation: method test_search_cdk_documentation_success (line 27) | async def test_search_cdk_documentation_success(self): method test_search_cdk_documentation_error (line 53) | async def test_search_cdk_documentation_error(self): FILE: src/aws-iac-mcp-server/tests/tools/test_cloudformation_compliance_checker.py class TestInitializeGuardRules (line 27) | class TestInitializeGuardRules: method test_initialize_default_rules_file (line 30) | def test_initialize_default_rules_file(self): method test_initialize_with_custom_rules (line 37) | def test_initialize_with_custom_rules(self, mock_file): method test_initialize_file_not_found (line 45) | def test_initialize_file_not_found(self, mock_file): class TestExtractRemediationFromRules (line 52) | class TestExtractRemediationFromRules: method test_extract_remediation_simple (line 55) | def test_extract_remediation_simple(self): method test_extract_remediation_no_remediation (line 68) | def test_extract_remediation_no_remediation(self): method test_extract_remediation_empty_rules (line 80) | def test_extract_remediation_empty_rules(self): class TestParseTemplateResources (line 87) | class TestParseTemplateResources: method test_parse_yaml_template (line 90) | def test_parse_yaml_template(self): method test_parse_json_template (line 107) | def test_parse_json_template(self): method test_parse_invalid_template (line 123) | def test_parse_invalid_template(self): method test_parse_template_no_resources (line 129) | def test_parse_template_no_resources(self): class TestCheckCompliance (line 138) | class TestCheckCompliance: method test_check_compliance_empty_template (line 141) | def test_check_compliance_empty_template(self): method test_check_compliance_invalid_json (line 148) | def test_check_compliance_invalid_json(self): method test_check_compliance_rules_not_found (line 160) | def test_check_compliance_rules_not_found(self, mock_file): class TestInitializeGuardRulesDetailed (line 170) | class TestInitializeGuardRulesDetailed: method test_initialize_with_default_rules (line 176) | def test_initialize_with_default_rules(self, mock_dirname, mock_join, ... method test_initialize_with_custom_rules (line 186) | def test_initialize_with_custom_rules(self, mock_file): method test_initialize_file_not_found (line 193) | def test_initialize_file_not_found(self, mock_file): method test_initialize_general_exception (line 200) | def test_initialize_general_exception(self, mock_file): class TestExtractRemediationFromRulesDetailed (line 207) | class TestExtractRemediationFromRulesDetailed: method test_extract_remediation_simple (line 210) | def test_extract_remediation_simple(self): method test_extract_multiple_remediations (line 223) | def test_extract_multiple_remediations(self): method test_extract_no_remediation (line 242) | def test_extract_no_remediation(self): class TestParseTemplateResourcesDetailed (line 254) | class TestParseTemplateResourcesDetailed: method test_parse_json_template (line 257) | def test_parse_json_template(self): method test_parse_yaml_template (line 276) | def test_parse_yaml_template(self): method test_parse_invalid_template (line 291) | def test_parse_invalid_template(self): method test_parse_template_without_resources (line 299) | def test_parse_template_without_resources(self): class TestCheckComplianceDetailed (line 308) | class TestCheckComplianceDetailed: method test_check_compliance_empty_template (line 311) | def test_check_compliance_empty_template(self): method test_check_compliance_whitespace_template (line 318) | def test_check_compliance_whitespace_template(self): method test_check_compliance_rules_init_failure (line 332) | def test_check_compliance_rules_init_failure(self, mock_init): method test_check_compliance_guard_validation_failure (line 352) | def test_check_compliance_guard_validation_failure(self, mock_validate): method test_check_compliance_exception_handling (line 369) | def test_check_compliance_exception_handling(self, mock_validate): method test_check_compliance_with_violations_full_path (line 390) | def test_check_compliance_with_violations_full_path(self, mock_validate): class TestComplianceCheckerWithRealTemplate (line 414) | class TestComplianceCheckerWithRealTemplate: method test_check_compliance_with_real_failing_template (line 417) | def test_check_compliance_with_real_failing_template(self): method test_check_compliance_with_valid_template (line 458) | def test_check_compliance_with_valid_template(self): method test_check_compliance_processes_nested_violations (line 500) | def test_check_compliance_processes_nested_violations(self): method test_extract_resource_info_with_paths (line 535) | def test_extract_resource_info_with_paths(self): method test_extract_resource_info_with_s3_fallback (line 549) | def test_extract_resource_info_with_s3_fallback(self): method test_extract_resource_info_no_dict (line 563) | def test_extract_resource_info_no_dict(self): method test_extract_resource_info_no_resources (line 574) | def test_extract_resource_info_no_resources(self): method test_check_compliance_with_custom_rules_file (line 587) | def test_check_compliance_with_custom_rules_file(self): method test_parse_template_resources_with_multiple_types (line 596) | def test_parse_template_resources_with_multiple_types(self): method test_initialize_guard_rules_exception_handling (line 613) | def test_initialize_guard_rules_exception_handling(self): FILE: src/aws-iac-mcp-server/tests/tools/test_cloudformation_deployment_troubleshooter.py class TestDeploymentTroubleshooterInit (line 25) | class TestDeploymentTroubleshooterInit: method test_init_creates_clients (line 31) | def test_init_creates_clients(self, mock_boto_client): method test_init_default_region (line 47) | def test_init_default_region(self, mock_boto_client): class TestFilterCloudTrailEvents (line 56) | class TestFilterCloudTrailEvents: method test_filter_cloudtrail_events_with_cfn_errors (line 59) | def test_filter_cloudtrail_events_with_cfn_errors(self): method test_filter_cloudtrail_events_no_errors (line 86) | def test_filter_cloudtrail_events_no_errors(self): method test_filter_cloudtrail_events_empty_list (line 108) | def test_filter_cloudtrail_events_empty_list(self): method test_filter_cloudtrail_events_no_root_cause (line 119) | def test_filter_cloudtrail_events_no_root_cause(self): method test_filter_cloudtrail_events_non_cfn_source (line 129) | def test_filter_cloudtrail_events_non_cfn_source(self): class TestCloudTrailUrlGeneration (line 153) | class TestCloudTrailUrlGeneration: method test_cloudtrail_url_format (line 156) | def test_cloudtrail_url_format(self): class TestCloudTrailIntegration (line 173) | class TestCloudTrailIntegration: method test_cloudtrail_integration_enabled (line 179) | def test_cloudtrail_integration_enabled(self, mock_boto_client): method test_cloudtrail_integration_disabled (line 231) | def test_cloudtrail_integration_disabled(self, mock_boto_client): method test_stack_not_found_error (line 264) | def test_stack_not_found_error(self, mock_boto_client): method test_no_failed_events (line 292) | def test_no_failed_events(self, mock_boto_client): method test_timestamp_as_string (line 314) | def test_timestamp_as_string(self, mock_boto_client): method test_invalid_timestamp_type (line 350) | def test_invalid_timestamp_type(self, mock_boto_client): class TestPatternMatching (line 368) | class TestPatternMatching: method test_pattern_matching_s3_bucket_not_empty (line 374) | def test_pattern_matching_s3_bucket_not_empty(self, mock_boto_client): method test_pattern_matching_security_group_dependency (line 412) | def test_pattern_matching_security_group_dependency(self, mock_boto_cl... method test_pattern_matching_no_match (line 448) | def test_pattern_matching_no_match(self, mock_boto_client): method test_pattern_matching_multiple_failures (line 481) | def test_pattern_matching_multiple_failures(self, mock_boto_client): class TestAnalyzeDeploymentEdgeCases (line 523) | class TestAnalyzeDeploymentEdgeCases: method test_empty_stacks_response (line 529) | def test_empty_stacks_response(self, mock_boto_client): method test_create_operation_detection (line 550) | def test_create_operation_detection(self, mock_boto_client): FILE: src/aws-iac-mcp-server/tests/tools/test_cloudformation_failure_cases.py class TestMatchFailureCase (line 20) | class TestMatchFailureCase: method test_match_with_correct_resource_type (line 23) | def test_match_with_correct_resource_type(self): method test_no_match_with_wrong_resource_type (line 31) | def test_no_match_with_wrong_resource_type(self): method test_no_match_with_wrong_operation (line 40) | def test_no_match_with_wrong_operation(self): method test_match_without_resource_type_filter (line 49) | def test_match_without_resource_type_filter(self): method test_match_without_operation_filter (line 59) | def test_match_without_operation_filter(self): method test_no_match_for_unknown_error (line 69) | def test_no_match_for_unknown_error(self): FILE: src/aws-iac-mcp-server/tests/tools/test_cloudformation_pre_deploy_validation.py function test_cloudformation_pre_deploy_validation_returns_valid_json (line 23) | def test_cloudformation_pre_deploy_validation_returns_valid_json(): function test_cloudformation_pre_deploy_validation_includes_required_fields (line 33) | def test_cloudformation_pre_deploy_validation_includes_required_fields(): FILE: src/aws-iac-mcp-server/tests/tools/test_cloudformation_validator.py class TestMapLevel (line 30) | class TestMapLevel: method test_error_severity (line 33) | def test_error_severity(self): method test_warning_severity (line 38) | def test_warning_severity(self): method test_info_severity (line 43) | def test_info_severity(self): method test_unknown_severity_defaults_to_error (line 48) | def test_unknown_severity_defaults_to_error(self): class TestFormatResults (line 55) | class TestFormatResults: method test_format_results_with_info_level (line 58) | def test_format_results_with_info_level(self): method test_format_results_with_warning_level (line 83) | def test_format_results_with_warning_level(self): method test_format_results_no_issues (line 107) | def test_format_results_no_issues(self): class TestOversizedTemplates (line 118) | class TestOversizedTemplates: method test_oversized_template_validation (line 121) | def test_oversized_template_validation(self): class TestMalformedTemplates (line 141) | class TestMalformedTemplates: method test_invalid_json (line 144) | def test_invalid_json(self): method test_invalid_yaml (line 151) | def test_invalid_yaml(self): method test_empty_template (line 165) | def test_empty_template(self): method test_non_string_template (line 171) | def test_non_string_template(self): method test_binary_data (line 185) | def test_binary_data(self): class TestInvalidParameters (line 194) | class TestInvalidParameters: method test_invalid_region_format (line 197) | def test_invalid_region_format(self): method test_invalid_ignore_checks_type (line 203) | def test_invalid_ignore_checks_type(self): method test_invalid_rules_file_path (line 210) | def test_invalid_rules_file_path(self): method test_special_characters_in_parameters (line 225) | def test_special_characters_in_parameters(self): method test_sql_injection_in_parameters (line 232) | def test_sql_injection_in_parameters(self): method test_command_injection_in_parameters (line 238) | def test_command_injection_in_parameters(self): class TestEdgeCases (line 245) | class TestEdgeCases: method test_unicode_in_template (line 248) | def test_unicode_in_template(self): method test_deeply_nested_template (line 260) | def test_deeply_nested_template(self): method test_template_with_null_values (line 271) | def test_template_with_null_values(self): method test_duplicate_resource_names (line 287) | def test_duplicate_resource_names(self): method test_extremely_long_resource_name (line 301) | def test_extremely_long_resource_name(self): class TestParameterValidation (line 316) | class TestParameterValidation: method test_missing_required_template_content (line 319) | def test_missing_required_template_content(self): method test_valid_minimal_parameters (line 324) | def test_valid_minimal_parameters(self): method test_valid_all_parameters (line 332) | def test_valid_all_parameters(self): method test_empty_optional_arrays (line 340) | def test_empty_optional_arrays(self): FILE: src/aws-iac-mcp-server/tests/tools/test_search_cdk_samples_and_constructs_tool.py class TestSearchCDKSamplesAndConstructs (line 23) | class TestSearchCDKSamplesAndConstructs: method test_search_cdk_samples_and_constructs_success (line 27) | async def test_search_cdk_samples_and_constructs_success(self): method test_search_cdk_samples_and_constructs_with_language (line 53) | async def test_search_cdk_samples_and_constructs_with_language(self): method test_search_cdk_samples_and_constructs_error (line 68) | async def test_search_cdk_samples_and_constructs_error(self): FILE: src/aws-iac-mcp-server/tests/tools/test_search_cloudformation_documentation_tool.py class TestSearchCloudFormationDocumentation (line 23) | class TestSearchCloudFormationDocumentation: method test_search_cloudformation_documentation_success (line 27) | async def test_search_cloudformation_documentation_success(self): method test_search_cloudformation_documentation_error (line 53) | async def test_search_cloudformation_documentation_error(self): FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/client.py function create_sitewise_client (line 25) | def create_sitewise_client(region: str = 'us-east-1'): function create_iam_client (line 39) | def create_iam_client(region: str = 'us-east-1'): function create_twinmaker_client (line 53) | def create_twinmaker_client(region: str = 'us-east-1'): FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/models/computation_data_models.py class ComputationModelAnomalyDetectionConfiguration (line 46) | class ComputationModelAnomalyDetectionConfiguration(BaseModel): method validate_variable_format (line 53) | def validate_variable_format(cls, v): class ComputationModelConfiguration (line 58) | class ComputationModelConfiguration(BaseModel): method validate_configuration_types (line 64) | def validate_configuration_types(cls, values): class AssetModelPropertyBindingValue (line 74) | class AssetModelPropertyBindingValue(BaseModel): method validate_uuid_format (line 81) | def validate_uuid_format(cls, v): class AssetPropertyBindingValue (line 86) | class AssetPropertyBindingValue(BaseModel): method validate_uuid_format (line 93) | def validate_uuid_format(cls, v): class ComputationModelDataBindingListItem (line 98) | class ComputationModelDataBindingListItem(BaseModel): method validate_list_item (line 105) | def validate_list_item(cls, values): class ComputationModelDataBindingValue (line 116) | class ComputationModelDataBindingValue(BaseModel): method validate_binding_value (line 124) | def validate_binding_value(cls, values): class CreateComputationModelRequest (line 139) | class CreateComputationModelRequest(BaseModel): method validate_name (line 150) | def validate_name(cls, v): method validate_description (line 159) | def validate_description(cls, v): method validate_client_token (line 169) | def validate_client_token(cls, v): method validate_data_binding_keys (line 174) | def validate_data_binding_keys(cls, v): class DeleteComputationModelRequest (line 187) | class DeleteComputationModelRequest(BaseModel): method validate_computation_model_id (line 194) | def validate_computation_model_id(cls, v): method validate_client_token (line 199) | def validate_client_token(cls, v): class UpdateComputationModelRequest (line 204) | class UpdateComputationModelRequest(BaseModel): method validate_computation_model_id (line 215) | def validate_computation_model_id(cls, v): method validate_name (line 220) | def validate_name(cls, v): method validate_description (line 229) | def validate_description(cls, v): method validate_client_token (line 239) | def validate_client_token(cls, v): method validate_data_binding_keys (line 244) | def validate_data_binding_keys(cls, v): class DescribeComputationModelRequest (line 257) | class DescribeComputationModelRequest(BaseModel): method validate_computation_model_id (line 264) | def validate_computation_model_id(cls, v): method validate_computation_model_version (line 269) | def validate_computation_model_version(cls, v): class DescribeComputationModelExecutionSummaryRequest (line 281) | class DescribeComputationModelExecutionSummaryRequest(BaseModel): method validate_computation_model_id (line 289) | def validate_computation_model_id(cls, v): method validate_resolve_to_resource_id (line 294) | def validate_resolve_to_resource_id(cls, v): method validate_resolve_to_resource_type (line 301) | def validate_resolve_to_resource_type(cls, v): class ListComputationModelsRequest (line 308) | class ListComputationModelsRequest(BaseModel): method validate_computation_model_type (line 316) | def validate_computation_model_type(cls, v): method validate_max_results (line 323) | def validate_max_results(cls, v): method validate_next_token (line 330) | def validate_next_token(cls, v): class ActionPayload (line 337) | class ActionPayload(BaseModel): method validate_string_value (line 343) | def validate_string_value(cls, v): class LabelInputConfiguration (line 348) | class LabelInputConfiguration(BaseModel): method validate_bucket_name (line 355) | def validate_bucket_name(cls, v): method validate_prefix (line 360) | def validate_prefix(cls, v): class ResultDestination (line 365) | class ResultDestination(BaseModel): method validate_bucket_name (line 372) | def validate_bucket_name(cls, v): method validate_prefix (line 377) | def validate_prefix(cls, v): class ModelEvaluationConfiguration (line 382) | class ModelEvaluationConfiguration(BaseModel): method validate_timestamps (line 390) | def validate_timestamps(cls, v): method validate_evaluation_time_range (line 395) | def validate_evaluation_time_range(cls, values): class ModelMetricsDestination (line 406) | class ModelMetricsDestination(BaseModel): method validate_bucket_name (line 413) | def validate_bucket_name(cls, v): method validate_prefix (line 418) | def validate_prefix(cls, v): class RetrainingConfiguration (line 423) | class RetrainingConfiguration(BaseModel): method validate_lookback_window (line 432) | def validate_lookback_window(cls, v): method validate_retraining_frequency (line 437) | def validate_retraining_frequency(cls, v): method validate_promotion (line 442) | def validate_promotion(cls, v): method validate_retraining_start_date (line 449) | def validate_retraining_start_date(cls, v): class TrainingPayload (line 456) | class TrainingPayload(BaseModel): method validate_training_mode (line 469) | def validate_training_mode(cls, v): method validate_timestamps (line 478) | def validate_timestamps(cls, v): method validate_target_sampling_rate (line 485) | def validate_target_sampling_rate(cls, v): method validate_time_range (line 492) | def validate_time_range(cls, values): method validate_training_mode_constraints (line 504) | def validate_training_mode_constraints(cls, values): class InferencePayload (line 541) | class InferencePayload(BaseModel): method validate_inference_mode (line 552) | def validate_inference_mode(cls, v): method validate_data_upload_frequency (line 557) | def validate_data_upload_frequency(cls, v): method validate_data_delay_offset (line 564) | def validate_data_delay_offset(cls, v): method validate_target_model_version (line 571) | def validate_target_model_version(cls, v): method validate_weekly_operating_window (line 578) | def validate_weekly_operating_window(cls, v): method validate_inference_time_zone (line 630) | def validate_inference_time_zone(cls, v): method validate_inference_mode_constraints (line 637) | def validate_inference_mode_constraints(cls, values): class ResolveTo (line 657) | class ResolveTo(BaseModel): method validate_asset_id (line 663) | def validate_asset_id(cls, v): class TargetResource (line 668) | class TargetResource(BaseModel): method validate_asset_id (line 675) | def validate_asset_id(cls, v): method validate_computation_model_id (line 682) | def validate_computation_model_id(cls, v): method validate_target_resource (line 689) | def validate_target_resource(cls, values): class ExecuteActionRequest (line 699) | class ExecuteActionRequest(BaseModel): method validate_action_definition_id (line 709) | def validate_action_definition_id(cls, v): method validate_client_token (line 714) | def validate_client_token(cls, v): class ListActionsRequest (line 719) | class ListActionsRequest(BaseModel): method validate_target_resource_id (line 730) | def validate_target_resource_id(cls, v): method validate_target_resource_type (line 735) | def validate_target_resource_type(cls, v): method validate_max_results (line 740) | def validate_max_results(cls, v): method validate_next_token (line 747) | def validate_next_token(cls, v): method validate_resolve_to_resource_id (line 754) | def validate_resolve_to_resource_id(cls, v): method validate_resolve_to_resource_type (line 761) | def validate_resolve_to_resource_type(cls, v): class DescribeActionRequest (line 768) | class DescribeActionRequest(BaseModel): method validate_action_id (line 774) | def validate_action_id(cls, v): class ListExecutionsRequest (line 779) | class ListExecutionsRequest(BaseModel): method validate_target_resource_id (line 791) | def validate_target_resource_id(cls, v): method validate_target_resource_type (line 796) | def validate_target_resource_type(cls, v): method validate_action_type (line 801) | def validate_action_type(cls, v): method validate_max_results (line 808) | def validate_max_results(cls, v): method validate_next_token (line 815) | def validate_next_token(cls, v): method validate_resolve_to_resource_id (line 822) | def validate_resolve_to_resource_id(cls, v): method validate_resolve_to_resource_type (line 829) | def validate_resolve_to_resource_type(cls, v): class DescribeExecutionRequest (line 836) | class DescribeExecutionRequest(BaseModel): method validate_execution_id (line 842) | def validate_execution_id(cls, v): class DataBindingValueFilter (line 847) | class DataBindingValueFilter(BaseModel): method validate_asset (line 856) | def validate_asset(cls, v): method validate_asset_model (line 865) | def validate_asset_model(cls, v): method validate_asset_property (line 874) | def validate_asset_property(cls, v): method validate_asset_model_property (line 884) | def validate_asset_model_property(cls, v): method validate_filter (line 896) | def validate_filter(cls, values): class ListComputationModelDataBindingUsagesRequest (line 916) | class ListComputationModelDataBindingUsagesRequest(BaseModel): method validate_max_results (line 924) | def validate_max_results(cls, v): method validate_next_token (line 931) | def validate_next_token(cls, v): class ListComputationModelResolveToResourcesRequest (line 938) | class ListComputationModelResolveToResourcesRequest(BaseModel): method validate_computation_model_id (line 946) | def validate_computation_model_id(cls, v): method validate_max_results (line 951) | def validate_max_results(cls, v): method validate_next_token (line 958) | def validate_next_token(cls, v): FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/models/metadata_transfer_data_models.py class Name (line 33) | class Name(BaseModel): method validate_name (line 39) | def validate_name(cls, v): class Description (line 46) | class Description(BaseModel): method validate_description (line 52) | def validate_description(cls, v): class Tag (line 59) | class Tag(BaseModel): method validate_key (line 66) | def validate_key(cls, v): method validate_value (line 73) | def validate_value(cls, v): class ID (line 78) | class ID(BaseModel): method validate_uuid (line 84) | def validate_uuid(cls, v): class ExternalId (line 89) | class ExternalId(BaseModel): method validate_external_id (line 95) | def validate_external_id(cls, v): class AttributeValue (line 100) | class AttributeValue(BaseModel): method validate_attribute_value (line 106) | def validate_attribute_value(cls, v): class PropertyUnit (line 112) | class PropertyUnit(BaseModel): method validate_unit (line 118) | def validate_unit(cls, v): class PropertyAlias (line 125) | class PropertyAlias(BaseModel): method validate_alias (line 131) | def validate_alias(cls, v): class AssetModelType (line 138) | class AssetModelType(BaseModel): class DataType (line 144) | class DataType(BaseModel): class ComputeLocation (line 150) | class ComputeLocation(BaseModel): class ForwardingConfig (line 156) | class ForwardingConfig(BaseModel): class MeasurementProcessingConfig (line 162) | class MeasurementProcessingConfig(BaseModel): class TransformProcessingConfig (line 168) | class TransformProcessingConfig(BaseModel): class MetricProcessingConfig (line 175) | class MetricProcessingConfig(BaseModel): class TumblingWindow (line 181) | class TumblingWindow(BaseModel): method validate_interval (line 188) | def validate_interval(cls, v): method validate_offset (line 194) | def validate_offset(cls, v): class MetricWindow (line 201) | class MetricWindow(BaseModel): class VariableValue (line 207) | class VariableValue(BaseModel): method validate_variable (line 216) | def validate_variable(cls, values): class ExpressionVariable (line 225) | class ExpressionVariable(BaseModel): method validate_name (line 232) | def validate_name(cls, v): class Attribute (line 237) | class Attribute(BaseModel): method validate_default_value (line 243) | def validate_default_value(cls, v): class Transform (line 250) | class Transform(BaseModel): method validate_expr (line 258) | def validate_expr(cls, v): class Measurement (line 264) | class Measurement(BaseModel): class Metric (line 270) | class Metric(BaseModel): method validate_expr (line 279) | def validate_expr(cls, v): class PropertyType (line 285) | class PropertyType(BaseModel): method validate_property_type (line 294) | def validate_property_type(cls, values): class AssetModelHierarchy (line 308) | class AssetModelHierarchy(BaseModel): method validate_hierarchy (line 318) | def validate_hierarchy(cls, values): class AssetModelProperty (line 331) | class AssetModelProperty(BaseModel): method validate_property (line 343) | def validate_property(cls, values): class AssetModelCompositeModel (line 353) | class AssetModelCompositeModel(BaseModel): method validate_composite (line 368) | def validate_composite(cls, values): class AssetModel (line 375) | class AssetModel(BaseModel): method validate_model (line 391) | def validate_model(cls, values): class AssetProperty (line 398) | class AssetProperty(BaseModel): method validate_asset_property (line 410) | def validate_asset_property(cls, values): class AssetHierarchy (line 418) | class AssetHierarchy(BaseModel): method validate_asset_hierarchy (line 427) | def validate_asset_hierarchy(cls, values): class Asset (line 447) | class Asset(BaseModel): method validate_asset (line 461) | def validate_asset(cls, values): class BulkImportSchema (line 481) | class BulkImportSchema(BaseModel): method validate_bulk_import_schema (line 495) | def validate_bulk_import_schema(cls, values): FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/prompts/anomaly_detection_workflow.py function anomaly_detection_workflow_helper (line 20) | def anomaly_detection_workflow_helper() -> str: FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/prompts/asset_hierarchy.py function asset_hierarchy_visualization (line 23) | def asset_hierarchy_visualization(asset_id: str) -> str: FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/prompts/bulk_import_workflow.py function bulk_import_workflow_helper (line 20) | def bulk_import_workflow_helper() -> str: FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/prompts/data_exploration.py function data_exploration_helper (line 23) | def data_exploration_helper(exploration_goal: str, time_range: str = 'la... FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/prompts/data_ingestion.py function data_ingestion_helper (line 23) | def data_ingestion_helper(data_source: str, target_assets: str) -> str: FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/server.py function get_sitewise_server_mode (line 225) | def get_sitewise_server_mode() -> Dict[str, Any]: function signal_handler (line 264) | async def signal_handler(scope: CancelScope): function run_server (line 280) | async def run_server(): function main (line 370) | def main(): FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/tool_metadata.py function tool_metadata (line 20) | def tool_metadata(readonly: bool = True): function is_readonly_tool (line 45) | def is_readonly_tool(func: Callable[..., Any]) -> bool: FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/tools/sitewise_access.py function describe_default_encryption_configuration (line 26) | def describe_default_encryption_configuration( function put_default_encryption_configuration (line 58) | def put_default_encryption_configuration( function describe_logging_options (line 105) | def describe_logging_options( function put_logging_options (line 132) | def put_logging_options( function describe_storage_configuration (line 162) | def describe_storage_configuration( function put_storage_configuration (line 201) | def put_storage_configuration( FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/tools/sitewise_asset_models.py function create_asset_model (line 34) | def create_asset_model( function describe_asset_model (line 160) | def describe_asset_model( function list_asset_models (line 239) | def list_asset_models( function update_asset_model (line 307) | def update_asset_model( function delete_asset_model (line 411) | def delete_asset_model( function list_asset_model_properties (line 465) | def list_asset_model_properties( function create_asset_model_composite_model (line 552) | def create_asset_model_composite_model( FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/tools/sitewise_assets.py function create_asset (line 36) | def create_asset( function describe_asset (line 130) | def describe_asset( function list_assets (line 193) | def list_assets( function update_asset (line 264) | def update_asset( function delete_asset (line 326) | def delete_asset( function associate_assets (line 373) | def associate_assets( function disassociate_assets (line 439) | def disassociate_assets( function list_associated_assets (line 504) | def list_associated_assets( FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/tools/sitewise_computation_models.py function _determine_computation_model_configuration_type (line 41) | def _determine_computation_model_configuration_type( function create_computation_model (line 135) | def create_computation_model( function create_anomaly_detection_model (line 229) | def create_anomaly_detection_model( function delete_computation_model (line 334) | def delete_computation_model( function update_computation_model (line 391) | def update_computation_model( function list_computation_models (line 470) | def list_computation_models( function describe_computation_model (line 541) | def describe_computation_model( function describe_computation_model_execution_summary (line 622) | def describe_computation_model_execution_summary( function list_computation_model_data_binding_usages (line 759) | def list_computation_model_data_binding_usages( function list_computation_model_resolve_to_resources (line 879) | def list_computation_model_resolve_to_resources( FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/tools/sitewise_data.py function create_bulk_import_job (line 37) | def create_bulk_import_job( function create_buffered_ingestion_job (line 268) | def create_buffered_ingestion_job( function batch_put_asset_property_value (line 341) | def batch_put_asset_property_value( function get_asset_property_value (line 372) | def get_asset_property_value( function get_asset_property_value_history (line 429) | def get_asset_property_value_history( function get_asset_property_aggregates (line 521) | def get_asset_property_aggregates( function get_interpolated_asset_property_values (line 626) | def get_interpolated_asset_property_values( function batch_get_asset_property_value (line 730) | def batch_get_asset_property_value( function batch_get_asset_property_value_history (line 775) | def batch_get_asset_property_value_history( function batch_get_asset_property_aggregates (line 824) | def batch_get_asset_property_aggregates( function list_bulk_import_jobs (line 871) | def list_bulk_import_jobs( function describe_bulk_import_job (line 972) | def describe_bulk_import_job( function execute_query (line 1066) | def execute_query( function create_bulk_import_iam_role (line 1361) | def create_bulk_import_iam_role( FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/tools/sitewise_executions.py function execute_action (line 47) | def execute_action( function list_actions (line 137) | def list_actions( function describe_action (line 233) | def describe_action( function execute_training_action (line 301) | def execute_training_action( function execute_inference_action (line 549) | def execute_inference_action( function list_executions (line 669) | def list_executions( function describe_execution (line 776) | def describe_execution( FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/tools/sitewise_gateways.py function create_gateway (line 30) | def create_gateway( function describe_gateway (line 76) | def describe_gateway( function list_gateways (line 114) | def list_gateways( function update_gateway (line 157) | def update_gateway( function delete_gateway (line 188) | def delete_gateway( function describe_gateway_capability_configuration (line 216) | def describe_gateway_capability_configuration( function update_gateway_capability_configuration (line 260) | def update_gateway_capability_configuration( function list_time_series (line 308) | def list_time_series( function describe_time_series (line 378) | def describe_time_series( function associate_time_series_to_asset_property (line 436) | def associate_time_series_to_asset_property( function disassociate_time_series_from_asset_property (line 487) | def disassociate_time_series_from_asset_property( function delete_time_series (line 538) | def delete_time_series( FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/tools/sitewise_metadata_transfer.py function create_bulk_import_schema (line 46) | def create_bulk_import_schema( function create_metadata_transfer_job (line 133) | def create_metadata_transfer_job( function cancel_metadata_transfer_job (line 380) | def cancel_metadata_transfer_job( function get_metadata_transfer_job (line 431) | def get_metadata_transfer_job( function list_metadata_transfer_jobs (line 485) | def list_metadata_transfer_jobs( FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/tools/timestamp_tools.py function convert_unix_timestamp (line 24) | def convert_unix_timestamp( function convert_multiple_timestamps (line 92) | def convert_multiple_timestamps( function create_timestamp_range (line 140) | def create_timestamp_range( function get_current_timestamp (line 207) | def get_current_timestamp() -> Dict[str, Any]: FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/validation.py class ValidationError (line 27) | class ValidationError(Exception): function validate_asset_id (line 33) | def validate_asset_id(asset_id: str) -> None: function validate_asset_model_id (line 41) | def validate_asset_model_id(asset_model_id: str) -> None: function validate_computation_model_name (line 49) | def validate_computation_model_name(computation_model_name: str) -> None: function validate_computation_model_description (line 61) | def validate_computation_model_description(computation_model_description... function validate_asset_name (line 73) | def validate_asset_name(asset_name: str) -> None: function validate_property_alias (line 86) | def validate_property_alias(property_alias: str) -> None: function validate_region (line 100) | def validate_region(region: str) -> None: function validate_max_results (line 130) | def validate_max_results(max_results: int, min_val: int = 1, max_val: in... function validate_timestamp (line 138) | def validate_timestamp(timestamp: Union[int, str, datetime]) -> None: function validate_data_type (line 154) | def validate_data_type(data_type: str) -> None: function validate_quality (line 161) | def validate_quality(quality: str) -> None: function validate_aggregate_types (line 168) | def validate_aggregate_types(aggregate_types: List[str]) -> None: function validate_time_ordering (line 185) | def validate_time_ordering(time_ordering: str) -> None: function validate_asset_model_properties (line 194) | def validate_asset_model_properties(properties: List[Dict[str, Any]]) ->... function validate_batch_entries (line 227) | def validate_batch_entries(entries: List[Dict[str, Any]], max_entries: i... function validate_access_policy_permission (line 246) | def validate_access_policy_permission(permission: str) -> None: function validate_encryption_type (line 255) | def validate_encryption_type(encryption_type: str) -> None: function validate_storage_type (line 262) | def validate_storage_type(storage_type: str) -> None: function validate_gateway_platform (line 269) | def validate_gateway_platform(platform: Dict[str, Any]) -> None: class SiteWiseQuotas (line 297) | class SiteWiseQuotas: function validate_service_quotas (line 319) | def validate_service_quotas(operation: str, current_count: int = 0) -> N... function validate_string_for_injection (line 331) | def validate_string_for_injection(text: str, field_name: str = 'input') ... function sanitize_string (line 420) | def sanitize_string(text: Union[str, None], max_length: int = 1000) -> U... function validate_json_string (line 446) | def validate_json_string(json_str: str, field_name: str = 'JSON') -> None: function validate_safe_identifier (line 498) | def validate_safe_identifier(identifier: str, field_name: str = 'identif... function check_storage_configuration_requirements (line 520) | def check_storage_configuration_requirements(client, adaptive_ingestion:... FILE: src/aws-iot-sitewise-mcp-server/awslabs/aws_iot_sitewise_mcp_server/validation_utils.py function validate_uuid_format (line 44) | def validate_uuid_format(value: str, field_name: str = 'UUID') -> str: function validate_asset_or_model_id (line 69) | def validate_asset_or_model_id(value: str, field_name: str = 'ID') -> str: function validate_string_length (line 101) | def validate_string_length( function validate_control_characters (line 127) | def validate_control_characters(value: str, field_name: str = 'String') ... function validate_regex_pattern (line 146) | def validate_regex_pattern( function validate_s3_bucket_name (line 175) | def validate_s3_bucket_name(bucket_name: str, field_name: str = 'bucketN... function validate_s3_prefix (line 195) | def validate_s3_prefix(prefix: str, field_name: str = 'prefix') -> str: function validate_external_id (line 212) | def validate_external_id(external_id: str, field_name: str = 'externalId... function validate_variable_name (line 235) | def validate_variable_name(variable_name: str, field_name: str = 'variab... function validate_expression_variable_name (line 255) | def validate_expression_variable_name(name: str, field_name: str = 'name... function validate_positive_integer (line 273) | def validate_positive_integer(value: int, field_name: str = 'value') -> ... function validate_integer_range (line 292) | def validate_integer_range( function validate_positive_timestamp (line 318) | def validate_positive_timestamp(timestamp: int, field_name: str = 'times... function validate_iso8601_duration (line 337) | def validate_iso8601_duration(duration: str, field_name: str = 'duration... function validate_lookback_window (line 357) | def validate_lookback_window(window: str, field_name: str = 'lookbackWin... function validate_retraining_frequency (line 377) | def validate_retraining_frequency(frequency: str, field_name: str = 'ret... function validate_data_upload_frequency (line 411) | def validate_data_upload_frequency(frequency: str, field_name: str = 'da... function validate_target_sampling_rate (line 449) | def validate_target_sampling_rate(rate: str, field_name: str = 'targetSa... function validate_iana_timezone (line 481) | def validate_iana_timezone(timezone: str, field_name: str = 'timezone') ... function validate_time_range (line 521) | def validate_time_range(time_range: str, field_name: str = 'timeRange') ... function validate_client_token (line 551) | def validate_client_token(token: str, field_name: str = 'clientToken') -... function validate_next_token (line 571) | def validate_next_token(token: str, field_name: str = 'nextToken') -> str: function validate_max_results (line 591) | def validate_max_results( function validate_string_value (line 611) | def validate_string_value(value: str, field_name: str = 'stringValue') -... function validate_action_type (line 628) | def validate_action_type(action_type: str, field_name: str = 'actionType... function validate_enum_value (line 648) | def validate_enum_value(value: str, valid_values: list, field_name: str ... FILE: src/aws-iot-sitewise-mcp-server/examples/wind_farm_example.py function create_wind_turbine_model (line 34) | def create_wind_turbine_model() -> Dict[str, Any]: function create_wind_farm_model (line 65) | def create_wind_farm_model() -> Dict[str, Any]: function create_assets (line 94) | def create_assets() -> Dict[str, Any]: function ingest_sample_data (line 148) | def ingest_sample_data(assets: Dict[str, Any]) -> None: function main (line 223) | def main(): FILE: src/aws-iot-sitewise-mcp-server/tests/conftest.py function tests_setup_and_teardown (line 23) | def tests_setup_and_teardown(): FILE: src/aws-iot-sitewise-mcp-server/tests/models/test_computation_data_models.py class TestBasicModels (line 53) | class TestBasicModels: method test_action_payload_validation (line 56) | def test_action_payload_validation(self): method test_asset_model_property_binding_value_validation (line 70) | def test_asset_model_property_binding_value_validation(self): method test_asset_property_binding_value_validation (line 92) | def test_asset_property_binding_value_validation(self): method test_resolve_to_validation (line 114) | def test_resolve_to_validation(self): class TestComputationModelConfiguration (line 125) | class TestComputationModelConfiguration: method test_anomaly_detection_configuration_validation (line 128) | def test_anomaly_detection_configuration_validation(self): method test_computation_model_configuration_validation (line 149) | def test_computation_model_configuration_validation(self): class TestDataBindingModels (line 164) | class TestDataBindingModels: method test_computation_model_data_binding_list_item_validation (line 167) | def test_computation_model_data_binding_list_item_validation(self): method test_computation_model_data_binding_value_validation (line 197) | def test_computation_model_data_binding_value_validation(self): class TestTargetResource (line 231) | class TestTargetResource: method test_target_resource_validation (line 234) | def test_target_resource_validation(self): class TestS3ConfigurationModels (line 266) | class TestS3ConfigurationModels: method test_label_input_configuration_validation (line 269) | def test_label_input_configuration_validation(self): method test_result_destination_validation (line 284) | def test_result_destination_validation(self): method test_model_metrics_destination_validation (line 295) | def test_model_metrics_destination_validation(self): class TestModelEvaluationConfiguration (line 303) | class TestModelEvaluationConfiguration: method test_model_evaluation_configuration_validation (line 306) | def test_model_evaluation_configuration_validation(self): class TestRetrainingConfiguration (line 339) | class TestRetrainingConfiguration: method test_retraining_configuration_validation (line 342) | def test_retraining_configuration_validation(self): class TestTrainingPayload (line 389) | class TestTrainingPayload: method test_training_payload_train_model_validation (line 392) | def test_training_payload_train_model_validation(self): method test_training_payload_retraining_scheduler_validation (line 418) | def test_training_payload_retraining_scheduler_validation(self): method test_training_payload_stop_retraining_scheduler_validation (line 433) | def test_training_payload_stop_retraining_scheduler_validation(self): method test_training_payload_optional_fields_validation (line 454) | def test_training_payload_optional_fields_validation(self): method test_training_mode_validation (line 474) | def test_training_mode_validation(self): class TestInferencePayload (line 481) | class TestInferencePayload: method test_inference_payload_start_validation (line 484) | def test_inference_payload_start_validation(self): method test_inference_payload_stop_validation (line 505) | def test_inference_payload_stop_validation(self): method test_inference_payload_optional_fields_validation (line 518) | def test_inference_payload_optional_fields_validation(self): method test_weekly_operating_window_validation (line 544) | def test_weekly_operating_window_validation(self): method test_inference_timezone_validation (line 597) | def test_inference_timezone_validation(self): class TestRequestModels (line 620) | class TestRequestModels: method test_create_computation_model_request_validation (line 623) | def test_create_computation_model_request_validation(self): method test_delete_computation_model_request_validation (line 678) | def test_delete_computation_model_request_validation(self): method test_describe_computation_model_request_validation (line 690) | def test_describe_computation_model_request_validation(self): method test_list_computation_models_request_validation (line 720) | def test_list_computation_models_request_validation(self): method test_execute_action_request_validation (line 737) | def test_execute_action_request_validation(self): method test_list_actions_request_validation (line 756) | def test_list_actions_request_validation(self): method test_describe_action_request_validation (line 775) | def test_describe_action_request_validation(self): method test_list_executions_request_validation (line 785) | def test_list_executions_request_validation(self): method test_describe_execution_request_validation (line 809) | def test_describe_execution_request_validation(self): method test_describe_computation_model_execution_summary_request_validation (line 819) | def test_describe_computation_model_execution_summary_request_validati... method test_update_computation_model_request_validation (line 847) | def test_update_computation_model_request_validation(self): class TestDataBindingValueFilter (line 890) | class TestDataBindingValueFilter: method test_data_binding_value_filter_asset_validation (line 893) | def test_data_binding_value_filter_asset_validation(self): method test_data_binding_value_filter_asset_model_validation (line 912) | def test_data_binding_value_filter_asset_model_validation(self): method test_data_binding_value_filter_asset_property_validation (line 929) | def test_data_binding_value_filter_asset_property_validation(self): method test_data_binding_value_filter_asset_model_property_validation (line 970) | def test_data_binding_value_filter_asset_model_property_validation(self): method test_data_binding_value_filter_validation_constraints (line 1011) | def test_data_binding_value_filter_validation_constraints(self): class TestAdditionalRequestModels (line 1025) | class TestAdditionalRequestModels: method test_list_computation_model_data_binding_usages_request_validation (line 1028) | def test_list_computation_model_data_binding_usages_request_validation... method test_list_computation_model_resolve_to_resources_request_validation (line 1061) | def test_list_computation_model_resolve_to_resources_request_validatio... class TestAdditionalValidationScenarios (line 1094) | class TestAdditionalValidationScenarios: method test_retraining_configuration_none_promotion_validation (line 1097) | def test_retraining_configuration_none_promotion_validation(self): method test_retraining_configuration_none_retraining_start_date_validation (line 1105) | def test_retraining_configuration_none_retraining_start_date_validatio... method test_training_payload_none_timestamp_validation (line 1113) | def test_training_payload_none_timestamp_validation(self): method test_training_payload_none_target_sampling_rate_validation (line 1124) | def test_training_payload_none_target_sampling_rate_validation(self): method test_inference_payload_none_data_upload_frequency_validation (line 1132) | def test_inference_payload_none_data_upload_frequency_validation(self): method test_inference_payload_none_data_delay_offset_validation (line 1138) | def test_inference_payload_none_data_delay_offset_validation(self): method test_inference_payload_none_target_model_version_validation (line 1146) | def test_inference_payload_none_target_model_version_validation(self): method test_inference_payload_none_weekly_operating_window_validation (line 1154) | def test_inference_payload_none_weekly_operating_window_validation(self): method test_inference_payload_none_inference_time_zone_validation (line 1162) | def test_inference_payload_none_inference_time_zone_validation(self): method test_inference_payload_start_mode_constraints_validation (line 1170) | def test_inference_payload_start_mode_constraints_validation(self): method test_inference_payload_stop_mode_constraints_validation (line 1178) | def test_inference_payload_stop_mode_constraints_validation(self): method test_data_binding_value_filter_empty_dict_validation (line 1207) | def test_data_binding_value_filter_empty_dict_validation(self): method test_inference_payload_start_mode_required_frequency_validation (line 1225) | def test_inference_payload_start_mode_required_frequency_validation(se... method test_training_payload_timestamp_validation_edge_cases (line 1232) | def test_training_payload_timestamp_validation_edge_cases(self): method test_inference_payload_validation_edge_cases (line 1246) | def test_inference_payload_validation_edge_cases(self): method test_inference_payload_mode_constraint_edge_cases (line 1259) | def test_inference_payload_mode_constraint_edge_cases(self): method test_training_payload_timestamp_validation_with_none_values (line 1280) | def test_training_payload_timestamp_validation_with_none_values(self): method test_training_payload_target_sampling_rate_none_validation (line 1308) | def test_training_payload_target_sampling_rate_none_validation(self): method test_inference_payload_data_upload_frequency_none_validation (line 1326) | def test_inference_payload_data_upload_frequency_none_validation(self): method test_inference_payload_data_delay_offset_none_validation (line 1342) | def test_inference_payload_data_delay_offset_none_validation(self): method test_inference_payload_target_model_version_none_validation (line 1360) | def test_inference_payload_target_model_version_none_validation(self): method test_inference_payload_start_mode_validation_paths (line 1378) | def test_inference_payload_start_mode_validation_paths(self): method test_inference_payload_stop_mode_validation_paths (line 1392) | def test_inference_payload_stop_mode_validation_paths(self): class TestEdgeCases (line 1419) | class TestEdgeCases: method test_create_computation_model_request_description_validation (line 1422) | def test_create_computation_model_request_description_validation(self): method test_update_computation_model_request_description_validation (line 1464) | def test_update_computation_model_request_description_validation(self): method test_describe_computation_model_execution_summary_request_edge_cases (line 1509) | def test_describe_computation_model_execution_summary_request_edge_cas... method test_list_actions_request_edge_cases (line 1527) | def test_list_actions_request_edge_cases(self): method test_list_executions_request_edge_cases (line 1547) | def test_list_executions_request_edge_cases(self): FILE: src/aws-iot-sitewise-mcp-server/tests/models/test_metadata_transfer_data_models.py class TestBasicModels (line 55) | class TestBasicModels: method test_name_validation (line 58) | def test_name_validation(self): method test_external_id_validation (line 76) | def test_external_id_validation(self): method test_external_id_pattern_validation (line 90) | def test_external_id_pattern_validation(self): method test_id_validation (line 104) | def test_id_validation(self): method test_data_type_validation (line 115) | def test_data_type_validation(self): method test_description_validation (line 123) | def test_description_validation(self): method test_description_control_characters (line 137) | def test_description_control_characters(self): method test_property_alias_validation (line 142) | def test_property_alias_validation(self): method test_property_alias_control_characters (line 152) | def test_property_alias_control_characters(self): method test_tag_validation (line 161) | def test_tag_validation(self): method test_attribute_value_validation (line 180) | def test_attribute_value_validation(self): method test_property_unit_validation (line 190) | def test_property_unit_validation(self): class TestPropertyTypes (line 209) | class TestPropertyTypes: method test_measurement_property_type (line 212) | def test_measurement_property_type(self): method test_attribute_property_type (line 221) | def test_attribute_property_type(self): method test_transform_property_type (line 229) | def test_transform_property_type(self): method test_metric_property_type (line 240) | def test_metric_property_type(self): method test_property_type_validation (line 252) | def test_property_type_validation(self): method test_attribute_default_value_validation (line 293) | def test_attribute_default_value_validation(self): method test_transform_expression_validation (line 303) | def test_transform_expression_validation(self): method test_metric_expression_validation (line 318) | def test_metric_expression_validation(self): class TestAssetModelProperty (line 335) | class TestAssetModelProperty: method test_valid_measurement_property (line 338) | def test_valid_measurement_property(self): method test_valid_attribute_property (line 353) | def test_valid_attribute_property(self): method test_asset_model_property_validation (line 365) | def test_asset_model_property_validation(self): class TestAssetProperty (line 406) | class TestAssetProperty: method test_valid_asset_property (line 409) | def test_valid_asset_property(self): method test_asset_property_validation (line 419) | def test_asset_property_validation(self): class TestAssetHierarchy (line 426) | class TestAssetHierarchy: method test_valid_asset_hierarchy (line 429) | def test_valid_asset_hierarchy(self): method test_asset_hierarchy_validation (line 442) | def test_asset_hierarchy_validation(self): class TestAssetModelHierarchy (line 457) | class TestAssetModelHierarchy: method test_asset_model_hierarchy_validation (line 460) | def test_asset_model_hierarchy_validation(self): class TestAssetModelCompositeModel (line 475) | class TestAssetModelCompositeModel: method test_asset_model_composite_model_validation (line 478) | def test_asset_model_composite_model_validation(self): class TestAssetModel (line 493) | class TestAssetModel: method test_asset_model_validation (line 496) | def test_asset_model_validation(self): class TestAsset (line 503) | class TestAsset: method test_asset_validation (line 506) | def test_asset_validation(self): class TestBulkImportSchema (line 531) | class TestBulkImportSchema: method test_empty_bulk_import_schema (line 534) | def test_empty_bulk_import_schema(self): method test_bulk_import_schema_with_lists (line 540) | def test_bulk_import_schema_with_lists(self): method test_schema_model_dump (line 546) | def test_schema_model_dump(self): method test_bulk_import_schema_cross_validation (line 555) | def test_bulk_import_schema_cross_validation(self): method test_bulk_import_schema_cross_validation_edge_cases (line 583) | def test_bulk_import_schema_cross_validation_edge_cases(self): method test_bulk_import_schema_asset_model_external_id_validation (line 637) | def test_bulk_import_schema_asset_model_external_id_validation(self): class TestExpressionVariable (line 713) | class TestExpressionVariable: method test_valid_expression_variable (line 716) | def test_valid_expression_variable(self): method test_invalid_variable_name (line 727) | def test_invalid_variable_name(self): method test_expression_variable_name_validation (line 736) | def test_expression_variable_name_validation(self): method test_variable_value_validation (line 752) | def test_variable_value_validation(self): class TestTumblingWindow (line 763) | class TestTumblingWindow: method test_valid_tumbling_window (line 766) | def test_valid_tumbling_window(self): method test_tumbling_window_with_offset (line 771) | def test_tumbling_window_with_offset(self): method test_tumbling_window_validation (line 777) | def test_tumbling_window_validation(self): class TestProcessingConfigs (line 796) | class TestProcessingConfigs: method test_forwarding_config (line 799) | def test_forwarding_config(self): method test_compute_location (line 804) | def test_compute_location(self): method test_measurement_processing_config (line 809) | def test_measurement_processing_config(self): method test_measurement_model (line 814) | def test_measurement_model(self): method test_transform_processing_config (line 829) | def test_transform_processing_config(self): method test_metric_processing_config (line 839) | def test_metric_processing_config(self): method test_asset_model_type (line 844) | def test_asset_model_type(self): FILE: src/aws-iot-sitewise-mcp-server/tests/test_client.py class TestClient (line 26) | class TestClient(unittest.TestCase): method test_create_sitewise_client_default_region (line 30) | def test_create_sitewise_client_default_region(self, mock_boto_client): method test_create_sitewise_client_custom_region (line 48) | def test_create_sitewise_client_custom_region(self, mock_boto_client): method test_create_iam_client_default_region (line 62) | def test_create_iam_client_default_region(self, mock_boto_client): method test_create_iam_client_custom_region (line 80) | def test_create_iam_client_custom_region(self, mock_boto_client): method test_create_twinmaker_client_default_region (line 94) | def test_create_twinmaker_client_default_region(self, mock_boto_client): method test_create_twinmaker_client_custom_region (line 112) | def test_create_twinmaker_client_custom_region(self, mock_boto_client): FILE: src/aws-iot-sitewise-mcp-server/tests/test_init.py class TestInit (line 21) | class TestInit: method test_version (line 24) | def test_version(self): method test_module_reload (line 41) | def test_module_reload(self): FILE: src/aws-iot-sitewise-mcp-server/tests/test_main.py class TestMain (line 21) | class TestMain: method test_main_default (line 25) | def test_main_default(self, mock_run): method test_module_execution (line 33) | def test_module_execution(self): FILE: src/aws-iot-sitewise-mcp-server/tests/test_server.py class TestServer (line 32) | class TestServer: method test_run_server_setup (line 40) | async def test_run_server_setup(self, mock_fastmcp, mock_task_group): method test_run_server_tool_categories (line 89) | async def test_run_server_tool_categories(self, mock_fastmcp, mock_tas... method test_run_server_prompts (line 124) | async def test_run_server_prompts(self, mock_fastmcp, mock_task_group): method test_main_function (line 151) | def test_main_function(self, mock_run): method test_run_server_version_setting (line 160) | async def test_run_server_version_setting(self, mock_fastmcp, mock_tas... method test_run_server_error_handling (line 186) | async def test_run_server_error_handling(self, mock_fastmcp, mock_task... FILE: src/aws-iot-sitewise-mcp-server/tests/test_validation.py class TestValidation (line 58) | class TestValidation: method test_validate_asset_id_valid (line 61) | def test_validate_asset_id_valid(self): method test_validate_asset_id_invalid (line 72) | def test_validate_asset_id_invalid(self): method test_validate_asset_model_id_valid (line 89) | def test_validate_asset_model_id_valid(self): method test_validate_asset_model_id_invalid (line 99) | def test_validate_asset_model_id_invalid(self): method test_validate_asset_name_valid (line 117) | def test_validate_asset_name_valid(self): method test_validate_asset_name_invalid (line 122) | def test_validate_asset_name_invalid(self): method test_validate_property_alias_valid (line 133) | def test_validate_property_alias_valid(self): method test_validate_property_alias_invalid (line 138) | def test_validate_property_alias_invalid(self): method test_validate_region_valid (line 149) | def test_validate_region_valid(self): method test_validate_region_invalid (line 154) | def test_validate_region_invalid(self): method test_validate_max_results_valid (line 162) | def test_validate_max_results_valid(self): method test_validate_max_results_invalid (line 167) | def test_validate_max_results_invalid(self): method test_validate_timestamp_valid (line 175) | def test_validate_timestamp_valid(self): method test_validate_timestamp_invalid (line 183) | def test_validate_timestamp_invalid(self): method test_validate_data_type_valid (line 194) | def test_validate_data_type_valid(self): method test_validate_data_type_invalid (line 199) | def test_validate_data_type_invalid(self): method test_validate_quality_valid (line 204) | def test_validate_quality_valid(self): method test_validate_quality_invalid (line 209) | def test_validate_quality_invalid(self): method test_validate_aggregate_types_valid (line 214) | def test_validate_aggregate_types_valid(self): method test_validate_aggregate_types_invalid (line 219) | def test_validate_aggregate_types_invalid(self): method test_validate_time_ordering_valid (line 224) | def test_validate_time_ordering_valid(self): method test_validate_time_ordering_invalid (line 229) | def test_validate_time_ordering_invalid(self): method test_validate_asset_model_properties_valid (line 234) | def test_validate_asset_model_properties_valid(self): method test_validate_asset_model_properties_invalid (line 245) | def test_validate_asset_model_properties_invalid(self): method test_validate_batch_entries_valid (line 270) | def test_validate_batch_entries_valid(self): method test_validate_batch_entries_invalid (line 275) | def test_validate_batch_entries_invalid(self): method test_validate_access_policy_permission_valid (line 286) | def test_validate_access_policy_permission_valid(self): method test_validate_access_policy_permission_invalid (line 291) | def test_validate_access_policy_permission_invalid(self): method test_validate_encryption_type_valid (line 296) | def test_validate_encryption_type_valid(self): method test_validate_encryption_type_invalid (line 301) | def test_validate_encryption_type_invalid(self): method test_validate_storage_type_valid (line 306) | def test_validate_storage_type_valid(self): method test_validate_storage_type_invalid (line 311) | def test_validate_storage_type_invalid(self): method test_validate_gateway_platform_valid (line 316) | def test_validate_gateway_platform_valid(self): method test_validate_gateway_platform_invalid (line 323) | def test_validate_gateway_platform_invalid(self): method test_validate_service_quotas_valid (line 339) | def test_validate_service_quotas_valid(self): method test_validate_string_for_injection_valid (line 349) | def test_validate_string_for_injection_valid(self): method test_validate_string_for_injection_prompt_injection (line 357) | def test_validate_string_for_injection_prompt_injection(self): method test_validate_string_for_injection_sql_injection (line 376) | def test_validate_string_for_injection_sql_injection(self): method test_validate_string_for_injection_command_injection (line 387) | def test_validate_string_for_injection_command_injection(self): method test_validate_string_for_injection_special_chars (line 398) | def test_validate_string_for_injection_special_chars(self): method test_validate_string_for_injection_control_chars (line 403) | def test_validate_string_for_injection_control_chars(self): method test_validate_string_for_injection_excessive_length (line 411) | def test_validate_string_for_injection_excessive_length(self): method test_sanitize_string (line 416) | def test_sanitize_string(self): method test_validate_json_string_valid (line 436) | def test_validate_json_string_valid(self): method test_validate_json_string_invalid (line 441) | def test_validate_json_string_invalid(self): method test_validate_safe_identifier_valid (line 454) | def test_validate_safe_identifier_valid(self): method test_validate_safe_identifier_invalid (line 461) | def test_validate_safe_identifier_invalid(self): method test_validate_asset_name_with_injection (line 478) | def test_validate_asset_name_with_injection(self): method test_validate_asset_model_properties_with_injection (line 488) | def test_validate_asset_model_properties_with_injection(self): method test_check_storage_configuration_adaptive_ingestion_enabled (line 501) | def test_check_storage_configuration_adaptive_ingestion_enabled(self): method test_check_storage_configuration_default_storage_with_warm_tier (line 508) | def test_check_storage_configuration_default_storage_with_warm_tier(se... method test_check_storage_configuration_default_storage_without_warm_tier (line 519) | def test_check_storage_configuration_default_storage_without_warm_tier... method test_check_storage_configuration_default_storage_no_warm_tier_key (line 533) | def test_check_storage_configuration_default_storage_no_warm_tier_key(... method test_check_storage_configuration_multilayer_storage_valid (line 546) | def test_check_storage_configuration_multilayer_storage_valid(self): method test_check_storage_configuration_multilayer_storage_missing_s3 (line 562) | def test_check_storage_configuration_multilayer_storage_missing_s3(self): method test_check_storage_configuration_multilayer_storage_no_multilayer_key (line 575) | def test_check_storage_configuration_multilayer_storage_no_multilayer_... method test_check_storage_configuration_unknown_storage_type (line 587) | def test_check_storage_configuration_unknown_storage_type(self): method test_check_storage_configuration_api_exception (line 597) | def test_check_storage_configuration_api_exception(self): method test_check_storage_configuration_validation_error_passthrough (line 607) | def test_check_storage_configuration_validation_error_passthrough(self): FILE: src/aws-iot-sitewise-mcp-server/tests/test_validation_utils.py class TestValidationUtils (line 68) | class TestValidationUtils: method test_validate_uuid_format_valid (line 71) | def test_validate_uuid_format_valid(self): method test_validate_uuid_format_invalid (line 84) | def test_validate_uuid_format_invalid(self): method test_validate_asset_or_model_id_valid (line 113) | def test_validate_asset_or_model_id_valid(self): method test_validate_asset_or_model_id_invalid (line 131) | def test_validate_asset_or_model_id_invalid(self): method test_validate_string_length_valid (line 160) | def test_validate_string_length_valid(self): method test_validate_string_length_invalid (line 171) | def test_validate_string_length_invalid(self): method test_validate_control_characters_valid (line 189) | def test_validate_control_characters_valid(self): method test_validate_control_characters_invalid (line 202) | def test_validate_control_characters_invalid(self): method test_validate_regex_pattern_valid (line 218) | def test_validate_regex_pattern_valid(self): method test_validate_regex_pattern_invalid (line 227) | def test_validate_regex_pattern_invalid(self): method test_validate_s3_bucket_name_valid (line 253) | def test_validate_s3_bucket_name_valid(self): method test_validate_s3_bucket_name_invalid (line 266) | def test_validate_s3_bucket_name_invalid(self): method test_validate_s3_prefix_valid (line 297) | def test_validate_s3_prefix_valid(self): method test_validate_s3_prefix_invalid (line 310) | def test_validate_s3_prefix_invalid(self): method test_validate_external_id_valid (line 320) | def test_validate_external_id_valid(self): method test_validate_external_id_invalid (line 334) | def test_validate_external_id_invalid(self): method test_validate_variable_name_valid (line 352) | def test_validate_variable_name_valid(self): method test_validate_variable_name_invalid (line 366) | def test_validate_variable_name_invalid(self): method test_validate_expression_variable_name_valid (line 389) | def test_validate_expression_variable_name_valid(self): method test_validate_expression_variable_name_invalid (line 403) | def test_validate_expression_variable_name_invalid(self): method test_validate_positive_integer_valid (line 423) | def test_validate_positive_integer_valid(self): method test_validate_positive_integer_invalid (line 431) | def test_validate_positive_integer_invalid(self): method test_validate_integer_range_valid (line 451) | def test_validate_integer_range_valid(self): method test_validate_integer_range_invalid (line 462) | def test_validate_integer_range_invalid(self): method test_validate_positive_timestamp_valid (line 479) | def test_validate_positive_timestamp_valid(self): method test_validate_positive_timestamp_invalid (line 487) | def test_validate_positive_timestamp_invalid(self): method test_validate_iso8601_duration_valid (line 504) | def test_validate_iso8601_duration_valid(self): method test_validate_iso8601_duration_invalid (line 517) | def test_validate_iso8601_duration_invalid(self): method test_validate_lookback_window_valid (line 535) | def test_validate_lookback_window_valid(self): method test_validate_lookback_window_invalid (line 543) | def test_validate_lookback_window_invalid(self): method test_validate_retraining_frequency_valid (line 559) | def test_validate_retraining_frequency_valid(self): method test_validate_retraining_frequency_invalid (line 573) | def test_validate_retraining_frequency_invalid(self): method test_validate_retraining_frequency_months_coverage (line 595) | def test_validate_retraining_frequency_months_coverage(self): method test_validate_data_upload_frequency_valid (line 601) | def test_validate_data_upload_frequency_valid(self): method test_validate_data_upload_frequency_invalid (line 627) | def test_validate_data_upload_frequency_invalid(self): method test_validate_target_sampling_rate_valid (line 639) | def test_validate_target_sampling_rate_valid(self): method test_validate_target_sampling_rate_invalid (line 659) | def test_validate_target_sampling_rate_invalid(self): method test_validate_iana_timezone_valid (line 671) | def test_validate_iana_timezone_valid(self): method test_validate_iana_timezone_invalid (line 689) | def test_validate_iana_timezone_invalid(self): method test_validate_time_range_valid (line 747) | def test_validate_time_range_valid(self): method test_validate_time_range_invalid (line 761) | def test_validate_time_range_invalid(self): method test_validate_client_token_valid (line 790) | def test_validate_client_token_valid(self): method test_validate_client_token_invalid (line 803) | def test_validate_client_token_invalid(self): method test_validate_next_token_valid (line 821) | def test_validate_next_token_valid(self): method test_validate_next_token_invalid (line 834) | def test_validate_next_token_invalid(self): method test_validate_max_results_valid (line 855) | def test_validate_max_results_valid(self): method test_validate_max_results_invalid (line 866) | def test_validate_max_results_invalid(self): method test_validate_string_value_valid (line 879) | def test_validate_string_value_valid(self): method test_validate_string_value_invalid (line 892) | def test_validate_string_value_invalid(self): method test_validate_action_type_valid (line 906) | def test_validate_action_type_valid(self): method test_validate_action_type_invalid (line 920) | def test_validate_action_type_invalid(self): method test_validate_enum_value_valid (line 941) | def test_validate_enum_value_valid(self): method test_validate_enum_value_invalid (line 949) | def test_validate_enum_value_invalid(self): method test_regex_patterns_compilation (line 960) | def test_regex_patterns_compilation(self): method test_uuid_pattern_edge_cases (line 980) | def test_uuid_pattern_edge_cases(self): method test_asset_id_pattern_edge_cases (line 1003) | def test_asset_id_pattern_edge_cases(self): method test_control_char_pattern_edge_cases (line 1031) | def test_control_char_pattern_edge_cases(self): method test_variable_name_pattern_edge_cases (line 1055) | def test_variable_name_pattern_edge_cases(self): method test_expression_variable_pattern_edge_cases (line 1080) | def test_expression_variable_pattern_edge_cases(self): method test_external_id_pattern_edge_cases (line 1105) | def test_external_id_pattern_edge_cases(self): method test_iana_timezone_pattern_edge_cases (line 1132) | def test_iana_timezone_pattern_edge_cases(self): method test_time_range_pattern_edge_cases (line 1159) | def test_time_range_pattern_edge_cases(self): FILE: src/aws-iot-sitewise-mcp-server/tests/tools/test_sitewise_access.py class TestSiteWiseAccess (line 40) | class TestSiteWiseAccess: method test_describe_default_encryption_configuration_success (line 44) | def test_describe_default_encryption_configuration_success(self, mock_... method test_put_default_encryption_configuration_success (line 62) | def test_put_default_encryption_configuration_success(self, mock_boto_... method test_describe_logging_options_success (line 84) | def test_describe_logging_options_success(self, mock_boto_client): method test_put_logging_options_success (line 99) | def test_put_logging_options_success(self, mock_boto_client): method test_describe_storage_configuration_success (line 113) | def test_describe_storage_configuration_success(self, mock_boto_client): method test_put_storage_configuration_success (line 130) | def test_put_storage_configuration_success(self, mock_boto_client): method test_put_default_encryption_configuration_with_kms_key (line 157) | def test_put_default_encryption_configuration_with_kms_key(self, mock_... method test_describe_storage_configuration_with_date_handling (line 198) | def test_describe_storage_configuration_with_date_handling(self, mock_... method test_put_storage_configuration_with_all_params (line 231) | def test_put_storage_configuration_with_all_params(self, mock_boto_cli... method test_all_functions_client_error_handling (line 296) | def test_all_functions_client_error_handling(self, mock_boto_client): FILE: src/aws-iot-sitewise-mcp-server/tests/tools/test_sitewise_asset_models.py class TestSiteWiseAssetModels (line 41) | class TestSiteWiseAssetModels: method test_create_asset_model_success (line 47) | def test_create_asset_model_success(self, mock_create_client): method test_describe_asset_model_success (line 87) | def test_describe_asset_model_success(self, mock_create_client): method test_list_asset_models_success (line 126) | def test_list_asset_models_success(self, mock_create_client): method test_update_asset_model_success (line 150) | def test_update_asset_model_success(self, mock_create_client): method test_delete_asset_model_success (line 176) | def test_delete_asset_model_success(self, mock_create_client): method test_list_asset_model_properties_success (line 196) | def test_list_asset_model_properties_success(self, mock_create_client): method test_create_asset_model_composite_model_success (line 225) | def test_create_asset_model_composite_model_success(self, mock_create_... method test_asset_model_validation_errors (line 257) | def test_asset_model_validation_errors(self, mock_create_client): method test_client_error_handling (line 308) | def test_client_error_handling(self, mock_create_client): method test_create_asset_model_validation_errors (line 337) | def test_create_asset_model_validation_errors(self): method test_create_asset_model_with_all_params (line 434) | def test_create_asset_model_with_all_params(self, mock_create_client, ... method test_describe_asset_model_validation_errors (line 476) | def test_describe_asset_model_validation_errors(self): method test_describe_asset_model_with_all_params (line 491) | def test_describe_asset_model_with_all_params(self, mock_create_client): method test_list_asset_models_validation_errors (line 530) | def test_list_asset_models_validation_errors(self): method test_list_asset_models_with_all_params (line 556) | def test_list_asset_models_with_all_params(self, mock_create_client): method test_update_asset_model_validation_errors (line 581) | def test_update_asset_model_validation_errors(self): method test_update_asset_model_with_all_params (line 651) | def test_update_asset_model_with_all_params(self, mock_create_client, ... method test_delete_asset_model_validation_errors (line 685) | def test_delete_asset_model_validation_errors(self): method test_delete_asset_model_with_client_token (line 699) | def test_delete_asset_model_with_client_token(self, mock_create_client): method test_list_asset_model_properties_validation_errors (line 718) | def test_list_asset_model_properties_validation_errors(self): method test_list_asset_model_properties_with_all_params (line 759) | def test_list_asset_model_properties_with_all_params(self, mock_create... method test_create_asset_model_composite_model_validation_errors (line 788) | def test_create_asset_model_composite_model_validation_errors(self): method test_create_asset_model_composite_model_with_all_params (line 845) | def test_create_asset_model_composite_model_with_all_params(self, mock... method test_all_functions_client_error_handling (line 888) | def test_all_functions_client_error_handling(self, mock_create_client): FILE: src/aws-iot-sitewise-mcp-server/tests/tools/test_sitewise_assets.py class TestSiteWiseAssets (line 42) | class TestSiteWiseAssets: method test_create_asset_success (line 46) | def test_create_asset_success(self, mock_boto_client): method test_create_asset_failure (line 86) | def test_create_asset_failure(self, mock_boto_client): method test_create_asset_with_optional_params (line 119) | def test_create_asset_with_optional_params(self, mock_boto_client): method test_describe_asset_success (line 154) | def test_describe_asset_success(self, mock_boto_client): method test_list_assets_success (line 192) | def test_list_assets_success(self, mock_boto_client): method test_update_asset_success (line 219) | def test_update_asset_success(self, mock_boto_client): method test_delete_asset_success (line 240) | def test_delete_asset_success(self, mock_boto_client): method test_associate_assets_success (line 258) | def test_associate_assets_success(self, mock_boto_client): method test_disassociate_assets_success (line 275) | def test_disassociate_assets_success(self, mock_boto_client): method test_list_associated_assets_success (line 292) | def test_list_associated_assets_success(self, mock_boto_client): method test_client_error_handling (line 316) | def test_client_error_handling(self, mock_boto_client): method test_create_asset_validation_errors (line 351) | def test_create_asset_validation_errors(self): method test_describe_asset_with_exclude_properties (line 398) | def test_describe_asset_with_exclude_properties(self, mock_boto_client): method test_list_assets_validation_errors (line 427) | def test_list_assets_validation_errors(self): method test_list_assets_with_all_params (line 453) | def test_list_assets_with_all_params(self, mock_boto_client): method test_update_asset_with_all_params (line 481) | def test_update_asset_with_all_params(self, mock_boto_client): method test_delete_asset_with_client_token (line 508) | def test_delete_asset_with_client_token(self, mock_boto_client): method test_associate_assets_with_client_token (line 528) | def test_associate_assets_with_client_token(self, mock_boto_client): method test_disassociate_assets_with_client_token (line 550) | def test_disassociate_assets_with_client_token(self, mock_boto_client): method test_list_associated_assets_with_all_params (line 572) | def test_list_associated_assets_with_all_params(self, mock_boto_client): method test_additional_client_error_handling (line 602) | def test_additional_client_error_handling(self, mock_boto_client): method test_describe_asset_field_info_validation (line 701) | def test_describe_asset_field_info_validation(self, mock_boto_client): method test_update_asset_field_info_validation (line 737) | def test_update_asset_field_info_validation(self, mock_boto_client): method test_delete_asset_field_info_validation (line 765) | def test_delete_asset_field_info_validation(self, mock_boto_client): method test_associate_assets_field_info_validation (line 790) | def test_associate_assets_field_info_validation(self, mock_boto_client): method test_list_associated_assets_field_info_validation (line 817) | def test_list_associated_assets_field_info_validation(self, mock_boto_... method test_list_assets_field_info_validation (line 848) | def test_list_assets_field_info_validation(self): method test_describe_asset_missing_optional_fields (line 877) | def test_describe_asset_missing_optional_fields(self, mock_boto_client): FILE: src/aws-iot-sitewise-mcp-server/tests/tools/test_sitewise_computation_models.py class TestSiteWiseComputationModels (line 44) | class TestSiteWiseComputationModels: method test_create_computation_model_success (line 50) | def test_create_computation_model_success(self, mock_boto_client): method test_create_computation_model_with_all_params (line 110) | def test_create_computation_model_with_all_params(self, mock_boto_clie... method test_create_computation_model_client_error (line 163) | def test_create_computation_model_client_error(self, mock_boto_client): method test_create_anomaly_detection_model_success (line 213) | def test_create_anomaly_detection_model_success(self): method test_delete_computation_model_success (line 269) | def test_delete_computation_model_success(self, mock_boto_client): method test_delete_computation_model_with_client_token (line 289) | def test_delete_computation_model_with_client_token(self, mock_boto_cl... method test_update_computation_model_success (line 309) | def test_update_computation_model_success(self, mock_boto_client): method test_list_computation_models_success (line 357) | def test_list_computation_models_success(self, mock_boto_client): method test_list_computation_models_with_filters (line 381) | def test_list_computation_models_with_filters(self, mock_boto_client): method test_describe_computation_model_success (line 412) | def test_describe_computation_model_success(self, mock_boto_client): method test_list_computation_model_resolve_to_resources_success (line 474) | def test_list_computation_model_resolve_to_resources_success(self, moc... method test_determine_computation_model_configuration_type_with_hint (line 501) | def test_determine_computation_model_configuration_type_with_hint(self): method test_determine_computation_model_configuration_type_auto_detect_asset_model (line 526) | def test_determine_computation_model_configuration_type_auto_detect_as... method test_determine_computation_model_configuration_type_auto_detect_asset_level (line 564) | def test_determine_computation_model_configuration_type_auto_detect_as... method test_describe_computation_model_execution_summary_asset_model_level (line 605) | def test_describe_computation_model_execution_summary_asset_model_level( method test_describe_computation_model_execution_summary_asset_level (line 646) | def test_describe_computation_model_execution_summary_asset_level( method test_list_computation_model_data_binding_usages_success (line 680) | def test_list_computation_model_data_binding_usages_success(self, mock... method test_list_computation_model_data_binding_usages_with_pagination (line 708) | def test_list_computation_model_data_binding_usages_with_pagination(se... method test_list_computation_model_resolve_to_resources_with_filters (line 748) | def test_list_computation_model_resolve_to_resources_with_filters(self... method test_delete_computation_model_client_error (line 781) | def test_delete_computation_model_client_error(self, mock_boto_client): method test_update_computation_model_client_error (line 807) | def test_update_computation_model_client_error(self, mock_boto_client): method test_list_computation_models_client_error (line 861) | def test_list_computation_models_client_error(self, mock_boto_client): method test_describe_computation_model_client_error (line 885) | def test_describe_computation_model_client_error(self, mock_boto_client): method test_determine_computation_model_configuration_type_describe_error (line 911) | def test_determine_computation_model_configuration_type_describe_error... method test_describe_computation_model_execution_summary_client_error (line 933) | def test_describe_computation_model_execution_summary_client_error( method test_list_computation_model_data_binding_usages_client_error (line 969) | def test_list_computation_model_data_binding_usages_client_error(self,... method test_list_computation_model_resolve_to_resources_client_error (line 998) | def test_list_computation_model_resolve_to_resources_client_error(self... method test_create_anomaly_detection_model_with_minimal_params (line 1022) | def test_create_anomaly_detection_model_with_minimal_params(self): method test_determine_computation_model_configuration_type_mixed_bindings (line 1061) | def test_determine_computation_model_configuration_type_mixed_bindings... method test_determine_computation_model_configuration_type_empty_bindings (line 1104) | def test_determine_computation_model_configuration_type_empty_bindings... method test_describe_computation_model_execution_summary_determine_type_error (line 1121) | def test_describe_computation_model_execution_summary_determine_type_e... method test_list_computation_models_empty_response (line 1143) | def test_list_computation_models_empty_response(self, mock_boto_client): method test_list_computation_model_data_binding_usages_empty_response (line 1163) | def test_list_computation_model_data_binding_usages_empty_response(sel... method test_list_computation_model_resolve_to_resources_empty_response (line 1187) | def test_list_computation_model_resolve_to_resources_empty_response(se... method test_create_computation_model_validation_error (line 1210) | def test_create_computation_model_validation_error(self, mock_boto_cli... method test_delete_computation_model_validation_error (line 1233) | def test_delete_computation_model_validation_error(self): method test_update_computation_model_validation_error (line 1248) | def test_update_computation_model_validation_error(self): method test_list_computation_models_validation_error (line 1278) | def test_list_computation_models_validation_error(self): method test_describe_computation_model_validation_error (line 1293) | def test_describe_computation_model_validation_error(self): method test_list_computation_model_data_binding_usages_validation_error (line 1308) | def test_list_computation_model_data_binding_usages_validation_error(s... method test_list_computation_model_resolve_to_resources_validation_error (line 1325) | def test_list_computation_model_resolve_to_resources_validation_error(... method test_determine_computation_model_configuration_type_generic_exception (line 1340) | def test_determine_computation_model_configuration_type_generic_except... method test_determine_computation_model_configuration_type_else_branch (line 1354) | def test_determine_computation_model_configuration_type_else_branch(se... method test_create_computation_model_custom_validation_error (line 1367) | def test_create_computation_model_custom_validation_error(self): method test_delete_computation_model_custom_validation_error (line 1400) | def test_delete_computation_model_custom_validation_error(self): method test_update_computation_model_custom_validation_error (line 1419) | def test_update_computation_model_custom_validation_error(self): method test_list_computation_models_custom_validation_error (line 1453) | def test_list_computation_models_custom_validation_error(self): method test_describe_computation_model_custom_validation_error (line 1470) | def test_describe_computation_model_custom_validation_error(self): method test_describe_computation_model_execution_summary_custom_validation_error (line 1489) | def test_describe_computation_model_execution_summary_custom_validatio... method test_list_computation_model_data_binding_usages_custom_validation_error (line 1517) | def test_list_computation_model_data_binding_usages_custom_validation_... method test_list_computation_model_resolve_to_resources_custom_validation_error (line 1538) | def test_list_computation_model_resolve_to_resources_custom_validation... method test_determine_computation_model_configuration_type_direct_asset_model_property (line 1560) | def test_determine_computation_model_configuration_type_direct_asset_m... method test_describe_computation_model_execution_summary_asset_model_level_no_resolve_params (line 1591) | def test_describe_computation_model_execution_summary_asset_model_leve... method test_determine_computation_model_configuration_type_non_dict_binding_value (line 1625) | def test_determine_computation_model_configuration_type_non_dict_bindi... FILE: src/aws-iot-sitewise-mcp-server/tests/tools/test_sitewise_data.py class TestSiteWiseData (line 48) | class TestSiteWiseData: method test_batch_put_asset_property_value_success (line 52) | def test_batch_put_asset_property_value_success(self, mock_boto_client): method test_get_asset_property_value_success (line 89) | def test_get_asset_property_value_success(self, mock_boto_client): method test_get_asset_property_value_history_success (line 118) | def test_get_asset_property_value_history_success(self, mock_boto_clie... method test_get_asset_property_aggregates_success (line 155) | def test_get_asset_property_aggregates_success(self, mock_boto_client): method test_get_interpolated_asset_property_values_success (line 190) | def test_get_interpolated_asset_property_values_success(self, mock_bot... method test_batch_get_asset_property_value_success (line 218) | def test_batch_get_asset_property_value_success(self, mock_boto_client): method test_batch_get_asset_property_value_history_success (line 246) | def test_batch_get_asset_property_value_history_success(self, mock_bot... method test_batch_get_asset_property_aggregates_success (line 271) | def test_batch_get_asset_property_aggregates_success(self, mock_boto_c... method test_execute_query_success (line 296) | def test_execute_query_success(self, mock_boto_client): method test_execute_query_validation_errors (line 323) | def test_execute_query_validation_errors(self, mock_boto_client): method test_client_error_handling (line 339) | def test_client_error_handling(self, mock_boto_client): method test_get_asset_property_value_with_all_params (line 358) | def test_get_asset_property_value_with_all_params(self, mock_boto_clie... method test_get_asset_property_value_history_with_all_params (line 417) | def test_get_asset_property_value_history_with_all_params(self, mock_b... method test_get_asset_property_aggregates_with_all_params (line 462) | def test_get_asset_property_aggregates_with_all_params(self, mock_boto... method test_get_interpolated_asset_property_values_with_all_params (line 520) | def test_get_interpolated_asset_property_values_with_all_params(self, ... method test_batch_get_asset_property_value_with_next_token (line 569) | def test_batch_get_asset_property_value_with_next_token(self, mock_bot... method test_batch_get_asset_property_value_history_with_next_token (line 612) | def test_batch_get_asset_property_value_history_with_next_token(self, ... method test_batch_get_asset_property_aggregates_with_next_token (line 661) | def test_batch_get_asset_property_aggregates_with_next_token(self, moc... method test_execute_query_additional_validation_errors (line 709) | def test_execute_query_additional_validation_errors(self): method test_execute_query_with_all_params (line 753) | def test_execute_query_with_all_params(self, mock_boto_client): method test_execute_query_without_optional_params (line 787) | def test_execute_query_without_optional_params(self, mock_boto_client): method test_all_functions_client_error_handling (line 814) | def test_all_functions_client_error_handling(self, mock_boto_client): method test_create_bulk_import_iam_role_success (line 949) | def test_create_bulk_import_iam_role_success(self, mock_create_iam_cli... method test_create_bulk_import_iam_role_error (line 972) | def test_create_bulk_import_iam_role_error(self, mock_create_iam_client): method test_create_bulk_import_job_success (line 992) | def test_create_bulk_import_job_success(self, mock_boto_client): method test_create_buffered_ingestion_job_success (line 1022) | def test_create_buffered_ingestion_job_success(self, mock_boto_client): method test_describe_bulk_import_job_success (line 1053) | def test_describe_bulk_import_job_success(self, mock_boto_client): method test_list_bulk_import_jobs_success (line 1075) | def test_list_bulk_import_jobs_success(self, mock_boto_client): method test_bulk_import_job_error_handling (line 1095) | def test_bulk_import_job_error_handling(self, mock_boto_client): method test_bulk_import_csv_validation_missing_column_names (line 1117) | def test_bulk_import_csv_validation_missing_column_names(self): method test_bulk_import_csv_validation_empty_column_names (line 1130) | def test_bulk_import_csv_validation_empty_column_names(self): method test_bulk_import_csv_validation_invalid_column_name (line 1143) | def test_bulk_import_csv_validation_invalid_column_name(self): method test_bulk_import_csv_validation_all_three_identifiers (line 1156) | def test_bulk_import_csv_validation_all_three_identifiers(self): method test_bulk_import_csv_validation_asset_id_without_property_id (line 1182) | def test_bulk_import_csv_validation_asset_id_without_property_id(self): method test_bulk_import_csv_validation_property_id_without_asset_id (line 1199) | def test_bulk_import_csv_validation_property_id_without_asset_id(self): method test_bulk_import_csv_validation_no_identifier_columns (line 1218) | def test_bulk_import_csv_validation_no_identifier_columns(self): method test_bulk_import_csv_validation_missing_required_columns (line 1233) | def test_bulk_import_csv_validation_missing_required_columns(self): method test_bulk_import_invalid_file_format (line 1248) | def test_bulk_import_invalid_file_format(self): method test_bulk_import_missing_file_format (line 1261) | def test_bulk_import_missing_file_format(self): method test_bulk_import_invalid_file_format_type (line 1274) | def test_bulk_import_invalid_file_format_type(self): method test_describe_bulk_import_job_empty_job_id (line 1287) | def test_describe_bulk_import_job_empty_job_id(self): method test_describe_bulk_import_job_invalid_uuid_length (line 1293) | def test_describe_bulk_import_job_invalid_uuid_length(self): method test_describe_bulk_import_job_invalid_uuid_hyphens (line 1299) | def test_describe_bulk_import_job_invalid_uuid_hyphens(self): method test_describe_bulk_import_job_invalid_uuid_format (line 1307) | def test_describe_bulk_import_job_invalid_uuid_format(self): method test_bulk_import_csv_validation_valid_asset_property_combo (line 1317) | def test_bulk_import_csv_validation_valid_asset_property_combo(self, m... method test_bulk_import_parquet_validation_valid (line 1354) | def test_bulk_import_parquet_validation_valid(self, mock_boto_client): method test_buffered_ingestion_job_inherits_csv_validation (line 1378) | def test_buffered_ingestion_job_inherits_csv_validation(self): method test_create_bulk_import_job_adaptive_ingestion_not_boolean (line 1390) | def test_create_bulk_import_job_adaptive_ingestion_not_boolean(self): method test_create_bulk_import_job_control_characters_in_name (line 1408) | def test_create_bulk_import_job_control_characters_in_name(self): method test_create_bulk_import_job_missing_job_role_arn (line 1425) | def test_create_bulk_import_job_missing_job_role_arn(self): method test_create_bulk_import_job_invalid_arn_format (line 1440) | def test_create_bulk_import_job_invalid_arn_format(self): method test_create_bulk_import_job_arn_too_long (line 1455) | def test_create_bulk_import_job_arn_too_long(self): method test_create_bulk_import_job_files_not_list (line 1470) | def test_create_bulk_import_job_files_not_list(self): method test_create_bulk_import_job_file_not_dict (line 1485) | def test_create_bulk_import_job_file_not_dict(self): method test_create_bulk_import_job_file_missing_bucket_key (line 1500) | def test_create_bulk_import_job_file_missing_bucket_key(self): method test_create_bulk_import_job_bucket_name_too_short (line 1515) | def test_create_bulk_import_job_bucket_name_too_short(self): method test_create_bulk_import_job_error_location_not_dict (line 1530) | def test_create_bulk_import_job_error_location_not_dict(self): method test_create_bulk_import_job_error_location_missing_fields (line 1545) | def test_create_bulk_import_job_error_location_missing_fields(self): method test_create_bulk_import_job_error_prefix_no_slash (line 1560) | def test_create_bulk_import_job_error_prefix_no_slash(self): method test_create_bulk_import_job_config_not_dict (line 1578) | def test_create_bulk_import_job_config_not_dict(self): method test_create_bulk_import_job_client_error (line 1592) | def test_create_bulk_import_job_client_error(self, mock_create_client): method test_create_bulk_import_job_error_bucket_too_short (line 1617) | def test_create_bulk_import_job_error_bucket_too_short(self): method test_create_bulk_import_job_prefix_no_slash (line 1634) | def test_create_bulk_import_job_prefix_no_slash(self): method test_list_bulk_import_jobs_invalid_filter (line 1651) | def test_list_bulk_import_jobs_invalid_filter(self): method test_list_bulk_import_jobs_client_error (line 1658) | def test_list_bulk_import_jobs_client_error(self, mock_client): method test_create_bulk_import_job_aws_error (line 1675) | def test_create_bulk_import_job_aws_error(self, mock_client, mock_stor... method test_list_bulk_import_jobs_aws_error (line 1701) | def test_list_bulk_import_jobs_aws_error(self, mock_client): method test_describe_bulk_import_job_aws_error (line 1716) | def test_describe_bulk_import_job_aws_error(self, mock_client): method test_list_bulk_import_jobs_region_validation_workflow (line 1731) | def test_list_bulk_import_jobs_region_validation_workflow(self, mock_c... method test_list_bulk_import_jobs_max_results_validation_workflow (line 1742) | def test_list_bulk_import_jobs_max_results_validation_workflow(self, m... FILE: src/aws-iot-sitewise-mcp-server/tests/tools/test_sitewise_executions.py class TestSiteWiseExecutions (line 41) | class TestSiteWiseExecutions: method test_execute_action_success (line 45) | def test_execute_action_success(self, mock_boto_client): method test_execute_action_with_all_params (line 70) | def test_execute_action_with_all_params(self, mock_boto_client): method test_execute_action_client_error (line 98) | def test_execute_action_client_error(self, mock_boto_client): method test_list_actions_success (line 125) | def test_list_actions_success(self, mock_boto_client): method test_list_actions_with_filters (line 151) | def test_list_actions_with_filters(self, mock_boto_client): method test_list_actions_client_error (line 187) | def test_list_actions_client_error(self, mock_boto_client): method test_describe_action_success (line 210) | def test_describe_action_success(self, mock_boto_client): method test_describe_action_client_error (line 240) | def test_describe_action_client_error(self, mock_boto_client): method test_execute_training_action_train_model_success (line 262) | def test_execute_training_action_train_model_success(self, mock_execut... method test_execute_training_action_with_all_configs (line 294) | def test_execute_training_action_with_all_configs(self, mock_execute_a... method test_execute_training_action_start_retraining_scheduler (line 332) | def test_execute_training_action_start_retraining_scheduler(self, mock... method test_execute_training_action_stop_retraining_scheduler (line 360) | def test_execute_training_action_stop_retraining_scheduler(self, mock_... method test_execute_training_action_validation_error_partial_label_config (line 380) | def test_execute_training_action_validation_error_partial_label_config... method test_execute_training_action_validation_error_partial_evaluation_config (line 400) | def test_execute_training_action_validation_error_partial_evaluation_c... method test_execute_training_action_validation_error_partial_metrics_config (line 417) | def test_execute_training_action_validation_error_partial_metrics_conf... method test_execute_inference_action_start_success (line 438) | def test_execute_inference_action_start_success(self, mock_execute_act... method test_execute_inference_action_with_all_params (line 468) | def test_execute_inference_action_with_all_params(self, mock_execute_a... method test_execute_inference_action_stop_mode (line 504) | def test_execute_inference_action_stop_mode(self, mock_execute_action): method test_list_executions_success (line 525) | def test_list_executions_success(self, mock_boto_client): method test_list_executions_with_filters (line 551) | def test_list_executions_with_filters(self, mock_boto_client): method test_list_executions_client_error (line 589) | def test_list_executions_client_error(self, mock_boto_client): method test_describe_execution_success (line 612) | def test_describe_execution_success(self, mock_boto_client): method test_describe_execution_client_error (line 650) | def test_describe_execution_client_error(self, mock_boto_client): method test_list_actions_empty_response (line 675) | def test_list_actions_empty_response(self, mock_boto_client): method test_list_executions_empty_response (line 696) | def test_list_executions_empty_response(self, mock_boto_client): method test_execute_training_action_execute_action_failure (line 717) | def test_execute_training_action_execute_action_failure(self, mock_exe... method test_execute_inference_action_execute_action_failure (line 741) | def test_execute_inference_action_execute_action_failure(self, mock_ex... method test_execute_training_action_minimal_params (line 763) | def test_execute_training_action_minimal_params(self): method test_execute_inference_action_minimal_params (line 791) | def test_execute_inference_action_minimal_params(self): method test_execute_action_validation_error (line 819) | def test_execute_action_validation_error(self): method test_list_actions_validation_error (line 836) | def test_list_actions_validation_error(self): method test_describe_action_validation_error (line 852) | def test_describe_action_validation_error(self): method test_execute_training_action_generic_exception (line 867) | def test_execute_training_action_generic_exception(self): method test_execute_inference_action_generic_exception (line 883) | def test_execute_inference_action_generic_exception(self): method test_execute_training_action_partial_label_config_only_prefix (line 898) | def test_execute_training_action_partial_label_config_only_prefix(self): method test_execute_training_action_partial_evaluation_config_only_start_time (line 918) | def test_execute_training_action_partial_evaluation_config_only_start_... method test_execute_training_action_partial_metrics_config_only_prefix (line 935) | def test_execute_training_action_partial_metrics_config_only_prefix(se... method test_list_executions_validation_exception_handling (line 955) | def test_list_executions_validation_exception_handling(self): method test_describe_execution_validation_exception_handling (line 977) | def test_describe_execution_validation_exception_handling(self): method test_list_executions_validation_error (line 995) | def test_list_executions_validation_error(self): method test_describe_execution_validation_error (line 1011) | def test_describe_execution_validation_error(self): method test_execute_action_custom_validation_error (line 1026) | def test_execute_action_custom_validation_error(self): method test_list_actions_custom_validation_error (line 1047) | def test_list_actions_custom_validation_error(self): method test_describe_action_custom_validation_error (line 1067) | def test_describe_action_custom_validation_error(self): method test_execute_inference_action_custom_validation_error (line 1084) | def test_execute_inference_action_custom_validation_error(self): method test_execute_training_action_evaluation_params_internal_error (line 1107) | def test_execute_training_action_evaluation_params_internal_error(self): method test_execute_training_action_missing_lookback_window_for_retraining (line 1133) | def test_execute_training_action_missing_lookback_window_for_retrainin... method test_execute_training_action_missing_retraining_frequency_for_retraining (line 1149) | def test_execute_training_action_missing_retraining_frequency_for_retr... method test_execute_training_action_missing_both_retraining_params (line 1168) | def test_execute_training_action_missing_both_retraining_params(self): method test_execute_training_action_retraining_scheduler_with_valid_params (line 1185) | def test_execute_training_action_retraining_scheduler_with_valid_params( method test_execute_training_action_evaluation_config_all_params_valid (line 1216) | def test_execute_training_action_evaluation_config_all_params_valid(se... method test_execute_training_action_evaluation_config_partial_params_combinations (line 1254) | def test_execute_training_action_evaluation_config_partial_params_comb... FILE: src/aws-iot-sitewise-mcp-server/tests/tools/test_sitewise_gateways.py class TestSiteWiseGateways (line 46) | class TestSiteWiseGateways: method test_create_gateway_success (line 50) | def test_create_gateway_success(self, mock_boto_client): method test_describe_gateway_success (line 73) | def test_describe_gateway_success(self, mock_boto_client): method test_list_gateways_success (line 98) | def test_list_gateways_success(self, mock_boto_client): method test_update_gateway_success (line 118) | def test_update_gateway_success(self, mock_boto_client): method test_delete_gateway_success (line 131) | def test_delete_gateway_success(self, mock_boto_client): method test_describe_time_series_success (line 142) | def test_describe_time_series_success(self, mock_boto_client): method test_list_time_series_with_filters (line 169) | def test_list_time_series_with_filters(self, mock_boto_client): method test_associate_time_series_success (line 194) | def test_associate_time_series_success(self, mock_boto_client): method test_disassociate_time_series_success (line 210) | def test_disassociate_time_series_success(self, mock_boto_client): method test_delete_time_series_success (line 226) | def test_delete_time_series_success(self, mock_boto_client): method test_gateway_error_handling (line 237) | def test_gateway_error_handling(self, mock_boto_client): method test_describe_gateway_capability_configuration_success (line 257) | def test_describe_gateway_capability_configuration_success(self, mock_... method test_update_gateway_capability_configuration_success (line 280) | def test_update_gateway_capability_configuration_success(self, mock_bo... method test_create_gateway_with_tags (line 302) | def test_create_gateway_with_tags(self, mock_boto_client): method test_list_gateways_with_next_token (line 349) | def test_list_gateways_with_next_token(self, mock_boto_client): method test_list_time_series_with_all_params (line 378) | def test_list_time_series_with_all_params(self, mock_boto_client): method test_describe_time_series_with_all_params (line 425) | def test_describe_time_series_with_all_params(self, mock_boto_client): method test_associate_time_series_with_client_token (line 490) | def test_associate_time_series_with_client_token(self, mock_boto_client): method test_disassociate_time_series_with_client_token (line 530) | def test_disassociate_time_series_with_client_token(self, mock_boto_cl... method test_delete_time_series_with_all_params (line 570) | def test_delete_time_series_with_all_params(self, mock_boto_client): method test_all_functions_client_error_handling (line 635) | def test_all_functions_client_error_handling(self, mock_boto_client): FILE: src/aws-iot-sitewise-mcp-server/tests/tools/test_sitewise_metadata_transfer.py class TestCreateBulkImportSchema (line 29) | class TestCreateBulkImportSchema: method test_create_bulk_import_schema_empty_inputs (line 32) | def test_create_bulk_import_schema_empty_inputs(self): method test_create_bulk_import_schema_valid_asset_model (line 41) | def test_create_bulk_import_schema_valid_asset_model(self): method test_create_bulk_import_schema_valid_asset (line 70) | def test_create_bulk_import_schema_valid_asset(self): method test_create_bulk_import_schema_invalid_asset_model (line 89) | def test_create_bulk_import_schema_invalid_asset_model(self): method test_create_bulk_import_schema_invalid_asset (line 104) | def test_create_bulk_import_schema_invalid_asset(self): method test_create_bulk_import_schema_exception_in_asset_model (line 119) | def test_create_bulk_import_schema_exception_in_asset_model(self): method test_create_bulk_import_schema_exception_in_asset (line 130) | def test_create_bulk_import_schema_exception_in_asset(self): class TestCreateMetadataTransferJob (line 142) | class TestCreateMetadataTransferJob: method test_create_s3_to_sitewise_job_success (line 148) | def test_create_s3_to_sitewise_job_success(self, mock_create_client): method test_create_sitewise_to_s3_job_success (line 181) | def test_create_sitewise_to_s3_job_success(self, mock_create_client): method test_create_job_invalid_direction (line 210) | def test_create_job_invalid_direction(self): method test_create_job_both_include_flags_true (line 230) | def test_create_job_both_include_flags_true(self): method test_create_job_with_asset_filters (line 253) | def test_create_job_with_asset_filters(self, mock_create_client): method test_create_job_filters_edge_case (line 289) | def test_create_job_filters_edge_case(self, mock_create_client): method test_create_job_client_error (line 320) | def test_create_job_client_error(self, mock_create_client): method test_create_job_invalid_region (line 349) | def test_create_job_invalid_region(self, mock_create_client): method test_create_job_invalid_asset_id (line 383) | def test_create_job_invalid_asset_id(self, mock_create_client): method test_create_job_invalid_bucket_name (line 415) | def test_create_job_invalid_bucket_name(self): method test_create_job_default_description_s3_to_sitewise (line 437) | def test_create_job_default_description_s3_to_sitewise(self, mock_crea... method test_create_job_default_description_sitewise_to_s3 (line 473) | def test_create_job_default_description_sitewise_to_s3(self, mock_crea... method test_create_job_description_too_long (line 506) | def test_create_job_description_too_long(self): method test_create_job_with_custom_job_id_and_description (line 531) | def test_create_job_with_custom_job_id_and_description(self, mock_crea... method test_create_job_s3_to_sitewise_default_object_key (line 565) | def test_create_job_s3_to_sitewise_default_object_key(self, mock_creat... method test_create_job_sitewise_to_s3_default_object_key (line 602) | def test_create_job_sitewise_to_s3_default_object_key(self, mock_creat... class TestCancelMetadataTransferJob (line 634) | class TestCancelMetadataTransferJob: method test_cancel_job_success (line 640) | def test_cancel_job_success(self, mock_create_client): method test_cancel_job_client_error (line 664) | def test_cancel_job_client_error(self, mock_create_client): method test_cancel_job_empty_id (line 681) | def test_cancel_job_empty_id(self): method test_cancel_job_invalid_region (line 695) | def test_cancel_job_invalid_region(self, mock_create_client): class TestGetMetadataTransferJob (line 717) | class TestGetMetadataTransferJob: method test_get_job_success (line 723) | def test_get_job_success(self, mock_create_client): method test_get_job_client_error (line 753) | def test_get_job_client_error(self, mock_create_client): method test_get_job_empty_id (line 770) | def test_get_job_empty_id(self): method test_get_job_invalid_region (line 784) | def test_get_job_invalid_region(self, mock_create_client): class TestListMetadataTransferJobs (line 806) | class TestListMetadataTransferJobs: method test_list_jobs_success (line 812) | def test_list_jobs_success(self, mock_create_client): method test_list_jobs_with_pagination (line 844) | def test_list_jobs_with_pagination(self, mock_create_client): method test_list_jobs_invalid_source_type (line 867) | def test_list_jobs_invalid_source_type(self): method test_list_jobs_invalid_destination_type (line 887) | def test_list_jobs_invalid_destination_type(self): method test_list_jobs_invalid_max_results (line 907) | def test_list_jobs_invalid_max_results(self): method test_list_jobs_client_error (line 930) | def test_list_jobs_client_error(self, mock_create_client): method test_list_jobs_invalid_region (line 953) | def test_list_jobs_invalid_region(self, mock_create_client): method test_list_jobs_validation_error_exception (line 977) | def test_list_jobs_validation_error_exception(self): FILE: src/aws-iot-sitewise-mcp-server/tests/tools/test_timestamp_tools.py class TestTimestampTools (line 42) | class TestTimestampTools: method test_convert_unix_timestamp_valid_int (line 45) | def test_convert_unix_timestamp_valid_int(self): method test_convert_unix_timestamp_valid_string (line 64) | def test_convert_unix_timestamp_valid_string(self): method test_convert_unix_timestamp_custom_format (line 77) | def test_convert_unix_timestamp_custom_format(self): method test_convert_unix_timestamp_different_timezone_param (line 87) | def test_convert_unix_timestamp_different_timezone_param(self): method test_convert_unix_timestamp_edge_cases (line 97) | def test_convert_unix_timestamp_edge_cases(self): method test_convert_unix_timestamp_invalid_string (line 117) | def test_convert_unix_timestamp_invalid_string(self): method test_convert_unix_timestamp_invalid_negative (line 126) | def test_convert_unix_timestamp_invalid_negative(self): method test_convert_unix_timestamp_overflow (line 138) | def test_convert_unix_timestamp_overflow(self): method test_convert_unix_timestamp_float_string (line 148) | def test_convert_unix_timestamp_float_string(self): method test_convert_multiple_timestamps_valid (line 157) | def test_convert_multiple_timestamps_valid(self): method test_convert_multiple_timestamps_custom_format (line 186) | def test_convert_multiple_timestamps_custom_format(self): method test_convert_multiple_timestamps_mixed_valid_invalid (line 197) | def test_convert_multiple_timestamps_mixed_valid_invalid(self): method test_convert_multiple_timestamps_empty (line 221) | def test_convert_multiple_timestamps_empty(self): method test_convert_multiple_timestamps_exception (line 229) | def test_convert_multiple_timestamps_exception(self): method test_create_timestamp_range_valid (line 238) | def test_create_timestamp_range_valid(self): method test_create_timestamp_range_string_inputs (line 252) | def test_create_timestamp_range_string_inputs(self): method test_create_timestamp_range_custom_format (line 263) | def test_create_timestamp_range_custom_format(self): method test_create_timestamp_range_same_timestamps (line 276) | def test_create_timestamp_range_same_timestamps(self): method test_create_timestamp_range_reverse_order (line 286) | def test_create_timestamp_range_reverse_order(self): method test_create_timestamp_range_invalid_start (line 297) | def test_create_timestamp_range_invalid_start(self): method test_create_timestamp_range_invalid_end (line 306) | def test_create_timestamp_range_invalid_end(self): method test_create_timestamp_range_both_invalid (line 315) | def test_create_timestamp_range_both_invalid(self): method test_create_timestamp_range_large_duration (line 324) | def test_create_timestamp_range_large_duration(self): method test_create_timestamp_range_exception_handling (line 335) | def test_create_timestamp_range_exception_handling(self): method test_get_current_timestamp_valid (line 350) | def test_get_current_timestamp_valid(self): method test_get_current_timestamp_format_consistency (line 375) | def test_get_current_timestamp_format_consistency(self): method test_get_current_timestamp_multiple_calls (line 389) | def test_get_current_timestamp_multiple_calls(self): method test_get_current_timestamp_exception_handling (line 400) | def test_get_current_timestamp_exception_handling(self): method test_mcp_tools_creation (line 413) | def test_mcp_tools_creation(self): method test_tool_metadata_readonly (line 439) | def test_tool_metadata_readonly(self): method test_comprehensive_timestamp_scenarios (line 455) | def test_comprehensive_timestamp_scenarios(self): method test_format_string_variations (line 473) | def test_format_string_variations(self): method test_boundary_conditions (line 490) | def test_boundary_conditions(self): method test_error_message_quality (line 508) | def test_error_message_quality(self): FILE: src/aws-location-mcp-server/awslabs/aws_location_server/server.py class GeoPlacesClient (line 74) | class GeoPlacesClient: method __init__ (line 77) | def __init__(self): class GeoRoutesClient (line 108) | class GeoRoutesClient: method __init__ (line 111) | def __init__(self): function search_places (line 150) | async def search_places( function get_place (line 266) | async def get_place( function reverse_geocode (line 345) | async def reverse_geocode( function geocode (line 389) | async def geocode( function search_nearby (line 435) | async def search_nearby( function search_places_open_now (line 548) | async def search_places_open_now( function calculate_route (line 689) | async def calculate_route( function optimize_waypoints (line 765) | async def optimize_waypoints( function main (line 821) | def main(): FILE: src/aws-location-mcp-server/tests/conftest.py function mock_boto3_client (line 21) | def mock_boto3_client(): function mock_context (line 45) | def mock_context(): FILE: src/aws-location-mcp-server/tests/test_server.py function test_search_places (line 35) | async def test_search_places(mock_boto3_client, mock_context): function test_search_places_error_no_client (line 52) | async def test_search_places_error_no_client(mock_context): function test_search_places_geocode_error (line 63) | async def test_search_places_geocode_error(mock_boto3_client, mock_conte... function test_search_places_client_error (line 77) | async def test_search_places_client_error(mock_boto3_client, mock_context): function test_search_places_general_exception (line 95) | async def test_search_places_general_exception(mock_boto3_client, mock_c... function test_get_place (line 109) | async def test_get_place(mock_boto3_client, mock_context): function test_get_place_raw_mode (line 141) | async def test_get_place_raw_mode(mock_boto3_client, mock_context): function test_get_place_error_no_client (line 161) | async def test_get_place_error_no_client(mock_context): function test_get_place_exception (line 172) | async def test_get_place_exception(mock_boto3_client, mock_context): function test_reverse_geocode (line 186) | async def test_reverse_geocode(mock_boto3_client, mock_context): function test_reverse_geocode_no_place (line 213) | async def test_reverse_geocode_no_place(mock_boto3_client, mock_context): function test_reverse_geocode_error_no_client (line 229) | async def test_reverse_geocode_error_no_client(mock_context): function test_reverse_geocode_client_error (line 240) | async def test_reverse_geocode_client_error(mock_boto3_client, mock_cont... function test_reverse_geocode_general_exception (line 258) | async def test_reverse_geocode_general_exception(mock_boto3_client, mock... function test_geocode (line 272) | async def test_geocode(mock_boto3_client, mock_context): function test_geocode_no_results (line 299) | async def test_geocode_no_results(mock_boto3_client, mock_context): function test_geocode_error_no_client (line 313) | async def test_geocode_error_no_client(mock_context): function test_geocode_client_error (line 324) | async def test_geocode_client_error(mock_boto3_client, mock_context): function test_geocode_general_exception (line 342) | async def test_geocode_general_exception(mock_boto3_client, mock_context): function test_search_nearby (line 356) | async def test_search_nearby(mock_boto3_client, mock_context): function test_search_nearby_raw_mode (line 404) | async def test_search_nearby_raw_mode(mock_boto3_client, mock_context): function test_search_nearby_no_results_expansion (line 439) | async def test_search_nearby_no_results_expansion(mock_boto3_client, moc... function test_search_nearby_error_no_client (line 476) | async def test_search_nearby_error_no_client(mock_context): function test_search_nearby_exception (line 495) | async def test_search_nearby_exception(mock_boto3_client, mock_context): function test_search_places_open_now (line 517) | async def test_search_places_open_now(mock_boto3_client, mock_context): function test_search_places_open_now_no_geocode_results (line 567) | async def test_search_places_open_now_no_geocode_results(mock_boto3_clie... function test_search_places_open_now_error_no_client (line 590) | async def test_search_places_open_now_error_no_client(mock_context): function test_search_places_open_now_client_error (line 610) | async def test_search_places_open_now_client_error(mock_boto3_client, mo... function test_search_places_open_now_general_exception (line 637) | async def test_search_places_open_now_general_exception(mock_boto3_clien... function test_geo_places_client_initialization (line 659) | def test_geo_places_client_initialization(monkeypatch): function test_calculate_route (line 672) | async def test_calculate_route(mock_boto3_client, mock_context): function test_calculate_route_error (line 736) | async def test_calculate_route_error(mock_boto3_client, mock_context): function test_calculate_route_no_client (line 761) | async def test_calculate_route_no_client(mock_context): function test_calculate_route_no_routes (line 775) | async def test_calculate_route_no_routes(mock_boto3_client, mock_context): function test_calculate_route_raw_mode (line 793) | async def test_calculate_route_raw_mode(mock_boto3_client, mock_context): function test_optimize_waypoints (line 827) | async def test_optimize_waypoints(mock_boto3_client, mock_context): function test_optimize_waypoints_error (line 867) | async def test_optimize_waypoints_error(mock_boto3_client, mock_context): function test_optimize_waypoints_no_client (line 893) | async def test_optimize_waypoints_no_client(mock_context): function test_optimize_waypoints_no_routes (line 908) | async def test_optimize_waypoints_no_routes(mock_boto3_client, mock_cont... function test_optimize_waypoints_raw_mode (line 929) | async def test_optimize_waypoints_raw_mode(mock_boto3_client, mock_conte... function test_geo_routes_client_initialization (line 948) | def test_geo_routes_client_initialization(monkeypatch): function test_calculate_route_with_leg_geometry (line 961) | async def test_calculate_route_with_leg_geometry(mock_boto3_client, mock... function test_geo_routes_client_initialization_with_credentials (line 1028) | def test_geo_routes_client_initialization_with_credentials(monkeypatch): function test_geo_routes_client_initialization_exception (line 1052) | def test_geo_routes_client_initialization_exception(): function test_main_stdio (line 1059) | def test_main_stdio(): function test_search_places_with_bounding_box (line 1067) | async def test_search_places_with_bounding_box(mock_boto3_client, mock_c... function test_search_places_with_opening_hours (line 1100) | async def test_search_places_with_opening_hours(mock_boto3_client, mock_... function test_search_places_open_now_with_contacts_opening_hours (line 1138) | async def test_search_places_open_now_with_contacts_opening_hours(mock_b... function test_search_places_open_now_with_expanded_radius (line 1177) | async def test_search_places_open_now_with_expanded_radius(mock_boto3_cl... function test_geo_places_client_initialization_with_credentials (line 1227) | def test_geo_places_client_initialization_with_credentials(monkeypatch): function test_geo_places_client_initialization_exception (line 1247) | def test_geo_places_client_initialization_exception(): function test_geo_places_client_initialization_with_session_token (line 1254) | def test_geo_places_client_initialization_with_session_token(monkeypatch): function test_geo_routes_client_initialization_with_session_token (line 1282) | def test_geo_routes_client_initialization_with_session_token(monkeypatch): FILE: src/aws-location-mcp-server/tests/test_server_integration.py class DummyContext (line 27) | class DummyContext(Context): method error (line 30) | async def error(self, message=None, **extra): method run_in_threadpool (line 34) | async def run_in_threadpool(self, func, *args, **kwargs): function log_place (line 39) | def log_place(place): function ctx (line 67) | def ctx(): function test_calculate_route_princeton_to_columbus (line 77) | async def test_calculate_route_princeton_to_columbus(ctx): function test_calculate_route_and_optimize_waypoints (line 111) | async def test_calculate_route_and_optimize_waypoints(ctx): function main (line 171) | async def main(): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/server.py function signal_handler (line 48) | async def signal_handler(scope: CancelScope): function run_server (line 64) | async def run_server(): function main (line 102) | def main(): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/common_functions/client_manager.py class AWSClientManager (line 21) | class AWSClientManager: method __init__ (line 24) | def __init__(self): method get_client (line 28) | def get_client(self, region: str, service_name: str) -> Any: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/common_functions/common_functions.py function check_mcp_generated_tag (line 16) | def check_mcp_generated_tag(resource_arn: str, client) -> bool: function get_cluster_name (line 42) | def get_cluster_name(cluster_identifier: str) -> str: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/logs_and_telemetry/__init__.py function register_module (line 30) | def register_module(mcp: FastMCP) -> None: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/logs_and_telemetry/cluster_metrics_tools.py function get_monitoring_level_rank (line 26) | def get_monitoring_level_rank(level: str) -> int: function list_available_metrics (line 44) | def list_available_metrics(monitoring_level: str, serverless: bool = Fal... function get_cluster_metrics (line 77) | def get_cluster_metrics( FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/logs_and_telemetry/list_customer_iam_access.py function list_customer_iam_access (line 24) | def list_customer_iam_access(cluster_arn: str, client_manager=None) -> D... FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/logs_and_telemetry/metric_config.py function get_metric_config (line 690) | def get_metric_config(metric_name: str, serverless: bool = False) -> Dic... FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_cluster/__init__.py function register_module (line 44) | def register_module(mcp: FastMCP) -> None: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_cluster/batch_associate_scram_secret.py function batch_associate_scram_secret (line 20) | def batch_associate_scram_secret(cluster_arn, secret_arns, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_cluster/batch_disassociate_scram_secret.py function batch_disassociate_scram_secret (line 20) | def batch_disassociate_scram_secret(cluster_arn, secret_arns, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_cluster/create_cluster_v2.py function create_cluster_v2 (line 20) | def create_cluster_v2(cluster_name, cluster_type='PROVISIONED', client=N... FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_cluster/put_cluster_policy.py function put_cluster_policy (line 20) | def put_cluster_policy(cluster_arn, policy, client, current_version=None): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_cluster/reboot_broker.py function reboot_broker (line 20) | def reboot_broker(cluster_arn, broker_ids, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_cluster/update_broker_count.py function update_broker_count (line 20) | def update_broker_count(cluster_arn, current_version, target_number_of_b... FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_cluster/update_broker_storage.py function update_broker_storage (line 20) | def update_broker_storage(cluster_arn, current_version, target_broker_eb... FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_cluster/update_broker_type.py function update_broker_type (line 20) | def update_broker_type(cluster_arn, current_version, target_instance_typ... FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_cluster/update_cluster_configuration.py function update_cluster_configuration (line 20) | def update_cluster_configuration( FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_cluster/update_monitoring.py function update_monitoring (line 20) | def update_monitoring( FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_cluster/update_security.py function update_security (line 20) | def update_security( FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_config/__init__.py function register_module (line 35) | def register_module(mcp: FastMCP) -> None: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_config/create_configuration.py function create_configuration (line 20) | def create_configuration(name, server_properties, client, description, k... FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_config/tag_resource.py function tag_resource (line 20) | def tag_resource(resource_arn, tags, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_config/untag_resource.py function untag_resource (line 20) | def untag_resource(resource_arn, tag_keys, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_config/update_configuration.py function update_configuration (line 20) | def update_configuration(arn, server_properties, client, description): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_topics/__init__.py function register_module (line 35) | def register_module(mcp: FastMCP) -> None: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_topics/create_topic.py function create_topic (line 23) | def create_topic( FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_topics/delete_topic.py function delete_topic (line 21) | def delete_topic(cluster_arn, topic_name, client, confirm_delete=None): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_topics/update_topic.py function update_topic (line 23) | def update_topic( FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_vpc/__init__.py function register_module (line 33) | def register_module(mcp: FastMCP) -> None: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_vpc/create_vpc_connection.py function create_vpc_connection (line 20) | def create_vpc_connection( FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_vpc/delete_vpc_connection.py function delete_vpc_connection (line 22) | def delete_vpc_connection(vpc_connection_arn, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/mutate_vpc/reject_client_vpc_connection.py function reject_client_vpc_connection (line 20) | def reject_client_vpc_connection(cluster_arn, vpc_connection_arn, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_cluster/__init__.py function register_module (line 37) | def register_module(mcp: FastMCP) -> None: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_cluster/describe_cluster.py function describe_cluster (line 21) | def describe_cluster(cluster_arn, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_cluster/describe_cluster_operation.py function describe_cluster_operation (line 21) | def describe_cluster_operation(cluster_operation_arn, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_cluster/get_bootstrap_brokers.py function get_bootstrap_brokers (line 21) | def get_bootstrap_brokers(cluster_arn, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_cluster/get_cluster_policy.py function get_cluster_policy (line 23) | def get_cluster_policy(cluster_arn, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_cluster/get_compatible_kafka_versions.py function get_compatible_kafka_versions (line 21) | def get_compatible_kafka_versions(cluster_arn=None, client=None): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_cluster/list_client_vpc_connections.py function list_client_vpc_connections (line 21) | def list_client_vpc_connections(cluster_arn, client, max_results=10, nex... FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_cluster/list_cluster_operations.py function list_cluster_operations (line 21) | def list_cluster_operations(cluster_arn, client, max_results=10, next_to... FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_cluster/list_nodes.py function list_nodes (line 21) | def list_nodes(cluster_arn, client, max_results=10, next_token=None): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_cluster/list_scram_secrets.py function list_scram_secrets (line 21) | def list_scram_secrets(cluster_arn, client, max_results=None, next_token... FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_config/__init__.py function register_module (line 33) | def register_module(mcp: FastMCP) -> None: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_config/describe_configuration.py function describe_configuration (line 21) | def describe_configuration(arn, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_config/describe_configuration_revision.py function describe_configuration_revision (line 21) | def describe_configuration_revision(arn, revision, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_config/list_configuration_revisions.py function list_configuration_revisions (line 21) | def list_configuration_revisions(arn, client, next_token, max_results=10): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_config/list_tags_for_resource.py function list_tags_for_resource (line 21) | def list_tags_for_resource(resource_arn, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_global/__init__.py function register_module (line 33) | def register_module(mcp: FastMCP) -> None: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_global/list_clusters.py function list_clusters (line 21) | def list_clusters( FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_global/list_configurations.py function list_configurations (line 21) | def list_configurations(client, max_results=10, next_token=None): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_global/list_kafka_versions.py function list_kafka_versions (line 21) | def list_kafka_versions(client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_global/list_vpc_connections.py function list_vpc_connections (line 21) | def list_vpc_connections(client, max_results=10, next_token=None): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_topics/__init__.py function register_module (line 34) | def register_module(mcp: FastMCP) -> None: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_topics/describe_topic.py function describe_topic (line 21) | def describe_topic(cluster_arn, topic_name, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_topics/describe_topic_partitions.py function describe_topic_partitions (line 23) | def describe_topic_partitions( FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_topics/list_topics.py function list_topics (line 23) | def list_topics( FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_vpc/__init__.py function register_module (line 30) | def register_module(mcp: FastMCP) -> None: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/read_vpc/describe_vpc_connection.py function describe_vpc_connection (line 21) | def describe_vpc_connection(vpc_connection_arn, client): FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/static_tools/__init__.py function register_module (line 28) | def register_module(mcp: FastMCP) -> None: FILE: src/aws-msk-mcp-server/awslabs/aws_msk_mcp_server/tools/static_tools/cluster_best_practices.py function get_cluster_best_practices (line 292) | def get_cluster_best_practices(instance_type: str, number_of_brokers: in... FILE: src/aws-msk-mcp-server/tests/test_client_manager.py class TestAWSClientManager (line 22) | class TestAWSClientManager: method test_init (line 25) | def test_init(self): method test_get_client (line 36) | def test_get_client(self, mock_config, mock_session): method test_get_client_reuse (line 64) | def test_get_client_reuse(self, mock_config, mock_session): method test_get_client_different_services (line 94) | def test_get_client_different_services(self, mock_config, mock_session): method test_get_client_different_regions (line 127) | def test_get_client_different_regions(self, mock_config, mock_session): method test_get_client_custom_profile (line 158) | def test_get_client_custom_profile(self, mock_config, mock_session): FILE: src/aws-msk-mcp-server/tests/test_cluster_metrics_tools.py class TestClusterMetricsTools (line 33) | class TestClusterMetricsTools: method test_get_monitoring_level_rank (line 36) | def test_get_monitoring_level_rank(self): method test_list_available_metrics (line 47) | def test_list_available_metrics(self): method test_list_available_metrics_serverless (line 66) | def test_list_available_metrics_serverless(self): method test_get_cluster_metrics_basic (line 95) | def test_get_cluster_metrics_basic(self, mock_boto3_client, mock_get_c... method test_get_cluster_metrics_with_broker_metrics (line 174) | def test_get_cluster_metrics_with_broker_metrics( method test_get_cluster_metrics_with_metric_dict (line 284) | def test_get_cluster_metrics_with_metric_dict(self, mock_boto3_client,... method test_get_cluster_metrics_with_optional_params (line 367) | def test_get_cluster_metrics_with_optional_params( method test_get_cluster_metrics_error_handling (line 458) | def test_get_cluster_metrics_error_handling(self, mock_boto3_client, m... method test_get_cluster_metrics_serverless (line 507) | def test_get_cluster_metrics_serverless(self, mock_boto3_client, mock_... method test_get_cluster_metrics_serverless_with_unsupported_metric (line 584) | def test_get_cluster_metrics_serverless_with_unsupported_metric( method test_get_cluster_metrics_provisioned_monitoring_level_check (line 646) | def test_get_cluster_metrics_provisioned_monitoring_level_check( method test_get_cluster_metrics_missing_client_manager (line 720) | def test_get_cluster_metrics_missing_client_manager(self): method test_get_cluster_metrics_invalid_metric_name (line 750) | def test_get_cluster_metrics_invalid_metric_name( method test_metric_config_serverless (line 829) | def test_metric_config_serverless(self): method test_broker_id_extraction_and_dimension_handling (line 863) | def test_broker_id_extraction_and_dimension_handling( FILE: src/aws-msk-mcp-server/tests/test_common_functions.py class TestCommonFunctions (line 25) | class TestCommonFunctions: method test_check_mcp_generated_tag_with_tag (line 28) | def test_check_mcp_generated_tag_with_tag(self): method test_check_mcp_generated_tag_without_tag (line 45) | def test_check_mcp_generated_tag_without_tag(self): method test_check_mcp_generated_tag_with_false_tag (line 62) | def test_check_mcp_generated_tag_with_false_tag(self): method test_check_mcp_generated_tag_with_case_insensitive_tag (line 79) | def test_check_mcp_generated_tag_with_case_insensitive_tag(self): method test_check_mcp_generated_tag_with_no_client (line 96) | def test_check_mcp_generated_tag_with_no_client(self): method test_get_cluster_name_with_arn (line 104) | def test_get_cluster_name_with_arn(self): method test_get_cluster_name_with_direct_name (line 114) | def test_get_cluster_name_with_direct_name(self): method test_get_cluster_name_with_invalid_arn_format (line 122) | def test_get_cluster_name_with_invalid_arn_format(self): method test_get_cluster_name_with_non_kafka_arn (line 128) | def test_get_cluster_name_with_non_kafka_arn(self): FILE: src/aws-msk-mcp-server/tests/test_create_cluster_v2.py class TestCreateClusterV2 (line 22) | class TestCreateClusterV2: method test_create_cluster_v2_no_client (line 25) | def test_create_cluster_v2_no_client(self): method test_create_cluster_v2_provisioned (line 33) | def test_create_cluster_v2_provisioned(self): method test_create_cluster_v2_serverless (line 118) | def test_create_cluster_v2_serverless(self): method test_create_cluster_v2_minimal_provisioned (line 159) | def test_create_cluster_v2_minimal_provisioned(self): method test_create_cluster_v2_minimal_serverless (line 201) | def test_create_cluster_v2_minimal_serverless(self): method test_create_cluster_v2_kwargs_handling (line 236) | def test_create_cluster_v2_kwargs_handling(self): FILE: src/aws-msk-mcp-server/tests/test_create_configuration.py class TestCreateConfiguration (line 25) | class TestCreateConfiguration: method test_create_configuration_basic (line 28) | def test_create_configuration_basic(self): method test_create_configuration_with_kafka_versions (line 59) | def test_create_configuration_with_kafka_versions(self): method test_create_configuration_without_description (line 98) | def test_create_configuration_without_description(self): method test_create_configuration_error (line 129) | def test_create_configuration_error(self): method test_create_configuration_missing_client (line 152) | def test_create_configuration_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_create_topic.py class TestCreateTopic (line 23) | class TestCreateTopic: method test_create_topic_success (line 26) | def test_create_topic_success(self): method test_create_topic_with_configs (line 57) | def test_create_topic_with_configs(self): method test_create_topic_already_exists (line 88) | def test_create_topic_already_exists(self): method test_create_topic_missing_client (line 108) | def test_create_topic_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_create_vpc_connection.py class TestCreateVpcConnection (line 23) | class TestCreateVpcConnection: method test_create_vpc_connection_basic (line 26) | def test_create_vpc_connection_basic(self): method test_create_vpc_connection_with_authentication (line 67) | def test_create_vpc_connection_with_authentication(self): method test_create_vpc_connection_with_client_subnets (line 102) | def test_create_vpc_connection_with_client_subnets(self): method test_create_vpc_connection_with_tags (line 142) | def test_create_vpc_connection_with_tags(self): method test_create_vpc_connection_with_all_parameters (line 177) | def test_create_vpc_connection_with_all_parameters(self): method test_create_vpc_connection_error (line 227) | def test_create_vpc_connection_error(self): method test_create_vpc_connection_missing_client (line 254) | def test_create_vpc_connection_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_delete_topic.py class TestDeleteTopic (line 23) | class TestDeleteTopic: method test_delete_topic_success (line 26) | def test_delete_topic_success(self): method test_delete_topic_without_confirmation (line 50) | def test_delete_topic_without_confirmation(self): method test_delete_topic_wrong_confirmation (line 67) | def test_delete_topic_wrong_confirmation(self): method test_delete_topic_system_topic_consumer (line 83) | def test_delete_topic_system_topic_consumer(self): method test_delete_topic_system_topic_amazon (line 100) | def test_delete_topic_system_topic_amazon(self): method test_delete_topic_allows_regular_underscore_topics (line 117) | def test_delete_topic_allows_regular_underscore_topics(self): method test_delete_topic_not_found (line 136) | def test_delete_topic_not_found(self): method test_delete_topic_missing_client (line 154) | def test_delete_topic_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_delete_vpc_connection.py class TestDeleteVpcConnection (line 25) | class TestDeleteVpcConnection: method setup_class (line 29) | def setup_class(cls): method teardown_class (line 53) | def teardown_class(cls): method test_delete_vpc_connection_basic (line 58) | def test_delete_vpc_connection_basic(self): method test_delete_vpc_connection_error (line 90) | def test_delete_vpc_connection_error(self): method test_delete_vpc_connection_missing_client (line 118) | def test_delete_vpc_connection_missing_client(self): method test_delete_vpc_connection_mcp_generated_tag_check (line 130) | def test_delete_vpc_connection_mcp_generated_tag_check(self): FILE: src/aws-msk-mcp-server/tests/test_describe_cluster.py class TestDescribeCluster (line 23) | class TestDescribeCluster: method test_describe_cluster_basic (line 26) | def test_describe_cluster_basic(self): method test_describe_cluster_error (line 49) | def test_describe_cluster_error(self): method test_describe_cluster_missing_client (line 68) | def test_describe_cluster_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_describe_cluster_operation.py class TestDescribeClusterOperation (line 25) | class TestDescribeClusterOperation: method test_describe_cluster_operation_basic (line 28) | def test_describe_cluster_operation_basic(self): method test_describe_cluster_operation_error (line 56) | def test_describe_cluster_operation_error(self): method test_describe_cluster_operation_missing_client (line 84) | def test_describe_cluster_operation_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_describe_configuration.py class TestDescribeConfiguration (line 25) | class TestDescribeConfiguration: method test_describe_configuration_basic (line 28) | def test_describe_configuration_basic(self): method test_describe_configuration_error (line 64) | def test_describe_configuration_error(self): method test_describe_configuration_missing_client (line 83) | def test_describe_configuration_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_describe_configuration_revision.py class TestDescribeConfigurationRevision (line 25) | class TestDescribeConfigurationRevision: method test_describe_configuration_revision_basic (line 28) | def test_describe_configuration_revision_basic(self): method test_describe_configuration_revision_error (line 60) | def test_describe_configuration_revision_error(self): method test_describe_configuration_revision_missing_client (line 87) | def test_describe_configuration_revision_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_describe_topic.py class TestDescribeTopic (line 23) | class TestDescribeTopic: method test_describe_topic_success (line 26) | def test_describe_topic_success(self): method test_describe_topic_not_found (line 54) | def test_describe_topic_not_found(self): method test_describe_topic_missing_client (line 73) | def test_describe_topic_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_describe_topic_partitions.py class TestDescribeTopicPartitions (line 25) | class TestDescribeTopicPartitions: method test_describe_topic_partitions_success (line 28) | def test_describe_topic_partitions_success(self): method test_describe_topic_partitions_with_pagination (line 55) | def test_describe_topic_partitions_with_pagination(self): method test_describe_topic_partitions_error (line 87) | def test_describe_topic_partitions_error(self): method test_describe_topic_partitions_missing_client (line 105) | def test_describe_topic_partitions_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_describe_vpc_connection.py class TestDescribeVpcConnection (line 25) | class TestDescribeVpcConnection: method test_describe_vpc_connection_basic (line 28) | def test_describe_vpc_connection_basic(self): method test_describe_vpc_connection_error (line 70) | def test_describe_vpc_connection_error(self): method test_describe_vpc_connection_missing_client (line 93) | def test_describe_vpc_connection_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_get_bootstrap_brokers.py class TestGetBootstrapBrokers (line 25) | class TestGetBootstrapBrokers: method test_get_bootstrap_brokers_basic (line 28) | def test_get_bootstrap_brokers_basic(self): method test_get_bootstrap_brokers_partial_response (line 52) | def test_get_bootstrap_brokers_partial_response(self): method test_get_bootstrap_brokers_error (line 75) | def test_get_bootstrap_brokers_error(self): method test_get_bootstrap_brokers_missing_client (line 94) | def test_get_bootstrap_brokers_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_get_cluster_policy.py class TestGetClusterPolicy (line 24) | class TestGetClusterPolicy: method test_get_cluster_policy_basic (line 27) | def test_get_cluster_policy_basic(self): method test_get_cluster_policy_not_found (line 65) | def test_get_cluster_policy_not_found(self): method test_get_cluster_policy_missing_client (line 84) | def test_get_cluster_policy_missing_client(self): method test_get_cluster_policy_invalid_policy_json (line 94) | def test_get_cluster_policy_invalid_policy_json(self): FILE: src/aws-msk-mcp-server/tests/test_get_compatible_kafka_versions.py class TestGetCompatibleKafkaVersions (line 25) | class TestGetCompatibleKafkaVersions: method test_get_compatible_kafka_versions_basic (line 28) | def test_get_compatible_kafka_versions_basic(self): method test_get_compatible_kafka_versions_multiple_sources (line 52) | def test_get_compatible_kafka_versions_multiple_sources(self): method test_get_compatible_kafka_versions_empty_response (line 77) | def test_get_compatible_kafka_versions_empty_response(self): method test_get_compatible_kafka_versions_error (line 94) | def test_get_compatible_kafka_versions_error(self): method test_get_compatible_kafka_versions_missing_client (line 113) | def test_get_compatible_kafka_versions_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_init.py class TestInit (line 21) | class TestInit: method test_version (line 24) | def test_version(self): method test_module_reload (line 41) | def test_module_reload(self): FILE: src/aws-msk-mcp-server/tests/test_list_client_vpc_connections.py class TestListClientVpcConnections (line 25) | class TestListClientVpcConnections: method test_list_client_vpc_connections_basic (line 28) | def test_list_client_vpc_connections_basic(self): method test_list_client_vpc_connections_with_pagination (line 60) | def test_list_client_vpc_connections_with_pagination(self): method test_list_client_vpc_connections_empty_response (line 94) | def test_list_client_vpc_connections_empty_response(self): method test_list_client_vpc_connections_error (line 113) | def test_list_client_vpc_connections_error(self): method test_list_client_vpc_connections_missing_client (line 134) | def test_list_client_vpc_connections_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_list_cluster_operations.py class TestListClusterOperations (line 25) | class TestListClusterOperations: method test_list_cluster_operations_basic (line 28) | def test_list_cluster_operations_basic(self): method test_list_cluster_operations_with_pagination (line 60) | def test_list_cluster_operations_with_pagination(self): method test_list_cluster_operations_empty_response (line 94) | def test_list_cluster_operations_empty_response(self): method test_list_cluster_operations_error (line 113) | def test_list_cluster_operations_error(self): method test_list_cluster_operations_missing_client (line 134) | def test_list_cluster_operations_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_list_clusters.py class TestListClusters (line 23) | class TestListClusters: method test_list_clusters_basic (line 26) | def test_list_clusters_basic(self): method test_list_clusters_with_filters (line 63) | def test_list_clusters_with_filters(self): method test_list_clusters_with_pagination (line 98) | def test_list_clusters_with_pagination(self): method test_list_clusters_empty_response (line 131) | def test_list_clusters_empty_response(self): method test_list_clusters_error (line 147) | def test_list_clusters_error(self): method test_list_clusters_missing_client (line 165) | def test_list_clusters_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_list_configuration_revisions.py class TestListConfigurationRevisions (line 25) | class TestListConfigurationRevisions: method test_list_configuration_revisions_basic (line 28) | def test_list_configuration_revisions_basic(self): method test_list_configuration_revisions_with_pagination (line 57) | def test_list_configuration_revisions_with_pagination(self): method test_list_configuration_revisions_empty_response (line 88) | def test_list_configuration_revisions_empty_response(self): method test_list_configuration_revisions_error (line 107) | def test_list_configuration_revisions_error(self): method test_list_configuration_revisions_missing_client (line 128) | def test_list_configuration_revisions_missing_client(self): method test_list_configuration_revisions_multiple_revisions (line 141) | def test_list_configuration_revisions_multiple_revisions(self): FILE: src/aws-msk-mcp-server/tests/test_list_configurations.py class TestListConfigurations (line 23) | class TestListConfigurations: method test_list_configurations_basic (line 26) | def test_list_configurations_basic(self): method test_list_configurations_with_pagination (line 61) | def test_list_configurations_with_pagination(self): method test_list_configurations_empty_response (line 93) | def test_list_configurations_empty_response(self): method test_list_configurations_error (line 109) | def test_list_configurations_error(self): method test_list_configurations_missing_client (line 127) | def test_list_configurations_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_list_customer_iam_access.py class TestListCustomerIamAccess (line 25) | class TestListCustomerIamAccess: method test_list_customer_iam_access_basic (line 29) | def test_list_customer_iam_access_basic(self, mock_get_cluster_name): method test_list_customer_iam_access_with_no_policy (line 119) | def test_list_customer_iam_access_with_no_policy(self): method test_list_customer_iam_access_missing_client_manager (line 167) | def test_list_customer_iam_access_missing_client_manager(self): method test_list_customer_iam_access_invalid_cluster_arn (line 179) | def test_list_customer_iam_access_invalid_cluster_arn(self): method test_list_customer_iam_access_exact_match (line 193) | def test_list_customer_iam_access_exact_match(self, mock_get_cluster_n... method test_list_customer_iam_access_global_wildcard (line 271) | def test_list_customer_iam_access_global_wildcard(self, mock_get_clust... method test_list_customer_iam_access_cluster_wildcard (line 351) | def test_list_customer_iam_access_cluster_wildcard(self, mock_get_clus... method test_list_customer_iam_access_pattern_match (line 431) | def test_list_customer_iam_access_pattern_match(self, mock_get_cluster... method test_list_customer_iam_access_string_action (line 509) | def test_list_customer_iam_access_string_action(self, mock_get_cluster... method test_list_customer_iam_access_kafka_cluster_action (line 581) | def test_list_customer_iam_access_kafka_cluster_action(self, mock_get_... method test_list_customer_iam_access_string_resource (line 653) | def test_list_customer_iam_access_string_resource(self, mock_get_clust... FILE: src/aws-msk-mcp-server/tests/test_list_kafka_versions.py class TestListKafkaVersions (line 23) | class TestListKafkaVersions: method test_list_kafka_versions_basic (line 26) | def test_list_kafka_versions_basic(self): method test_list_kafka_versions_empty_response (line 44) | def test_list_kafka_versions_empty_response(self): method test_list_kafka_versions_error (line 60) | def test_list_kafka_versions_error(self): method test_list_kafka_versions_missing_client (line 78) | def test_list_kafka_versions_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_list_nodes.py class TestListNodes (line 23) | class TestListNodes: method test_list_nodes_basic (line 26) | def test_list_nodes_basic(self): method test_list_nodes_error (line 72) | def test_list_nodes_error(self): method test_list_nodes_missing_client (line 91) | def test_list_nodes_missing_client(self): method test_list_nodes_empty_response (line 101) | def test_list_nodes_empty_response(self): FILE: src/aws-msk-mcp-server/tests/test_list_scram_secrets.py class TestListScramSecrets (line 23) | class TestListScramSecrets: method test_list_scram_secrets_basic (line 26) | def test_list_scram_secrets_basic(self): method test_list_scram_secrets_with_pagination (line 56) | def test_list_scram_secrets_with_pagination(self): method test_list_scram_secrets_empty_response (line 83) | def test_list_scram_secrets_empty_response(self): method test_list_scram_secrets_error (line 100) | def test_list_scram_secrets_error(self): method test_list_scram_secrets_missing_client (line 119) | def test_list_scram_secrets_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_list_tags_for_resource.py class TestListTagsForResource (line 25) | class TestListTagsForResource: method test_list_tags_for_resource_basic (line 28) | def test_list_tags_for_resource_basic(self): method test_list_tags_for_resource_empty_tags (line 49) | def test_list_tags_for_resource_empty_tags(self): method test_list_tags_for_resource_error (line 66) | def test_list_tags_for_resource_error(self): method test_list_tags_for_resource_missing_client (line 85) | def test_list_tags_for_resource_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_list_topics.py class TestListTopics (line 23) | class TestListTopics: method test_list_topics_basic (line 26) | def test_list_topics_basic(self): method test_list_topics_with_filter (line 62) | def test_list_topics_with_filter(self): method test_list_topics_with_pagination (line 91) | def test_list_topics_with_pagination(self): method test_list_topics_empty_response (line 124) | def test_list_topics_empty_response(self): method test_list_topics_error (line 141) | def test_list_topics_error(self): method test_list_topics_missing_client (line 159) | def test_list_topics_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_list_vpc_connections.py class TestListVpcConnections (line 23) | class TestListVpcConnections: method test_list_vpc_connections_basic (line 26) | def test_list_vpc_connections_basic(self): method test_list_vpc_connections_with_pagination (line 63) | def test_list_vpc_connections_with_pagination(self): method test_list_vpc_connections_empty_response (line 96) | def test_list_vpc_connections_empty_response(self): method test_list_vpc_connections_error (line 112) | def test_list_vpc_connections_error(self): method test_list_vpc_connections_missing_client (line 130) | def test_list_vpc_connections_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_logs_and_telemetry.py class TestLogsAndTelemetry (line 25) | class TestLogsAndTelemetry: method test_register_module (line 28) | def test_register_module(self): method test_register_module_with_spy (line 45) | def test_register_module_with_spy(self): method test_get_cluster_telemetry_metrics (line 71) | def test_get_cluster_telemetry_metrics(self): method test_get_cluster_telemetry_available_metrics (line 139) | def test_get_cluster_telemetry_available_metrics(self): method test_get_cluster_telemetry_missing_required_parameters (line 210) | def test_get_cluster_telemetry_missing_required_parameters(self): method test_get_cluster_telemetry_invalid_action (line 288) | def test_get_cluster_telemetry_invalid_action(self): method test_get_cluster_telemetry_available_metrics_missing_cluster_arn (line 322) | def test_get_cluster_telemetry_available_metrics_missing_cluster_arn(s... method test_list_customer_iam_access_tool (line 351) | def test_list_customer_iam_access_tool(self): method test_list_customer_iam_access_tool_with_error (line 414) | def test_list_customer_iam_access_tool_with_error(self): FILE: src/aws-msk-mcp-server/tests/test_main.py class TestMain (line 21) | class TestMain: method test_main_calls_run (line 26) | def test_main_calls_run(self, mock_parse_args, mock_run): FILE: src/aws-msk-mcp-server/tests/test_mutate_cluster.py class TestClusterBestPractices (line 25) | class TestClusterBestPractices: method test_valid_instance_type (line 28) | def test_valid_instance_type(self): method test_express_instance_type (line 47) | def test_express_instance_type(self): method test_invalid_instance_type (line 64) | def test_invalid_instance_type(self): method test_small_broker_count (line 77) | def test_small_broker_count(self): class TestMutateClusterTools (line 91) | class TestMutateClusterTools: method test_create_cluster_tool (line 96) | def test_create_cluster_tool(self, mock_create_cluster_v2, mock_boto3_... method test_update_broker_storage_tool (line 164) | def test_update_broker_storage_tool(self, mock_check_tag, mock_boto3_c... method test_update_broker_type_tool (line 231) | def test_update_broker_type_tool(self, mock_check_tag, mock_boto3_clie... method test_update_cluster_configuration_tool (line 281) | def test_update_cluster_configuration_tool(self, mock_check_tag, mock_... method test_update_monitoring_tool (line 334) | def test_update_monitoring_tool(self, mock_check_tag, mock_boto3_client): method test_update_security_tool (line 404) | def test_update_security_tool(self, mock_check_tag, mock_boto3_client): method test_put_cluster_policy_tool (line 551) | def test_put_cluster_policy_tool(self, mock_check_tag, mock_boto3_clie... method test_update_broker_count_tool (line 607) | def test_update_broker_count_tool(self, mock_check_tag, mock_boto3_cli... method test_associate_scram_secret_tool (line 659) | def test_associate_scram_secret_tool(self, mock_check_tag, mock_boto3_... method test_disassociate_scram_secret_tool (line 708) | def test_disassociate_scram_secret_tool(self, mock_check_tag, mock_bot... method test_reboot_broker_tool (line 756) | def test_reboot_broker_tool(self, mock_boto3_client): method test_update_broker_storage_tool_missing_mcp_tag (line 794) | def test_update_broker_storage_tool_missing_mcp_tag(self, mock_check_t... FILE: src/aws-msk-mcp-server/tests/test_mutate_cluster_init.py class TestMutateClusterInit (line 23) | class TestMutateClusterInit: method test_register_module (line 26) | def test_register_module(self): method test_create_cluster_tool (line 65) | def test_create_cluster_tool(self, mock_config, mock_create_cluster_v2... method test_create_cluster_tool_json_decode_error (line 142) | def test_create_cluster_tool_json_decode_error( method test_update_broker_storage_tool (line 214) | def test_update_broker_storage_tool( method test_update_broker_storage_tool_success (line 287) | def test_update_broker_storage_tool_success(self): method test_update_broker_type_tool (line 379) | def test_update_broker_type_tool( method test_update_broker_type_tool_success (line 438) | def test_update_broker_type_tool_success(self): method test_update_monitoring_tool (line 520) | def test_update_monitoring_tool( method test_update_monitoring_tool_with_open_monitoring (line 597) | def test_update_monitoring_tool_with_open_monitoring( method test_update_monitoring_tool_with_logging_info (line 689) | def test_update_monitoring_tool_with_logging_info( method test_update_monitoring_tool_with_all_params (line 778) | def test_update_monitoring_tool_with_all_params( method test_update_security_tool_success_case (line 870) | def test_update_security_tool_success_case(self): method test_update_cluster_configuration_tool_success_case (line 958) | def test_update_cluster_configuration_tool_success_case(self): method test_put_cluster_policy_tool_success_case (line 1040) | def test_put_cluster_policy_tool_success_case(self): method test_update_broker_count_tool_success_case (line 1127) | def test_update_broker_count_tool_success_case(self): method test_update_monitoring_tool_success_case (line 1207) | def test_update_monitoring_tool_success_case(self): FILE: src/aws-msk-mcp-server/tests/test_mutate_cluster_success_cases.py class TestMutateClusterSuccessCases (line 22) | class TestMutateClusterSuccessCases: method test_update_broker_storage_tool_success (line 32) | def test_update_broker_storage_tool_success( method test_update_broker_type_tool_success (line 132) | def test_update_broker_type_tool_success( method test_update_cluster_configuration_tool_success (line 218) | def test_update_cluster_configuration_tool_success( method test_update_monitoring_tool_success (line 309) | def test_update_monitoring_tool_success( method test_update_security_tool_success (line 408) | def test_update_security_tool_success( method test_put_cluster_policy_tool_success (line 498) | def test_put_cluster_policy_tool_success( method test_update_broker_count_tool_success (line 592) | def test_update_broker_count_tool_success( method test_associate_scram_secret_tool_success (line 682) | def test_associate_scram_secret_tool_success( method test_disassociate_scram_secret_tool_success (line 773) | def test_disassociate_scram_secret_tool_success( FILE: src/aws-msk-mcp-server/tests/test_mutate_config_init.py class TestMutateConfigInit (line 24) | class TestMutateConfigInit: method test_register_module (line 27) | def test_register_module(self): method test_create_configuration_tool (line 50) | def test_create_configuration_tool( method test_update_configuration_tool_not_mcp_generated (line 128) | def test_update_configuration_tool_not_mcp_generated( method test_tag_resource_tool (line 204) | def test_tag_resource_tool(self, mock_config, mock_tag_resource, mock_... method test_untag_resource_tool (line 258) | def test_untag_resource_tool(self, mock_config, mock_untag_resource, m... FILE: src/aws-msk-mcp-server/tests/test_mutate_topics_init.py class TestMutateTopicsInit (line 24) | class TestMutateTopicsInit: method test_register_module (line 27) | def test_register_module(self): method test_create_topic_tool_with_configs (line 47) | def test_create_topic_tool_with_configs( method test_create_topic_tool_without_configs (line 111) | def test_create_topic_tool_without_configs( method test_create_topic_tool_tag_check_fails (line 166) | def test_create_topic_tool_tag_check_fails( method test_update_topic_tool_with_both_params (line 212) | def test_update_topic_tool_with_both_params( method test_update_topic_tool_without_optional_params (line 274) | def test_update_topic_tool_without_optional_params( method test_update_topic_tool_tag_check_fails (line 326) | def test_update_topic_tool_tag_check_fails( method test_delete_topic_tool (line 371) | def test_delete_topic_tool( method test_delete_topic_tool_tag_check_fails (line 430) | def test_delete_topic_tool_tag_check_fails( FILE: src/aws-msk-mcp-server/tests/test_mutate_vpc_init.py function capture_tool_functions (line 21) | def capture_tool_functions(mcp): class TestMutateVpcInit (line 48) | class TestMutateVpcInit: method test_register_module (line 51) | def test_register_module(self): method test_create_vpc_connection_tool (line 69) | def test_create_vpc_connection_tool(self): method test_delete_vpc_connection_tool (line 133) | def test_delete_vpc_connection_tool(self): method test_reject_client_vpc_connection_tool (line 183) | def test_reject_client_vpc_connection_tool(self): FILE: src/aws-msk-mcp-server/tests/test_read_cluster_init.py class TestReadClusterInit (line 26) | class TestReadClusterInit: method test_register_module (line 29) | def test_register_module(self): method test_register_module_with_spy (line 46) | def test_register_module_with_spy(self): method test_describe_cluster_operation_tool (line 76) | def test_describe_cluster_operation_tool( method test_get_cluster_info_metadata (line 146) | def test_get_cluster_info_metadata( method test_get_cluster_info_brokers (line 209) | def test_get_cluster_info_brokers( method test_get_cluster_info_nodes (line 268) | def test_get_cluster_info_nodes(self, mock_config, mock_list_nodes, mo... method test_list_nodes_with_next_token (line 330) | def test_list_nodes_with_next_token(self, mock_list_nodes, mock_boto3_... method test_get_cluster_info_compatible_versions (line 365) | def test_get_cluster_info_compatible_versions( method test_get_cluster_info_policy (line 422) | def test_get_cluster_info_policy(self, mock_get_cluster_policy, mock_b... method test_get_cluster_info_operations_with_kwargs (line 460) | def test_get_cluster_info_operations_with_kwargs( method test_get_cluster_info_client_vpc_connections_with_kwargs (line 516) | def test_get_cluster_info_client_vpc_connections_with_kwargs( method test_get_cluster_info_scram_secrets_with_kwargs (line 577) | def test_get_cluster_info_scram_secrets_with_kwargs( method test_get_cluster_info_invalid_info_type (line 621) | def test_get_cluster_info_invalid_info_type(self, mock_boto3_client): method test_get_cluster_info_all (line 669) | def test_get_cluster_info_all( method test_get_cluster_info_all_with_error (line 779) | def test_get_cluster_info_all_with_error( method test_get_cluster_info_all_with_all_errors (line 845) | def test_get_cluster_info_all_with_all_errors( FILE: src/aws-msk-mcp-server/tests/test_read_cluster_init_updated.py class TestReadClusterInit (line 24) | class TestReadClusterInit: method test_register_module (line 27) | def test_register_module(self): method test_describe_cluster_operation_tool (line 48) | def test_describe_cluster_operation_tool( method test_get_cluster_info_metadata (line 117) | def test_get_cluster_info_metadata( method test_get_cluster_info_brokers (line 188) | def test_get_cluster_info_brokers( method test_get_cluster_info_nodes (line 255) | def test_get_cluster_info_nodes(self, mock_config, mock_list_nodes, mo... method test_get_cluster_info_compatible_versions (line 327) | def test_get_cluster_info_compatible_versions( method test_get_cluster_info_policy (line 396) | def test_get_cluster_info_policy( method test_get_cluster_info_operations_with_kwargs (line 461) | def test_get_cluster_info_operations_with_kwargs( method test_get_cluster_info_client_vpc_connections_with_kwargs (line 539) | def test_get_cluster_info_client_vpc_connections_with_kwargs( method test_get_cluster_info_scram_secrets_with_kwargs (line 622) | def test_get_cluster_info_scram_secrets_with_kwargs( method test_get_cluster_info_invalid_info_type (line 693) | def test_get_cluster_info_invalid_info_type(self, mock_config, mock_bo... method test_get_cluster_info_all (line 755) | def test_get_cluster_info_all( method test_get_cluster_info_all_with_error (line 847) | def test_get_cluster_info_all_with_error( FILE: src/aws-msk-mcp-server/tests/test_read_config_init.py class TestReadConfigInit (line 21) | class TestReadConfigInit: method test_register_module (line 24) | def test_register_module(self): method test_get_configuration_info_describe (line 43) | def test_get_configuration_info_describe(self, mock_describe_configura... method test_get_configuration_info_revisions (line 81) | def test_get_configuration_info_revisions( method test_get_configuration_info_revision_details (line 122) | def test_get_configuration_info_revision_details( method test_get_configuration_info_invalid_action (line 154) | def test_get_configuration_info_invalid_action(self): method test_get_configuration_info_missing_revision (line 169) | def test_get_configuration_info_missing_revision(self): method test_list_tags_for_resource_tool (line 187) | def test_list_tags_for_resource_tool(self, mock_list_tags_for_resource... FILE: src/aws-msk-mcp-server/tests/test_read_global_init.py class TestReadGlobalInit (line 24) | class TestReadGlobalInit: method test_register_module (line 27) | def test_register_module(self): method test_get_global_info_all (line 51) | def test_get_global_info_all( method test_get_global_info_clusters (line 138) | def test_get_global_info_clusters(self, mock_config, mock_list_cluster... method test_get_global_info_configurations (line 209) | def test_get_global_info_configurations( method test_get_global_info_vpc_connections (line 273) | def test_get_global_info_vpc_connections( method test_get_global_info_kafka_versions (line 337) | def test_get_global_info_kafka_versions( method test_get_global_info_invalid_type (line 396) | def test_get_global_info_invalid_type(self, mock_config, mock_boto3_cl... FILE: src/aws-msk-mcp-server/tests/test_read_topics_init.py class TestReadTopicsInit (line 23) | class TestReadTopicsInit: method test_register_module (line 26) | def test_register_module(self): method test_list_topics_tool_with_all_params (line 45) | def test_list_topics_tool_with_all_params( method test_list_topics_tool_without_optional_params (line 104) | def test_list_topics_tool_without_optional_params( method test_describe_topic_tool (line 153) | def test_describe_topic_tool(self, mock_config, mock_describe_topic, m... method test_describe_topic_partitions_tool_with_params (line 206) | def test_describe_topic_partitions_tool_with_params( method test_describe_topic_partitions_tool_without_optional_params (line 259) | def test_describe_topic_partitions_tool_without_optional_params( FILE: src/aws-msk-mcp-server/tests/test_read_vpc_init.py class TestReadVpcInit (line 21) | class TestReadVpcInit: method test_register_module (line 24) | def test_register_module(self): method test_describe_vpc_connection_tool (line 53) | def test_describe_vpc_connection_tool( FILE: src/aws-msk-mcp-server/tests/test_reject_client_vpc_connection.py class TestRejectClientVpcConnection (line 25) | class TestRejectClientVpcConnection: method test_reject_client_vpc_connection_basic (line 28) | def test_reject_client_vpc_connection_basic(self): method test_reject_client_vpc_connection_error (line 61) | def test_reject_client_vpc_connection_error(self): method test_reject_client_vpc_connection_missing_client (line 90) | def test_reject_client_vpc_connection_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_server.py class TestClusterBestPractices (line 28) | class TestClusterBestPractices: method test_valid_instance_type (line 31) | def test_valid_instance_type(self): method test_express_instance_type (line 50) | def test_express_instance_type(self): method test_invalid_instance_type (line 67) | def test_invalid_instance_type(self): method test_small_broker_count (line 80) | def test_small_broker_count(self): class TestGetClusterTelemetry (line 94) | class TestGetClusterTelemetry: method test_get_metrics (line 100) | def test_get_metrics(self, mock_get_cluster_metrics): method test_available_metrics (line 172) | def test_available_metrics(self, mock_client_manager_class, mock_list_... method test_invalid_action (line 230) | def test_invalid_action(self): method test_missing_required_parameters_for_metrics (line 248) | def test_missing_required_parameters_for_metrics(self): method test_available_metrics_missing_cluster_arn (line 322) | def test_available_metrics_missing_cluster_arn(self): class TestServer (line 344) | class TestServer: method test_run_server_read_only_mode (line 358) | async def test_run_server_read_only_mode( method test_run_server_write_mode (line 432) | async def test_run_server_write_mode( method test_main_read_only_mode (line 497) | def test_main_read_only_mode(self, mock_argument_parser, mock_run): method test_main_write_mode (line 524) | def test_main_write_mode(self, mock_argument_parser, mock_run): method test_signal_handler (line 551) | async def test_signal_handler(self, mock_print, mock_exit): FILE: src/aws-msk-mcp-server/tests/test_static_tools_init.py class TestStaticToolsInit (line 23) | class TestStaticToolsInit: method test_register_module (line 26) | def test_register_module(self): method test_get_cluster_best_practices_tool (line 44) | def test_get_cluster_best_practices_tool(self, mock_get_cluster_best_p... method test_get_cluster_best_practices_tool_express_instance (line 105) | def test_get_cluster_best_practices_tool_express_instance( method test_get_cluster_best_practices_tool_invalid_instance (line 168) | def test_get_cluster_best_practices_tool_invalid_instance( FILE: src/aws-msk-mcp-server/tests/test_tag_resource.py class TestTagResource (line 23) | class TestTagResource: method test_tag_resource_basic (line 26) | def test_tag_resource_basic(self): method test_tag_resource_error (line 42) | def test_tag_resource_error(self): method test_tag_resource_missing_client (line 62) | def test_tag_resource_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_tool_descriptions.py class TestToolDescriptions (line 31) | class TestToolDescriptions: method test_all_tools_have_descriptions (line 34) | def test_all_tools_have_descriptions(self): method test_tool_descriptions_are_meaningful (line 90) | def test_tool_descriptions_are_meaningful(self): FILE: src/aws-msk-mcp-server/tests/test_untag_resource.py class TestUntagResource (line 23) | class TestUntagResource: method test_untag_resource_basic (line 26) | def test_untag_resource_basic(self): method test_untag_resource_error (line 44) | def test_untag_resource_error(self): method test_untag_resource_missing_client (line 66) | def test_untag_resource_missing_client(self): FILE: src/aws-msk-mcp-server/tests/test_update_configuration.py class TestUpdateConfiguration (line 25) | class TestUpdateConfiguration: method setup_class (line 29) | def setup_class(cls): method teardown_class (line 58) | def teardown_class(cls): method test_update_configuration_basic (line 63) | def test_update_configuration_basic(self): method test_update_configuration_without_description (line 95) | def test_update_configuration_without_description(self): method test_update_configuration_error (line 125) | def test_update_configuration_error(self): method test_update_configuration_missing_client (line 147) | def test_update_configuration_missing_client(self): method test_update_configuration_catch_error_and_continue (line 161) | def test_update_configuration_catch_error_and_continue(self): FILE: src/aws-msk-mcp-server/tests/test_update_topic.py class TestUpdateTopic (line 23) | class TestUpdateTopic: method test_update_topic_configs_only (line 26) | def test_update_topic_configs_only(self): method test_update_topic_partition_count_only (line 50) | def test_update_topic_partition_count_only(self): method test_update_topic_both_params (line 75) | def test_update_topic_both_params(self): method test_update_topic_not_found (line 104) | def test_update_topic_not_found(self): method test_update_topic_missing_client (line 122) | def test_update_topic_missing_client(self): FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/server.py function main (line 94) | def main(): FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/cloud_wan/detect_cloudwan_inspection.py function detect_cwan_inspection (line 23) | async def detect_cwan_inspection( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/cloud_wan/get_all_cloudwan_routes.py function get_all_cwan_routes (line 21) | async def get_all_cwan_routes( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/cloud_wan/get_cloudwan_attachment_details.py function get_cwan_attachment (line 21) | async def get_cwan_attachment( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/cloud_wan/get_cloudwan_details.py function get_cwan (line 22) | async def get_cwan( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/cloud_wan/get_cloudwan_logs.py function get_cwan_logs (line 24) | async def get_cwan_logs( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/cloud_wan/get_cloudwan_peering_details.py function get_cwan_peering (line 21) | async def get_cwan_peering( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/cloud_wan/get_cloudwan_routes.py function get_cwan_routes (line 22) | async def get_cwan_routes( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/cloud_wan/list_cloudwan_peerings.py function list_cwan_peerings (line 21) | async def list_cwan_peerings( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/cloud_wan/list_core_networks.py function list_core_networks (line 21) | async def list_core_networks( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/cloud_wan/simulate_cloud_wan_route_change.py function simulate_cwan_route_change (line 23) | async def simulate_cwan_route_change( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/general/find_ip_address.py function find_ip_address (line 22) | async def find_ip_address( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/general/get_eni_details.py function get_eni_details (line 21) | async def get_eni_details( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/general/get_path_trace_methodology.py function get_path_trace_methodology (line 16) | async def get_path_trace_methodology(): FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/network_firewall/get_firewall_rules.py function get_firewall_rules (line 26) | async def get_firewall_rules( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/network_firewall/get_network_firewall_flow_logs.py function get_firewall_flow_logs (line 23) | async def get_firewall_flow_logs( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/network_firewall/list_network_firewalls.py function list_firewalls (line 21) | async def list_firewalls( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/transit_gateway/detect_transit_gateway_inspection.py function detect_tgw_inspection (line 21) | async def detect_tgw_inspection( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/transit_gateway/get_all_transit_gateway_routes.py function get_all_tgw_routes (line 21) | async def get_all_tgw_routes( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/transit_gateway/get_transit_gateway_details.py function get_tgw (line 21) | async def get_tgw( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/transit_gateway/get_transit_gateway_flow_logs.py function get_tgw_flow_logs (line 23) | async def get_tgw_flow_logs( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/transit_gateway/get_transit_gateway_routes.py function get_tgw_routes (line 21) | async def get_tgw_routes( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/transit_gateway/list_transit_gateway_peerings.py function list_tgw_peerings (line 21) | async def list_tgw_peerings( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/transit_gateway/list_transit_gateways.py function list_transit_gateways (line 21) | async def list_transit_gateways( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/vpc/get_vpc_flow_logs.py function get_vpc_flow_logs (line 23) | async def get_vpc_flow_logs( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/vpc/get_vpc_network_details.py function get_vpc_network (line 29) | async def get_vpc_network( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/vpc/list_vpcs.py function list_vpcs (line 21) | async def list_vpcs( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/tools/vpn/list_vpn_connections.py function list_vpn_connections (line 22) | async def list_vpn_connections( FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/utils/aws_common.py function get_aws_client (line 19) | def get_aws_client( function get_account_id (line 38) | def get_account_id(profile_name: str | None = None) -> str: FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/utils/formatters.py function format_stateless_rule (line 19) | def format_stateless_rule(rule: Dict[str, Any], priority: str) -> Dict[s... function format_stateful_rule (line 42) | def format_stateful_rule(rule: Dict[str, Any], rule_id: str) -> Dict[str... function format_routes (line 61) | def format_routes(routes_data: dict[str, Any], core_net_id: str): function parse_suricata_rule (line 85) | def parse_suricata_rule(rule_string: str) -> Dict[str, Any] | None: FILE: src/aws-network-mcp-server/awslabs/aws_network_mcp_server/utils/vcp_details.py class RouteDict (line 20) | class RouteDict: class RouteTableDict (line 30) | class RouteTableDict: class SubnetDict (line 40) | class SubnetDict: class VpcDict (line 51) | class VpcDict: class InternetGatewayDict (line 60) | class InternetGatewayDict: class NatGatewayDict (line 69) | class NatGatewayDict: class NetworkAclRuleDict (line 81) | class NetworkAclRuleDict: class NetworkAclDict (line 92) | class NetworkAclDict: class VpcEndpointDict (line 101) | class VpcEndpointDict: class VpcNetworkDetailsDict (line 114) | class VpcNetworkDetailsDict: function process_route_tables (line 126) | def process_route_tables(route_tables: Dict[str, Any]) -> List[RouteTabl... function process_subnets (line 172) | def process_subnets(subnets: Dict[str, Any], route_tables: Dict[str, Any... function process_igws (line 213) | def process_igws(igws: Dict[str, Any]) -> InternetGatewayDict: function process_nat_gateways (line 236) | def process_nat_gateways(nat_gateways: Dict[str, Any]) -> List[NatGatewa... function process_nacls (line 260) | def process_nacls(nacls: Dict[str, Any]) -> List[NetworkAclDict]: function process_vpc_endpoints (line 295) | def process_vpc_endpoints(endpoints: Dict[str, Any]) -> List[VpcEndpoint... FILE: src/aws-network-mcp-server/tests/conftest.py function mock_aws_credentials (line 20) | def mock_aws_credentials(): FILE: src/aws-network-mcp-server/tests/test_server.py class TestMcpServer (line 21) | class TestMcpServer: method test_server_initialization (line 24) | def test_server_initialization(self): method test_server_name (line 31) | def test_server_name(self): method test_server_instructions_contain_key_tools (line 35) | def test_server_instructions_contain_key_tools(self): method test_server_instructions_contain_important_notes (line 55) | def test_server_instructions_contain_important_notes(self): method test_main_function_calls_mcp_run (line 66) | def test_main_function_calls_mcp_run(self, mock_run): method test_main_function_logs_startup (line 73) | def test_main_function_logs_startup(self, mock_run, mock_logger): method test_tools_modules_importable (line 78) | def test_tools_modules_importable(self): method test_general_tools_available (line 97) | def test_general_tools_available(self): method test_cloud_wan_tools_available (line 109) | def test_cloud_wan_tools_available(self): method test_vpc_tools_available (line 117) | def test_vpc_tools_available(self): method test_transit_gateway_tools_available (line 125) | def test_transit_gateway_tools_available(self): method test_network_firewall_tools_available (line 133) | def test_network_firewall_tools_available(self): method test_vpn_tools_available (line 141) | def test_vpn_tools_available(self): method test_mcp_instance_has_required_attributes (line 149) | def test_mcp_instance_has_required_attributes(self): method test_logging_configuration (line 157) | def test_logging_configuration(self): method test_tool_registration_process (line 165) | def test_tool_registration_process(self): method test_main_function_exists_and_callable (line 190) | def test_main_function_exists_and_callable(self): method test_main_as_script_entry_point (line 197) | def test_main_as_script_entry_point(self, mock_run): FILE: src/aws-network-mcp-server/tests/tools/cloud_wan/conftest.py function mock_aws_client (line 23) | def mock_aws_client(monkeypatch): function mock_network_manager_client (line 42) | def mock_network_manager_client(): function mock_ec2_client (line 48) | def mock_ec2_client(): function mock_logs_client (line 54) | def mock_logs_client(): FILE: src/aws-network-mcp-server/tests/tools/cloud_wan/test_detect_cloudwan_inspection.py function test_detect_cloudwan_inspection_with_nfgs (line 31) | async def test_detect_cloudwan_inspection_with_nfgs(): function test_detect_cloudwan_inspection_malformed_policy (line 144) | async def test_detect_cloudwan_inspection_malformed_policy(): FILE: src/aws-network-mcp-server/tests/tools/cloud_wan/test_get_all_cloudwan_routes.py function mock_client (line 29) | def mock_client(): class TestGetAllCloudwanRoutes (line 36) | class TestGetAllCloudwanRoutes: method test_success_with_routes (line 39) | async def test_success_with_routes(self, mock_client): method test_empty_segments_and_edges (line 67) | async def test_empty_segments_and_edges(self, mock_client): method test_no_routes (line 77) | async def test_no_routes(self, mock_client): method test_route_error_handling (line 92) | async def test_route_error_handling(self, mock_client): method test_missing_fields (line 107) | async def test_missing_fields(self, mock_client): FILE: src/aws-network-mcp-server/tests/tools/cloud_wan/test_get_cloudwan_attachment_details.py function test_vpc_attachment_success (line 30) | async def test_vpc_attachment_success(mock_get_client): function test_connect_attachment_success (line 54) | async def test_connect_attachment_success(mock_get_client): function test_direct_connect_gateway_attachment_success (line 77) | async def test_direct_connect_gateway_attachment_success(mock_get_client): function test_site_to_site_vpn_attachment_success (line 102) | async def test_site_to_site_vpn_attachment_success(mock_get_client): function test_transit_gateway_route_table_attachment_success (line 128) | async def test_transit_gateway_route_table_attachment_success(mock_get_c... function test_attachment_not_found (line 157) | async def test_attachment_not_found(mock_get_client): function test_with_profile_name (line 177) | async def test_with_profile_name(mock_get_client): function test_vpc_attachment_with_missing_optional_fields (line 195) | async def test_vpc_attachment_with_missing_optional_fields(mock_get_clie... FILE: src/aws-network-mcp-server/tests/tools/cloud_wan/test_get_cloudwan_details.py function test_get_cloudwan_details_success (line 30) | async def test_get_cloudwan_details_success(mock_get_client): function test_get_cloudwan_details_pagination (line 50) | async def test_get_cloudwan_details_pagination(mock_get_client): function test_get_cloudwan_details_error (line 67) | async def test_get_cloudwan_details_error(mock_get_client): FILE: src/aws-network-mcp-server/tests/tools/cloud_wan/test_get_cloudwan_logs.py class TestGetCloudwanLogs (line 30) | class TestGetCloudwanLogs: method sample_log_event (line 34) | def sample_log_event(self): method query_results (line 50) | def query_results(self, sample_log_event): method test_success (line 64) | async def test_success(self, mock_sleep, mock_get_client, query_results): method test_topology_change_filter (line 83) | async def test_topology_change_filter(self, mock_sleep, mock_get_clien... method test_routing_update_filter (line 99) | async def test_routing_update_filter(self, mock_sleep, mock_get_client... method test_invalid_event_type (line 114) | async def test_invalid_event_type(self, mock_get_client): method test_no_results (line 121) | async def test_no_results(self, mock_sleep, mock_get_client): method test_query_failed (line 134) | async def test_query_failed(self, mock_sleep, mock_get_client): method test_query_timeout (line 147) | async def test_query_timeout(self, mock_sleep, mock_get_client): method test_custom_time_period (line 160) | async def test_custom_time_period(self, mock_sleep, mock_get_client, q... method test_aws_error (line 177) | async def test_aws_error(self, mock_get_client): method test_multiple_events_grouping (line 188) | async def test_multiple_events_grouping(self, mock_sleep, mock_get_cli... method test_uses_us_west_2_region (line 240) | async def test_uses_us_west_2_region(self, mock_sleep, mock_get_client... method test_correct_log_group (line 254) | async def test_correct_log_group(self, mock_sleep, mock_get_client, qu... FILE: src/aws-network-mcp-server/tests/tools/cloud_wan/test_get_cloudwan_peering_details.py class TestGetCloudwanPeeringDetails (line 29) | class TestGetCloudwanPeeringDetails: method peering_response (line 33) | def peering_response(self): method tgw_response (line 45) | def tgw_response(self): method route_tables_response (line 54) | def route_tables_response(self): method associations_response (line 63) | def associations_response(self): method test_success (line 72) | async def test_success( method test_no_attachment_id (line 102) | async def test_no_attachment_id(self, mock_get_client, tgw_response): method test_no_tgw_found (line 125) | async def test_no_tgw_found(self, mock_get_client, peering_response): method test_no_route_table_association (line 139) | async def test_no_route_table_association( method test_peering_not_found (line 159) | async def test_peering_not_found(self, mock_get_client): method test_with_profile (line 169) | async def test_with_profile(self, mock_get_client, peering_response, t... FILE: src/aws-network-mcp-server/tests/tools/cloud_wan/test_get_cloudwan_routes.py class TestGetCloudwanRoutes (line 29) | class TestGetCloudwanRoutes: method mock_core_network (line 33) | def mock_core_network(self): method mock_routes_response (line 44) | def mock_routes_response(self): method test_missing_parameters (line 63) | async def test_missing_parameters(self): method test_aws_error (line 71) | async def test_aws_error(self, mock_get_client): method test_invalid_segment (line 83) | async def test_invalid_segment(self, mock_get_client, mock_core_network): method test_invalid_nfg (line 95) | async def test_invalid_nfg(self, mock_get_client, mock_core_network): method test_segment_with_routes (line 109) | async def test_segment_with_routes( method test_nfg_with_routes (line 132) | async def test_nfg_with_routes(self, mock_get_client, mock_core_networ... method test_both_segment_and_nfg (line 147) | async def test_both_segment_and_nfg( method test_no_routes_found (line 169) | async def test_no_routes_found(self, mock_get_client, mock_core_network): method test_with_profile_name (line 183) | async def test_with_profile_name( FILE: src/aws-network-mcp-server/tests/tools/cloud_wan/test_list_core_networks.py class TestListCoreNetworks (line 29) | class TestListCoreNetworks: method mock_nm_client (line 33) | def mock_nm_client(self): method sample_core_networks (line 38) | def sample_core_networks(self): method test_success (line 56) | async def test_success(self, mock_get_client, mock_nm_client, sample_c... method test_with_profile (line 69) | async def test_with_profile(self, mock_get_client, mock_nm_client, sam... method test_empty_response (line 81) | async def test_empty_response(self, mock_get_client, mock_nm_client): method test_missing_core_networks_key (line 92) | async def test_missing_core_networks_key(self, mock_get_client, mock_n... method test_aws_exception (line 101) | async def test_aws_exception(self, mock_get_client, mock_nm_client): method test_missing_region (line 111) | async def test_missing_region(self): FILE: src/aws-network-mcp-server/tests/tools/cloud_wan/test_simulate_cloud_wan_route_change.py class TestSimulateCloudWanRouteChange (line 28) | class TestSimulateCloudWanRouteChange: method mock_core_network (line 32) | def mock_core_network(self): method mock_routes (line 45) | def mock_routes(self): method test_move_attachment_between_segments (line 67) | async def test_move_attachment_between_segments( method test_remove_attachment (line 111) | async def test_remove_attachment(self, mock_format_routes, mock_get_cl... method test_core_network_error (line 151) | async def test_core_network_error(self, mock_get_client): method test_no_matching_attachments (line 172) | async def test_no_matching_attachments( method test_region_not_in_segment (line 197) | async def test_region_not_in_segment(self, mock_format_routes, mock_ge... method test_multiple_changes (line 221) | async def test_multiple_changes(self, mock_format_routes, mock_get_cli... method test_with_profile_name (line 271) | async def test_with_profile_name(self, mock_format_routes, mock_get_cl... FILE: src/aws-network-mcp-server/tests/tools/general/test_find_ip_address.py class TestFindIpAddress (line 29) | class TestFindIpAddress: method mock_ec2_client (line 33) | def mock_ec2_client(self): method sample_eni_response (line 39) | def sample_eni_response(self): method test_find_private_ip_single_region_success (line 51) | async def test_find_private_ip_single_region_success( method test_find_public_ip_single_region_success (line 71) | async def test_find_public_ip_single_region_success( method test_find_ip_single_region_not_found (line 94) | async def test_find_ip_single_region_not_found(self, mock_get_client, ... method test_find_ip_all_regions_success (line 108) | async def test_find_ip_all_regions_success(self, mock_get_client, samp... method test_find_ip_all_regions_not_found (line 147) | async def test_find_ip_all_regions_not_found(self, mock_get_client): method test_find_ip_single_region_aws_error (line 180) | async def test_find_ip_single_region_aws_error(self, mock_get_client, ... method test_find_ip_all_regions_with_error (line 198) | async def test_find_ip_all_regions_with_error(self, mock_get_client): FILE: src/aws-network-mcp-server/tests/tools/general/test_get_eni_details.py class TestGetEniDetails (line 29) | class TestGetEniDetails: method mock_ec2_client (line 33) | def mock_ec2_client(self): method sample_eni_data (line 38) | def sample_eni_data(self): method sample_security_groups (line 53) | def sample_security_groups(self): method sample_nacls (line 74) | def sample_nacls(self): method sample_route_tables (line 103) | def sample_route_tables(self): method test_get_eni_details_success (line 133) | async def test_get_eni_details_success( method test_get_eni_details_not_found (line 180) | async def test_get_eni_details_not_found(self, mock_get_client, mock_e... method test_get_eni_details_aws_error (line 191) | async def test_get_eni_details_aws_error(self, mock_get_client, mock_e... method test_get_eni_details_with_profile (line 204) | async def test_get_eni_details_with_profile( method test_get_eni_details_no_route_table_association (line 223) | async def test_get_eni_details_no_route_table_association( method test_get_eni_details_no_public_ip (line 251) | async def test_get_eni_details_no_public_ip( method test_get_eni_details_multiple_security_groups (line 275) | async def test_get_eni_details_multiple_security_groups( FILE: src/aws-network-mcp-server/tests/tools/network_firewall/test_get_firewall_rules.py class TestGetFirewallRules (line 29) | class TestGetFirewallRules: method mock_nfw_client (line 33) | def mock_nfw_client(self): method firewall_response (line 38) | def firewall_response(self): method policy_response (line 49) | def policy_response(self): method stateless_rule_group (line 67) | def stateless_rule_group(self): method stateful_rule_group_standard (line 90) | def stateful_rule_group_standard(self): method stateful_rule_group_suricata (line 115) | def stateful_rule_group_suricata(self): method test_get_firewall_rules_success_with_both_rule_types (line 127) | async def test_get_firewall_rules_success_with_both_rule_types( method test_get_firewall_rules_with_suricata_rules (line 161) | async def test_get_firewall_rules_with_suricata_rules( method test_get_firewall_rules_empty_policy (line 187) | async def test_get_firewall_rules_empty_policy( method test_get_firewall_rules_with_profile (line 210) | async def test_get_firewall_rules_with_profile( method test_get_firewall_rules_firewall_not_found (line 225) | async def test_get_firewall_rules_firewall_not_found(self, mock_get_cl... method test_get_firewall_rules_policy_error (line 236) | async def test_get_firewall_rules_policy_error( method test_get_firewall_rules_rule_group_error (line 248) | async def test_get_firewall_rules_rule_group_error( FILE: src/aws-network-mcp-server/tests/tools/network_firewall/test_get_network_firewall_flow_logs.py class TestGetNetworkFirewallFlowLogs (line 29) | class TestGetNetworkFirewallFlowLogs: method mock_fw_client (line 33) | def mock_fw_client(self): method mock_logs_client (line 38) | def mock_logs_client(self): method logging_config_response (line 43) | def logging_config_response(self): method query_results_response (line 58) | def query_results_response(self): method test_basic_flow_logs_retrieval (line 72) | async def test_basic_flow_logs_retrieval( method test_no_flow_logging_configured (line 98) | async def test_no_flow_logging_configured( method test_flow_logs_not_in_cloudwatch (line 118) | async def test_flow_logs_not_in_cloudwatch( method test_all_filters (line 146) | async def test_all_filters( method test_custom_time_range (line 183) | async def test_custom_time_range( method test_query_timeout (line 213) | async def test_query_timeout( method test_query_failed (line 235) | async def test_query_failed( method test_no_results_found (line 257) | async def test_no_results_found( method test_query_running_then_complete (line 280) | async def test_query_running_then_complete( method test_aws_api_error (line 309) | async def test_aws_api_error(self, mock_get_client, mock_get_account_i... method test_default_parameters (line 322) | async def test_default_parameters( method test_multiple_log_destinations (line 347) | async def test_multiple_log_destinations( method test_ipv6_addresses (line 387) | async def test_ipv6_addresses( FILE: src/aws-network-mcp-server/tests/tools/network_firewall/test_list_network_firewalls.py class TestListNetworkFirewalls (line 29) | class TestListNetworkFirewalls: method mock_client (line 33) | def mock_client(self): method sample_firewalls (line 38) | def sample_firewalls(self): method test_success (line 48) | async def test_success(self, mock_get_client, mock_client, sample_fire... method test_empty_response (line 59) | async def test_empty_response(self, mock_get_client, mock_client): method test_missing_firewalls_key (line 70) | async def test_missing_firewalls_key(self, mock_get_client, mock_client): method test_with_profile (line 81) | async def test_with_profile(self, mock_get_client, mock_client): method test_aws_error (line 91) | async def test_aws_error(self, mock_get_client, mock_client): FILE: src/aws-network-mcp-server/tests/tools/transit_gateway/test_detect_transit_gateway_inspection.py class TestDetectTgwInspection (line 25) | class TestDetectTgwInspection: method mock_clients (line 29) | def mock_clients(self): method sample_firewalls (line 37) | def sample_firewalls(self): method sample_attachments (line 47) | def sample_attachments(self): method sample_vpc_endpoints (line 73) | def sample_vpc_endpoints(self): method sample_gwlb (line 87) | def sample_gwlb(self): method test_no_firewalls (line 104) | async def test_no_firewalls(self, mock_get_client, mock_clients): method test_vpc_firewall_detection (line 125) | async def test_vpc_firewall_detection( method test_tgw_firewall_detection (line 145) | async def test_tgw_firewall_detection( method test_gwlb_firewall_detection (line 168) | async def test_gwlb_firewall_detection( method test_nfw_describe_error (line 195) | async def test_nfw_describe_error( method test_gwlb_describe_error (line 214) | async def test_gwlb_describe_error( method test_with_profile (line 239) | async def test_with_profile(self, mock_get_client, mock_clients, sampl... method test_aws_error (line 258) | async def test_aws_error(self, mock_get_client): method test_all_firewall_types (line 268) | async def test_all_firewall_types( FILE: src/aws-network-mcp-server/tests/tools/transit_gateway/test_get_all_transit_gateway_routes.py class TestGetAllTransitGatewayRoutes (line 25) | class TestGetAllTransitGatewayRoutes: method mock_cloudwan_client (line 29) | def mock_cloudwan_client(self): method mock_ec2_client (line 34) | def mock_ec2_client(self): method sample_core_networks (line 39) | def sample_core_networks(self): method sample_tgw_registrations (line 44) | def sample_tgw_registrations(self): method sample_route_tables (line 53) | def sample_route_tables(self): method sample_network_routes (line 64) | def sample_network_routes(self): method test_get_all_tgw_routes_success (line 83) | async def test_get_all_tgw_routes_success( method test_get_all_tgw_routes_with_profiles (line 123) | async def test_get_all_tgw_routes_with_profiles( method test_get_all_tgw_routes_no_global_networks (line 162) | async def test_get_all_tgw_routes_no_global_networks( method test_get_all_tgw_routes_tgw_not_registered (line 179) | async def test_get_all_tgw_routes_tgw_not_registered( method test_get_all_tgw_routes_pagination (line 201) | async def test_get_all_tgw_routes_pagination( method test_get_all_tgw_routes_no_name_tag (line 256) | async def test_get_all_tgw_routes_no_name_tag( method test_get_all_tgw_routes_empty_routes (line 295) | async def test_get_all_tgw_routes_empty_routes( method test_get_all_tgw_routes_aws_error (line 327) | async def test_get_all_tgw_routes_aws_error(self, mock_get_client, moc... method test_get_all_tgw_routes_client_error (line 340) | async def test_get_all_tgw_routes_client_error(self, mock_get_client): FILE: src/aws-network-mcp-server/tests/tools/transit_gateway/test_get_tgw_details.py class TestGetTgwDetails (line 26) | class TestGetTgwDetails: method sample_tgw_response (line 30) | def sample_tgw_response(self): method test_success (line 65) | async def test_success(self, mock_get_client, sample_tgw_response): method test_with_profile (line 84) | async def test_with_profile(self, mock_get_client, sample_tgw_response): method test_not_found (line 97) | async def test_not_found(self, mock_get_client): method test_aws_error (line 109) | async def test_aws_error(self, mock_get_client): method test_minimal_response (line 125) | async def test_minimal_response(self, mock_get_client): FILE: src/aws-network-mcp-server/tests/tools/transit_gateway/test_get_transit_gateway_flow_logs.py class TestGetTgwFlowLogs (line 26) | class TestGetTgwFlowLogs: method flow_logs_response (line 30) | def flow_logs_response(self): method query_results (line 45) | def query_results(self): method test_success (line 64) | async def test_success(self, mock_sleep, mock_get_client, flow_logs_re... method test_no_flow_logs (line 88) | async def test_no_flow_logs(self, mock_get_client): method test_no_cloudwatch_logs (line 100) | async def test_no_cloudwatch_logs(self, mock_get_client): method test_no_results (line 113) | async def test_no_results(self, mock_sleep, mock_get_client, flow_logs... method test_query_failed (line 130) | async def test_query_failed(self, mock_sleep, mock_get_client, flow_lo... method test_with_filters (line 147) | async def test_with_filters( method test_custom_time_range (line 175) | async def test_custom_time_range( method test_custom_entry_limit (line 198) | async def test_custom_entry_limit( method test_aws_error (line 218) | async def test_aws_error(self, mock_get_client): method test_with_profile (line 230) | async def test_with_profile(self, mock_get_client, flow_logs_response): method test_query_timeout (line 247) | async def test_query_timeout(self, mock_sleep, mock_get_client, flow_l... FILE: src/aws-network-mcp-server/tests/tools/transit_gateway/test_get_transit_gateway_routes.py class TestGetTransitGatewayRoutes (line 25) | class TestGetTransitGatewayRoutes: method mock_client (line 29) | def mock_client(self): method sample_core_networks (line 34) | def sample_core_networks(self): method sample_tgw_registrations (line 39) | def sample_tgw_registrations(self): method sample_network_routes (line 48) | def sample_network_routes(self): method test_get_tgw_routes_success (line 78) | async def test_get_tgw_routes_success( method test_get_tgw_routes_with_filters (line 117) | async def test_get_tgw_routes_with_filters( method test_get_tgw_routes_with_profile (line 153) | async def test_get_tgw_routes_with_profile( method test_get_tgw_routes_no_global_networks (line 181) | async def test_get_tgw_routes_no_global_networks(self, mock_get_client... method test_get_tgw_routes_unavailable_global_network (line 198) | async def test_get_tgw_routes_unavailable_global_network(self, mock_ge... method test_get_tgw_routes_tgw_not_registered (line 217) | async def test_get_tgw_routes_tgw_not_registered( method test_get_tgw_routes_wrong_tgw_registered (line 239) | async def test_get_tgw_routes_wrong_tgw_registered( method test_get_tgw_routes_invalid_route_state (line 265) | async def test_get_tgw_routes_invalid_route_state( method test_get_tgw_routes_invalid_route_type (line 289) | async def test_get_tgw_routes_invalid_route_type( method test_get_tgw_routes_empty_routes (line 313) | async def test_get_tgw_routes_empty_routes( method test_get_tgw_routes_aws_error (line 340) | async def test_get_tgw_routes_aws_error(self, mock_get_client, mock_cl... method test_get_tgw_routes_client_error (line 355) | async def test_get_tgw_routes_client_error(self, mock_get_client): FILE: src/aws-network-mcp-server/tests/tools/transit_gateway/test_list_transit_gateway_peerings.py class TestListTransitGatewayPeerings (line 25) | class TestListTransitGatewayPeerings: method mock_ec2_client (line 29) | def mock_ec2_client(self): method sample_peerings (line 34) | def sample_peerings(self): method test_list_tgw_peerings_success (line 58) | async def test_list_tgw_peerings_success( method test_list_tgw_peerings_with_profile (line 80) | async def test_list_tgw_peerings_with_profile( method test_list_tgw_peerings_empty_results (line 101) | async def test_list_tgw_peerings_empty_results(self, mock_get_client, ... method test_list_tgw_peerings_missing_key (line 117) | async def test_list_tgw_peerings_missing_key(self, mock_get_client, mo... method test_list_tgw_peerings_aws_error (line 131) | async def test_list_tgw_peerings_aws_error(self, mock_get_client, mock... method test_list_tgw_peerings_client_error (line 146) | async def test_list_tgw_peerings_client_error(self, mock_get_client): FILE: src/aws-network-mcp-server/tests/tools/transit_gateway/test_list_transit_gateways.py class TestListTransitGateways (line 29) | class TestListTransitGateways: method mock_ec2_client (line 33) | def mock_ec2_client(self): method sample_tgws (line 38) | def sample_tgws(self): method test_list_transit_gateways_success (line 57) | async def test_list_transit_gateways_success( method test_list_transit_gateways_empty (line 72) | async def test_list_transit_gateways_empty(self, mock_get_client, mock... method test_list_transit_gateways_with_profile (line 83) | async def test_list_transit_gateways_with_profile(self, mock_get_clien... method test_list_transit_gateways_aws_error (line 95) | async def test_list_transit_gateways_aws_error(self, mock_get_client, ... method test_list_transit_gateways_missing_key (line 104) | async def test_list_transit_gateways_missing_key(self, mock_get_client... FILE: src/aws-network-mcp-server/tests/tools/vpc/test_get_vpc_flow_logs.py class TestGetVpcFlowLogs (line 29) | class TestGetVpcFlowLogs: method mock_ec2_client (line 33) | def mock_ec2_client(self): method mock_logs_client (line 38) | def mock_logs_client(self): method flow_logs_response (line 43) | def flow_logs_response(self): method query_results_response (line 52) | def query_results_response(self): method test_basic_flow_logs_retrieval (line 68) | async def test_basic_flow_logs_retrieval( method test_no_flow_logs_configured (line 91) | async def test_no_flow_logs_configured(self, mock_get_client, mock_ec2... method test_flow_logs_not_in_cloudwatch (line 100) | async def test_flow_logs_not_in_cloudwatch(self, mock_get_client, mock... method test_all_filters (line 111) | async def test_all_filters( method test_custom_time_range (line 149) | async def test_custom_time_range( method test_query_timeout (line 176) | async def test_query_timeout( method test_no_results_found (line 189) | async def test_no_results_found( method test_query_running_then_complete (line 203) | async def test_query_running_then_complete( method test_aws_api_error (line 227) | async def test_aws_api_error(self, mock_get_client, mock_ec2_client): method test_default_parameters (line 236) | async def test_default_parameters( FILE: src/aws-network-mcp-server/tests/tools/vpc/test_get_vpc_network_details.py function mock_ec2_responses (line 28) | def mock_ec2_responses(): function test_get_vpc_network_details_success (line 87) | async def test_get_vpc_network_details_success( function test_get_vpc_network_details_vpc_not_found (line 115) | async def test_get_vpc_network_details_vpc_not_found(mock_get_client, mo... function test_get_vpc_network_details_api_failure (line 127) | async def test_get_vpc_network_details_api_failure( function test_get_vpc_network_details_with_profile (line 142) | async def test_get_vpc_network_details_with_profile( function test_get_vpc_network_details_default_region (line 165) | async def test_get_vpc_network_details_default_region( function test_get_vpc_network_details_complex_resources (line 188) | async def test_get_vpc_network_details_complex_resources(mock_get_client... FILE: src/aws-network-mcp-server/tests/tools/vpc/test_list_vpcs.py class TestListVpcs (line 27) | class TestListVpcs: method sample_vpcs (line 31) | def sample_vpcs(self): method test_list_vpcs_success (line 51) | async def test_list_vpcs_success(self, mock_get_client, sample_vpcs): method test_list_vpcs_empty (line 64) | async def test_list_vpcs_empty(self, mock_get_client): method test_list_vpcs_with_profile (line 75) | async def test_list_vpcs_with_profile(self, mock_get_client, sample_vp... method test_list_vpcs_missing_vpcs_key (line 86) | async def test_list_vpcs_missing_vpcs_key(self, mock_get_client): method test_list_vpcs_aws_error (line 97) | async def test_list_vpcs_aws_error(self, mock_get_client): method test_list_vpcs_client_error (line 110) | async def test_list_vpcs_client_error(self, mock_get_client): FILE: src/aws-network-mcp-server/tests/tools/vpn/test_list_vpn_connections.py class TestListVpnConnections (line 30) | class TestListVpnConnections: method mock_ec2_client (line 34) | def mock_ec2_client(self): method test_list_vpn_connections_success (line 39) | async def test_list_vpn_connections_success(self, mock_get_client, moc... method test_list_vpn_connections_empty (line 64) | async def test_list_vpn_connections_empty(self, mock_get_client, mock_... method test_list_vpn_connections_multiple (line 75) | async def test_list_vpn_connections_multiple(self, mock_get_client, mo... method test_list_vpn_connections_with_profile (line 97) | async def test_list_vpn_connections_with_profile(self, mock_get_client... method test_list_vpn_connections_client_error (line 109) | async def test_list_vpn_connections_client_error(self, mock_get_client... method test_list_vpn_connections_generic_error (line 121) | async def test_list_vpn_connections_generic_error(self, mock_get_clien... method test_list_vpn_connections_no_customer_config (line 130) | async def test_list_vpn_connections_no_customer_config(self, mock_get_... FILE: src/aws-network-mcp-server/tests/utils/test_aws_common.py class TestAwsCommon (line 21) | class TestAwsCommon: method test_get_aws_client_with_profile (line 26) | def test_get_aws_client_with_profile(self, mock_session_class, mock_cl... method test_get_aws_client_without_profile (line 42) | def test_get_aws_client_without_profile(self, mock_client, mock_getenv): method test_get_aws_client_default_region_from_env (line 55) | def test_get_aws_client_default_region_from_env(self, mock_client, moc... method test_get_aws_client_default_region_fallback (line 70) | def test_get_aws_client_default_region_fallback(self, mock_client, moc... method test_get_aws_client_profile_from_env (line 83) | def test_get_aws_client_profile_from_env(self, mock_session_class, moc... method test_get_aws_client_both_env_vars_set (line 101) | def test_get_aws_client_both_env_vars_set(self, mock_session_class, mo... method test_get_account_id_with_profile (line 121) | def test_get_account_id_with_profile(self, mock_session_class, mock_cl... method test_get_account_id_without_profile (line 138) | def test_get_account_id_without_profile(self, mock_client): method test_get_account_id_error_handling (line 151) | def test_get_account_id_error_handling(self, mock_client): method test_get_account_id_with_profile_error (line 163) | def test_get_account_id_with_profile_error(self, mock_session_class): FILE: src/aws-network-mcp-server/tests/utils/test_formatters.py class TestFormatters (line 25) | class TestFormatters: method test_format_stateless_rule_basic (line 28) | def test_format_stateless_rule_basic(self): method test_format_stateless_rule_anywhere_source (line 47) | def test_format_stateless_rule_anywhere_source(self): method test_format_stateless_rule_missing_attributes (line 63) | def test_format_stateless_rule_missing_attributes(self): method test_format_stateful_rule_basic (line 78) | def test_format_stateful_rule_basic(self): method test_format_stateful_rule_missing_header (line 105) | def test_format_stateful_rule_missing_header(self): method test_format_routes_single_segment (line 117) | def test_format_routes_single_segment(self): method test_format_routes_multiple_segments_regions (line 142) | def test_format_routes_multiple_segments_regions(self): method test_format_routes_empty_data (line 173) | def test_format_routes_empty_data(self): method test_format_routes_no_destinations (line 180) | def test_format_routes_no_destinations(self): method test_parse_suricata_rule_valid_rule (line 197) | def test_parse_suricata_rule_valid_rule(self): method test_parse_suricata_rule_minimal_options (line 218) | def test_parse_suricata_rule_minimal_options(self): method test_parse_suricata_rule_invalid_format (line 230) | def test_parse_suricata_rule_invalid_format(self): method test_parse_suricata_rule_empty_string (line 238) | def test_parse_suricata_rule_empty_string(self): method test_parse_suricata_rule_whitespace_only (line 244) | def test_parse_suricata_rule_whitespace_only(self): FILE: src/aws-network-mcp-server/tests/utils/test_vcp_details.py class TestProcessRouteTables (line 30) | class TestProcessRouteTables: method test_main_route_table (line 33) | def test_main_route_table(self): method test_custom_route_table_with_subnets (line 59) | def test_custom_route_table_with_subnets(self): method test_route_with_different_targets (line 83) | def test_route_with_different_targets(self): class TestProcessSubnets (line 123) | class TestProcessSubnets: method test_public_subnet (line 126) | def test_public_subnet(self): method test_private_subnet_with_main_route_table (line 154) | def test_private_subnet_with_main_route_table(self): method test_subnet_without_route_table (line 181) | def test_subnet_without_route_table(self): class TestProcessIgws (line 200) | class TestProcessIgws: method test_attached_igw (line 203) | def test_attached_igw(self): method test_no_igw (line 220) | def test_no_igw(self): method test_igw_without_attachments (line 229) | def test_igw_without_attachments(self): class TestProcessNatGateways (line 239) | class TestProcessNatGateways: method test_nat_gateway_processing (line 242) | def test_nat_gateway_processing(self): method test_empty_nat_gateways (line 265) | def test_empty_nat_gateways(self): class TestProcessNacls (line 274) | class TestProcessNacls: method test_nacl_processing (line 277) | def test_nacl_processing(self): method test_empty_nacls (line 312) | def test_empty_nacls(self): class TestProcessVpcEndpoints (line 321) | class TestProcessVpcEndpoints: method test_interface_endpoint (line 324) | def test_interface_endpoint(self): method test_gateway_load_balancer_endpoint (line 346) | def test_gateway_load_balancer_endpoint(self): method test_gateway_endpoint_ignored (line 367) | def test_gateway_endpoint_ignored(self): class TestDataClasses (line 385) | class TestDataClasses: method test_route_dict (line 388) | def test_route_dict(self): method test_subnet_dict (line 395) | def test_subnet_dict(self): method test_network_acl_rule_dict (line 406) | def test_network_acl_rule_dict(self): FILE: src/aws-pricing-mcp-server/awslabs/aws_pricing_mcp_server/alternative_pricing.py function get_pricing_alternatives (line 40) | def get_pricing_alternatives(service_code: str) -> Optional[List[Dict[st... FILE: src/aws-pricing-mcp-server/awslabs/aws_pricing_mcp_server/cdk_analyzer.py class CDKAnalyzer (line 32) | class CDKAnalyzer: method __init__ (line 35) | def __init__(self, project_path: str): method _analyze_file (line 43) | def _analyze_file(self, file_path: Path) -> List[Dict[str, Any]]: method analyze_project (line 127) | async def analyze_project(self) -> Dict[str, Any]: function analyze_cdk_project (line 197) | async def analyze_cdk_project(project_path: str) -> Dict[str, Any]: FILE: src/aws-pricing-mcp-server/awslabs/aws_pricing_mcp_server/helpers.py class CostAnalysisHelper (line 25) | class CostAnalysisHelper: method parse_pricing_data (line 29) | def parse_pricing_data( method generate_cost_table (line 441) | def generate_cost_table(pricing_structure: Dict) -> Dict: method generate_well_architected_recommendations (line 567) | def generate_well_architected_recommendations(services: List[str]) -> ... FILE: src/aws-pricing-mcp-server/awslabs/aws_pricing_mcp_server/models.py class ErrorResponse (line 24) | class ErrorResponse(BaseModel): class PricingFilter (line 35) | class PricingFilter(BaseModel): method model_dump (line 49) | def model_dump(self, by_alias=True, **kwargs): class OutputOptions (line 57) | class OutputOptions(BaseModel): FILE: src/aws-pricing-mcp-server/awslabs/aws_pricing_mcp_server/pricing_client.py function get_pricing_region (line 33) | def get_pricing_region(requested_region: Optional[str] = None) -> str: function create_pricing_client (line 86) | def create_pricing_client(profile: Optional[str] = None, region: Optiona... function get_currency_for_region (line 113) | def get_currency_for_region(region: str) -> str: FILE: src/aws-pricing-mcp-server/awslabs/aws_pricing_mcp_server/pricing_transformer.py function _is_free_product (line 26) | def _is_free_product(pricing_item: Dict[str, Any]) -> bool: function transform_pricing_data (line 58) | def transform_pricing_data( FILE: src/aws-pricing-mcp-server/awslabs/aws_pricing_mcp_server/report_generator.py class ServiceInfo (line 50) | class ServiceInfo: function _extract_services_info (line 62) | def _extract_services_info(custom_cost_data: Dict) -> Tuple[Dict[str, Se... function _create_unit_pricing_details_table (line 104) | def _create_unit_pricing_details_table(services_info: Dict[str, ServiceI... function _parse_cost_value (line 155) | def _parse_cost_value(cost_str: str) -> Tuple[float, float]: function _create_cost_calculation_table (line 172) | def _create_cost_calculation_table( function _create_unit_pricing_table (line 227) | def _create_unit_pricing_table( function _create_free_tier_info (line 248) | def _create_free_tier_info(custom_cost_data: Dict, services_info: Dict[s... function _create_usage_cost_table (line 278) | def _create_usage_cost_table(services_info: Dict[str, ServiceInfo]) -> str: function _extract_key_factors (line 314) | def _extract_key_factors( function _calculate_base_cost (line 343) | def _calculate_base_cost( function _generate_projected_costs_table (line 402) | def _generate_projected_costs_table( function _process_recommendations (line 467) | def _process_recommendations( function _format_value (line 500) | def _format_value(key: Any, value: Any) -> str: function _process_custom_sections (line 528) | def _process_custom_sections(custom_cost_data: Dict) -> str: function _generate_custom_data_report (line 608) | async def _generate_custom_data_report( function _generate_pricing_data_report (line 789) | async def _generate_pricing_data_report( function _generate_csv_report (line 938) | async def _generate_csv_report( function generate_cost_report (line 1085) | async def generate_cost_report( FILE: src/aws-pricing-mcp-server/awslabs/aws_pricing_mcp_server/server.py function create_error_response (line 63) | async def create_error_response( function analyze_cdk_project_wrapper (line 167) | async def analyze_cdk_project_wrapper( function analyze_terraform_project_wrapper (line 203) | async def analyze_terraform_project_wrapper( function get_pricing (line 387) | async def get_pricing( function get_bedrock_patterns (line 569) | async def get_bedrock_patterns(ctx: Optional[Context] = None) -> str: function generate_cost_report_wrapper (line 703) | async def generate_cost_report_wrapper( function get_pricing_service_codes (line 861) | async def get_pricing_service_codes( function get_pricing_service_attributes (line 978) | async def get_pricing_service_attributes( class AttributeValuesError (line 1099) | class AttributeValuesError(Exception): method __init__ (line 1102) | def __init__( function _get_single_attribute_values (line 1114) | async def _get_single_attribute_values( function get_pricing_attribute_values (line 1224) | async def get_pricing_attribute_values( function get_price_list_urls (line 1369) | async def get_price_list_urls( function main (line 1514) | def main(): FILE: src/aws-pricing-mcp-server/awslabs/aws_pricing_mcp_server/terraform_analyzer.py class TerraformAnalyzer (line 32) | class TerraformAnalyzer: method __init__ (line 35) | def __init__(self, project_path: str): method _find_aws_services_from_module (line 43) | def _find_aws_services_from_module( method _extract_module_info (line 178) | def _extract_module_info( method _analyze_file (line 244) | def _analyze_file(self, file_path: Path) -> List[Dict[str, Any]]: method analyze_project (line 350) | async def analyze_project(self) -> Dict[str, Any]: function analyze_terraform_project (line 425) | async def analyze_terraform_project(project_path: str) -> Dict[str, Any]: FILE: src/aws-pricing-mcp-server/tests/conftest.py function mock_context (line 26) | def mock_context(): function sample_pricing_data_web (line 36) | def sample_pricing_data_web() -> Dict[str, Any]: function sample_pricing_data_api (line 65) | def sample_pricing_data_api() -> Dict[str, Any]: function sample_cdk_project (line 98) | def sample_cdk_project(tmp_path: Path) -> str: function temp_output_dir (line 163) | def temp_output_dir() -> Generator[str, None, None]: function mock_boto3 (line 170) | def mock_boto3() -> MagicMock: function mock_pricing_client_attributes (line 217) | def mock_pricing_client_attributes() -> MagicMock: function mock_pricing_client_values (line 243) | def mock_pricing_client_values() -> MagicMock: function sample_service_attributes (line 263) | def sample_service_attributes() -> Dict[str, Any]: function sample_attribute_values (line 288) | def sample_attribute_values() -> Dict[str, Any]: FILE: src/aws-pricing-mcp-server/tests/test_alternative_pricing.py class TestGetPricingAlternatives (line 4) | class TestGetPricingAlternatives: method test_service_with_alternatives (line 7) | def test_service_with_alternatives(self): method test_service_without_alternatives (line 22) | def test_service_without_alternatives(self): method test_invalid_service_code (line 28) | def test_invalid_service_code(self): FILE: src/aws-pricing-mcp-server/tests/test_cdk_analyzer.py class TestCDKAnalyzer (line 22) | class TestCDKAnalyzer: method test_init (line 25) | def test_init(self, sample_cdk_project): method test_analyze_python_file (line 31) | async def test_analyze_python_file(self, sample_cdk_project): method test_analyze_typescript_file (line 46) | async def test_analyze_typescript_file(self, sample_cdk_project): method test_analyze_invalid_file (line 61) | async def test_analyze_invalid_file(self, temp_output_dir): method test_analyze_nonexistent_file (line 73) | async def test_analyze_nonexistent_file(self, temp_output_dir): method test_analyze_project_with_mixed_files (line 82) | async def test_analyze_project_with_mixed_files(self, sample_cdk_proje... method test_analyze_empty_project (line 97) | async def test_analyze_empty_project(self, temp_output_dir): method test_analyze_project_with_init_files (line 107) | async def test_analyze_project_with_init_files(self, sample_cdk_project): method test_analyze_project_with_malformed_files (line 128) | async def test_analyze_project_with_malformed_files(self, temp_output_... method test_analyze_project_wrapper (line 147) | async def test_analyze_project_wrapper(self, sample_cdk_project): method test_analyze_project_wrapper_error (line 162) | async def test_analyze_project_wrapper_error(self): method test_analyze_project_with_complex_imports (line 173) | async def test_analyze_project_with_complex_imports(self, sample_cdk_p... FILE: src/aws-pricing-mcp-server/tests/test_helpers.py class TestCostAnalysisHelper (line 20) | class TestCostAnalysisHelper: method test_parse_pricing_data_web (line 23) | def test_parse_pricing_data_web(self, sample_pricing_data_web): method test_parse_pricing_data_api (line 31) | def test_parse_pricing_data_api(self, sample_pricing_data_api): method test_parse_pricing_data_with_related_services (line 37) | def test_parse_pricing_data_with_related_services(self, sample_pricing... method test_parse_pricing_data_bedrock_kb (line 45) | def test_parse_pricing_data_bedrock_kb(self, sample_pricing_data_web): method test_parse_pricing_data_empty (line 55) | def test_parse_pricing_data_empty(self): method test_generate_cost_table_full_data (line 64) | def test_generate_cost_table_full_data(self, sample_pricing_data_web): method test_generate_cost_table_minimal_data (line 80) | def test_generate_cost_table_minimal_data(self): method test_generate_well_architected_recommendations_lambda (line 97) | def test_generate_well_architected_recommendations_lambda(self): method test_generate_well_architected_recommendations_bedrock (line 111) | def test_generate_well_architected_recommendations_bedrock(self): method test_generate_well_architected_recommendations_multiple_services (line 123) | def test_generate_well_architected_recommendations_multiple_services(s... method test_generate_well_architected_recommendations_empty (line 140) | def test_generate_well_architected_recommendations_empty(self): method test_parse_pricing_data_with_invalid_input (line 154) | def test_parse_pricing_data_with_invalid_input(self): method test_generate_cost_table_with_invalid_input (line 163) | def test_generate_cost_table_with_invalid_input(self): FILE: src/aws-pricing-mcp-server/tests/test_pricing_client.py class TestGetPricingRegion (line 26) | class TestGetPricingRegion: method test_region_mapping (line 56) | def test_region_mapping(self, region, expected): method test_uses_aws_region_env_var (line 68) | def test_uses_aws_region_env_var(self, env_region, expected, monkeypat... class TestCreatePricingClient (line 74) | class TestCreatePricingClient: method test_create_client_parameters (line 88) | def test_create_client_parameters( method test_uses_env_profile_when_none_specified (line 117) | def test_uses_env_profile_when_none_specified(self, mock_session, monk... method test_uses_default_endpoint_when_not_set (line 130) | def test_uses_default_endpoint_when_not_set(self, mock_session, monkey... method test_uses_custom_endpoint_when_set (line 150) | def test_uses_custom_endpoint_when_set(self, mock_session, monkeypatch): class TestGetCurrencyForRegion (line 173) | class TestGetCurrencyForRegion: method test_currency_mapping (line 191) | def test_currency_mapping(self, region, expected): FILE: src/aws-pricing-mcp-server/tests/test_pricing_transformer.py class TestOutputOptionsFiltering (line 26) | class TestOutputOptionsFiltering: method test_output_options_model_creation (line 29) | def test_output_options_model_creation(self): method test_transform_pricing_data_no_options (line 81) | def test_transform_pricing_data_no_options(self): method test_transform_pricing_data_ondemand_only (line 106) | def test_transform_pricing_data_ondemand_only(self): method test_transform_pricing_data_multiple_terms (line 145) | def test_transform_pricing_data_multiple_terms(self): method test_transform_pricing_data_reserved_only (line 177) | def test_transform_pricing_data_reserved_only(self): method test_transform_pricing_data_empty_list (line 205) | def test_transform_pricing_data_empty_list(self): method test_transform_pricing_data_no_terms_section (line 210) | def test_transform_pricing_data_no_terms_section(self): method test_transform_pricing_data_json_error (line 235) | def test_transform_pricing_data_json_error(self): method test_transform_pricing_data_size_reduction (line 246) | def test_transform_pricing_data_size_reduction(self): method test_transform_pricing_data_product_attributes_only (line 286) | def test_transform_pricing_data_product_attributes_only(self): method test_transform_pricing_data_combined_pricing_and_attributes (line 331) | def test_transform_pricing_data_combined_pricing_and_attributes(self): method test_transform_pricing_data_no_product_section (line 384) | def test_transform_pricing_data_no_product_section(self): method test_transform_pricing_data_no_product_attributes_section (line 411) | def test_transform_pricing_data_no_product_attributes_section(self): method test_transform_pricing_data_product_attributes_size_reduction (line 442) | def test_transform_pricing_data_product_attributes_size_reduction(self): method test_transform_pricing_data_mixed_json_strings (line 492) | def test_transform_pricing_data_mixed_json_strings(self): class TestExcludeFreeProductsFiltering (line 532) | class TestExcludeFreeProductsFiltering: method _create_product_data (line 535) | def _create_product_data(self, family, price_usd, terms_type='OnDemand'): method test_exclude_free_products_option_behavior (line 563) | def test_exclude_free_products_option_behavior(self, exclude_free, exp... method test_exclude_free_products_by_price (line 585) | def test_exclude_free_products_by_price(self, price_usd, should_be_kept): method test_exclude_free_products_mixed_data (line 595) | def test_exclude_free_products_mixed_data(self): method test_exclude_free_products_mixed_pricing_dimensions (line 611) | def test_exclude_free_products_mixed_pricing_dimensions(self): method test_exclude_free_products_no_ondemand_terms (line 639) | def test_exclude_free_products_no_ondemand_terms(self, terms_type): method test_exclude_free_products_malformed_data (line 666) | def test_exclude_free_products_malformed_data(self, malformed_data, sh... method test_exclude_free_products_combined_with_other_filters (line 684) | def test_exclude_free_products_combined_with_other_filters(self): method test_is_free_product_helper_function (line 799) | def test_is_free_product_helper_function(self, item, expected): FILE: src/aws-pricing-mcp-server/tests/test_report_generator.py class TestReportGenerator (line 37) | class TestReportGenerator: method test_extract_services_info_direct (line 40) | def test_extract_services_info_direct(self): method test_extract_services_info_nested (line 64) | def test_extract_services_info_nested(self): method test_create_unit_pricing_details_table (line 78) | def test_create_unit_pricing_details_table(self): method test_create_cost_calculation_table (line 100) | def test_create_cost_calculation_table(self): method test_create_free_tier_info (line 120) | def test_create_free_tier_info(self): method test_create_usage_cost_table (line 139) | def test_create_usage_cost_table(self): method test_generate_custom_data_report (line 159) | async def test_generate_custom_data_report(self, mock_context, temp_ou... method test_generate_pricing_data_report (line 182) | async def test_generate_pricing_data_report(self, mock_context, sample... method test_generate_csv_report (line 194) | async def test_generate_csv_report(self, mock_context, temp_output_dir): method test_generate_cost_report_markdown (line 221) | async def test_generate_cost_report_markdown( method test_generate_cost_report_csv (line 238) | async def test_generate_cost_report_csv( method test_generate_cost_report_error_handling (line 260) | async def test_generate_cost_report_error_handling(self, mock_context): method test_process_recommendations_with_prompt (line 268) | def test_process_recommendations_with_prompt(self): method test_process_recommendations_fallback (line 285) | def test_process_recommendations_fallback(self): method test_format_value_monetary (line 294) | def test_format_value_monetary(self): method test_format_value_non_monetary (line 300) | def test_format_value_non_monetary(self): method test_format_value_edge_cases (line 306) | def test_format_value_edge_cases(self): method test_process_custom_sections (line 320) | def test_process_custom_sections(self): method test_generate_cost_table_with_invalid_input (line 341) | def test_generate_cost_table_with_invalid_input(self): method test_service_info_creation (line 361) | def test_service_info_creation(self): FILE: src/aws-pricing-mcp-server/tests/test_server.py class TestAnalyzeCdkProject (line 35) | class TestAnalyzeCdkProject: method test_analyze_valid_project (line 39) | async def test_analyze_valid_project(self, mock_context, sample_cdk_pr... method test_analyze_invalid_project (line 55) | async def test_analyze_invalid_project(self, mock_context, temp_output... method test_analyze_nonexistent_project (line 67) | async def test_analyze_nonexistent_project(self, mock_context): class TestGetPricing (line 76) | class TestGetPricing: method test_get_valid_pricing (line 80) | async def test_get_valid_pricing(self, mock_boto3, mock_context): method test_get_pricing_with_filters (line 96) | async def test_get_pricing_with_filters(self, mock_boto3, mock_context): method test_pricing_filter_model_validation (line 126) | async def test_pricing_filter_model_validation(self): method test_new_filter_types_validation (line 144) | async def test_new_filter_types_validation(self): method test_filter_serialization_comma_separated (line 177) | async def test_filter_serialization_comma_separated(self): method test_multi_region_pricing (line 208) | async def test_multi_region_pricing(self, mock_boto3, mock_context): method test_single_region_backward_compatibility (line 235) | async def test_single_region_backward_compatibility(self, mock_boto3, ... method test_get_pricing_response_structure_validation (line 260) | async def test_get_pricing_response_structure_validation(self, mock_bo... method test_get_pricing_empty_results (line 297) | async def test_get_pricing_empty_results(self, mock_boto3, mock_context): method test_get_pricing_api_error (line 328) | async def test_get_pricing_api_error(self, mock_boto3, mock_context): method test_get_pricing_data_processing_error (line 346) | async def test_get_pricing_data_processing_error(self, mock_boto3, moc... method test_get_pricing_client_creation_error (line 363) | async def test_get_pricing_client_creation_error(self, mock_context): method test_get_pricing_result_threshold_exceeded (line 381) | async def test_get_pricing_result_threshold_exceeded(self, mock_boto3,... method test_get_pricing_unlimited_results (line 410) | async def test_get_pricing_unlimited_results(self, mock_boto3, mock_co... method test_get_pricing_without_region (line 432) | async def test_get_pricing_without_region(self, mock_boto3, mock_conte... method test_get_pricing_region_none_explicit (line 453) | async def test_get_pricing_region_none_explicit(self, mock_boto3, mock... method test_get_pricing_with_filters_no_region (line 473) | async def test_get_pricing_with_filters_no_region(self, mock_boto3, mo... method test_get_pricing_custom_threshold (line 494) | async def test_get_pricing_custom_threshold(self, mock_context, mock_b... method test_get_pricing_pagination_parameters (line 529) | async def test_get_pricing_pagination_parameters( method test_get_pricing_response_next_token (line 581) | async def test_get_pricing_response_next_token( method test_get_pricing_with_alternatives (line 600) | async def test_get_pricing_with_alternatives(self, mock_boto3, mock_co... method test_get_pricing_without_alternatives (line 622) | async def test_get_pricing_without_alternatives(self, mock_boto3, mock... method test_get_pricing_global_service_message (line 634) | async def test_get_pricing_global_service_message(self, mock_boto3, mo... class TestGetBedrockPatterns (line 645) | class TestGetBedrockPatterns: method test_get_patterns (line 649) | async def test_get_patterns(self, mock_context): class TestGenerateCostReport (line 659) | class TestGenerateCostReport: method test_generate_markdown_report (line 663) | async def test_generate_markdown_report(self, mock_context, sample_pri... method test_generate_csv_report (line 680) | async def test_generate_csv_report(self, mock_context, sample_pricing_... method test_generate_report_with_detailed_data (line 705) | async def test_generate_report_with_detailed_data( method test_generate_report_error_handling (line 742) | async def test_generate_report_error_handling(self, mock_context): class TestGetPricingServiceAttributes (line 760) | class TestGetPricingServiceAttributes: method test_get_pricing_service_attributes (line 779) | async def test_get_pricing_service_attributes( method test_get_pricing_service_attributes_filtering_happy_path (line 887) | async def test_get_pricing_service_attributes_filtering_happy_path( method test_get_pricing_service_attributes_filtering_errors (line 960) | async def test_get_pricing_service_attributes_filtering_errors( method test_get_pricing_service_attributes_errors (line 1021) | async def test_get_pricing_service_attributes_errors( method test_get_pricing_service_attributes_client_creation_error (line 1058) | async def test_get_pricing_service_attributes_client_creation_error(se... method test_get_pricing_service_attributes_filter_with_api_errors (line 1075) | async def test_get_pricing_service_attributes_filter_with_api_errors( class TestGetPricingAttributeValues (line 1095) | class TestGetPricingAttributeValues: method test_get_pricing_attribute_values_happy_path (line 1227) | async def test_get_pricing_attribute_values_happy_path( method test_get_pricing_attribute_values_filter_invalid_regex (line 1261) | async def test_get_pricing_attribute_values_filter_invalid_regex( method test_get_pricing_attribute_values_filter_for_non_requested_attribute (line 1287) | async def test_get_pricing_attribute_values_filter_for_non_requested_a... method test_get_pricing_attribute_values_empty_filters_dict (line 1310) | async def test_get_pricing_attribute_values_empty_filters_dict(self, m... method test_get_pricing_attribute_values_case_insensitive_filtering (line 1328) | async def test_get_pricing_attribute_values_case_insensitive_filtering( method test_get_pricing_attribute_values_single_attribute_with_pagination (line 1352) | async def test_get_pricing_attribute_values_single_attribute_with_pagi... method test_get_pricing_attribute_values_empty_attribute_list (line 1383) | async def test_get_pricing_attribute_values_empty_attribute_list( method test_get_pricing_attribute_values_single_attribute_empty (line 1401) | async def test_get_pricing_attribute_values_single_attribute_empty( method test_get_pricing_attribute_values_all_or_nothing_failure (line 1431) | async def test_get_pricing_attribute_values_all_or_nothing_failure( method test_get_pricing_attribute_values_api_error_in_multi_attribute (line 1462) | async def test_get_pricing_attribute_values_api_error_in_multi_attribute( method test_get_pricing_attribute_values_client_creation_error (line 1492) | async def test_get_pricing_attribute_values_client_creation_error(self... class TestGetPricingServiceCodesFiltering (line 1512) | class TestGetPricingServiceCodesFiltering: method mock_service_codes_response (line 1516) | def mock_service_codes_response(self, mock_boto3): method test_regex_filtering_happy_path (line 1582) | async def test_regex_filtering_happy_path( method test_regex_filtering_error_cases (line 1624) | async def test_regex_filtering_error_cases( method test_filter_error_scenarios (line 1664) | async def test_filter_error_scenarios( method test_filter_with_pagination (line 1686) | async def test_filter_with_pagination(self, mock_context, mock_boto3): class TestServerIntegration (line 1721) | class TestServerIntegration: method test_get_pricing_service_codes_integration (line 1725) | async def test_get_pricing_service_codes_integration(self, mock_contex... method test_get_pricing_service_codes_errors (line 1769) | async def test_get_pricing_service_codes_errors( method test_get_pricing_service_codes_pagination (line 1799) | async def test_get_pricing_service_codes_pagination(self, mock_context... method test_pricing_workflow (line 1846) | async def test_pricing_workflow(self, mock_context, mock_boto3): class TestIsFreeProduct (line 1872) | class TestIsFreeProduct: method _create_pricing_data (line 1875) | def _create_pricing_data(self, price_per_unit: dict) -> dict: method test_is_free_product_multi_currency (line 1906) | def test_is_free_product_multi_currency( class TestGetPriceListUrls (line 1919) | class TestGetPriceListUrls: method test_get_price_list_urls_success (line 1923) | async def test_get_price_list_urls_success(self, mock_context, mock_bo... method test_get_price_list_urls_default_date (line 1971) | async def test_get_price_list_urls_default_date(self, mock_context, mo... method test_get_price_list_urls_format_failure (line 1996) | async def test_get_price_list_urls_format_failure(self, mock_context, ... method test_get_price_list_urls_no_price_lists (line 2030) | async def test_get_price_list_urls_no_price_lists(self, mock_context, ... method test_get_price_list_urls_unsupported_format (line 2046) | async def test_get_price_list_urls_unsupported_format(self, mock_conte... method test_get_price_list_urls_list_api_error (line 2071) | async def test_get_price_list_urls_list_api_error(self, mock_context, ... method test_get_price_list_urls_get_url_api_error (line 2087) | async def test_get_price_list_urls_get_url_api_error(self, mock_contex... method test_get_price_list_urls_no_download_url (line 2113) | async def test_get_price_list_urls_no_download_url(self, mock_context,... method test_get_price_list_urls_unexpected_error (line 2139) | async def test_get_price_list_urls_unexpected_error(self, mock_context): method test_get_price_list_urls_no_supported_formats (line 2152) | async def test_get_price_list_urls_no_supported_formats(self, mock_con... FILE: src/aws-pricing-mcp-server/tests/test_terraform_analyzer.py function sample_terraform_project (line 25) | def sample_terraform_project(tmp_path): function test_analyze_terraform_project (line 211) | async def test_analyze_terraform_project(sample_terraform_project): function test_analyze_nonexistent_project (line 250) | async def test_analyze_nonexistent_project(): function test_analyze_empty_project (line 260) | async def test_analyze_empty_project(tmp_path): function test_terraform_analyzer_file_analysis (line 272) | async def test_terraform_analyzer_file_analysis(sample_terraform_project): function test_module_finding (line 313) | async def test_module_finding(): function test_local_module_finding (line 355) | async def test_local_module_finding(tmp_path): FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/models.py class BackendConfiguration (line 22) | class BackendConfiguration(BaseModel): class FrontendConfiguration (line 55) | class FrontendConfiguration(BaseModel): class DeployWebAppRequest (line 66) | class DeployWebAppRequest(BaseModel): FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/resources/deployment_details.py function handle_deployment_details (line 28) | async def handle_deployment_details(project_name: str) -> Dict[str, Any]: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/resources/deployment_list.py function handle_deployments_list (line 21) | async def handle_deployments_list() -> Dict[str, Any]: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/resources/template_details.py function handle_template_details (line 24) | def handle_template_details(template_name: str) -> Dict[str, Any]: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/resources/template_list.py function handle_template_list (line 24) | def handle_template_list() -> Dict[str, Any]: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/server.py function streaming_infrastructure_setup (line 143) | def streaming_infrastructure_setup() -> Dict[str, Any]: function natural_language_detection (line 187) | def natural_language_detection() -> Dict[str, Any]: function template_list (line 225) | def template_list() -> Dict[str, Any]: function template_details (line 239) | def template_details(template_name: str) -> Dict[str, Any]: function deployment_list (line 255) | async def deployment_list() -> Dict[str, Any]: function deployment_details (line 269) | async def deployment_details(project_name: str) -> Dict[str, Any]: function main (line 281) | def main() -> int: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/template/registry.py class DeploymentTypes (line 27) | class DeploymentTypes(str, Enum): class Template (line 35) | class Template: method __init__ (line 45) | def __init__( function get_templates_path (line 62) | def get_templates_path() -> str: function get_template_for_deployment (line 125) | async def get_template_for_deployment( function discover_templates (line 191) | async def discover_templates() -> List[Template]: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/template/renderer.py function get_jinja_filters (line 27) | def get_jinja_filters(): function get_jinja_tests (line 49) | def get_jinja_tests(): function render_template (line 67) | async def render_template(request: DeployWebAppRequest) -> str: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/templates/iam_policies.py class SecurePolicyGenerator (line 222) | class SecurePolicyGenerator: method validate_aws_parameters (line 230) | def validate_aws_parameters(region: str, account: str, **kwargs) -> Li... method generate_kafka_esm_policy (line 245) | def generate_kafka_esm_policy( method generate_sqs_esm_policy (line 308) | def generate_sqs_esm_policy( method generate_kinesis_esm_policy (line 339) | def generate_kinesis_esm_policy( method generate_dynamodb_esm_policy (line 370) | def generate_dynamodb_esm_policy( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/common/base_tool.py class BaseTool (line 16) | class BaseTool: method __init__ (line 19) | def __init__(self, allow_write=None, allow_sensitive_data_access=None): method checkToolAccess (line 24) | def checkToolAccess(self): method require_user_confirmation (line 36) | def require_user_confirmation( method scrub_response_data (line 60) | def scrub_response_data(response: dict) -> dict: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/esm/esm_diagnosis.py class EsmDiagnosisTool (line 21) | class EsmDiagnosisTool(BaseTool): method __init__ (line 29) | def __init__(self, mcp: FastMCP, allow_write: bool = False): method esm_kafka_troubleshoot_tool (line 44) | async def esm_kafka_troubleshoot_tool( method _get_diagnosis_info (line 93) | async def _get_diagnosis_info(self, ctx: Context, kafka_type: Optional... method _get_resolution_steps (line 264) | async def _get_resolution_steps( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/esm/esm_guidance.py class EsmGuidanceTool (line 24) | class EsmGuidanceTool(BaseTool): method __init__ (line 32) | def __init__(self, mcp: FastMCP, allow_write: bool = False): method esm_guidance_tool (line 47) | async def esm_guidance_tool( method _get_setup_guidance (line 91) | async def _get_setup_guidance( method _get_networking_guidance (line 257) | async def _get_networking_guidance( method _get_troubleshooting_guidance (line 271) | async def _get_troubleshooting_guidance( method esm_sqs_policy_tool (line 297) | async def esm_sqs_policy_tool( method esm_sqs_concurrency_guidance_tool (line 385) | async def esm_sqs_concurrency_guidance_tool( method esm_self_managed_kafka_policy_tool (line 545) | async def esm_self_managed_kafka_policy_tool( method _validate_aws_parameters (line 664) | def _validate_aws_parameters( method esm_msk_policy_tool (line 715) | async def esm_msk_policy_tool( method esm_msk_security_group_tool (line 808) | async def esm_msk_security_group_tool( method esm_deployment_precheck_tool (line 904) | async def esm_deployment_precheck_tool( method esm_networking_guidance_tool (line 964) | async def esm_networking_guidance_tool( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/esm/esm_recommend.py class EsmRecommendTool (line 26) | class EsmRecommendTool(BaseTool): method __init__ (line 71) | def __init__(self, mcp: FastMCP, allow_write: bool = False): method esm_optimize_tool (line 92) | async def esm_optimize_tool( method _initialize_lambda_client (line 222) | def _initialize_lambda_client(self): method _get_esm_configs (line 241) | def _get_esm_configs( method _get_esm_limits_from_aws (line 288) | def _get_esm_limits_from_aws(self) -> Dict[str, Dict]: method esm_get_config_tradeoff_tool (line 326) | async def esm_get_config_tradeoff_tool( method esm_validate_configs_tool (line 579) | async def esm_validate_configs_tool( method esm_generate_update_template_tool (line 680) | async def esm_generate_update_template_tool( method _get_kafka_throughput_recommendations (line 951) | def _get_kafka_throughput_recommendations(self) -> Dict[str, Any]: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/esm/secure_esm_guidance.py class SecureEsmGuidanceTool (line 32) | class SecureEsmGuidanceTool(BaseTool): method __init__ (line 42) | def __init__(self, mcp: FastMCP, allow_write: bool = False): method secure_esm_msk_policy_tool (line 68) | async def secure_esm_msk_policy_tool( method secure_esm_sqs_policy_tool (line 168) | async def secure_esm_sqs_policy_tool( method secure_esm_kinesis_policy_tool (line 247) | async def secure_esm_kinesis_policy_tool( method secure_esm_dynamodb_policy_tool (line 324) | async def secure_esm_dynamodb_policy_tool( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/guidance/deploy_serverless_app_help.py class ApplicationType (line 23) | class ApplicationType(str, Enum): class DeployServerlessAppHelpTool (line 31) | class DeployServerlessAppHelpTool: method __init__ (line 34) | def __init__(self, mcp: FastMCP): method deploy_serverless_app_help_tool (line 38) | async def deploy_serverless_app_help_tool( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/guidance/get_iac_guidance.py class IaCToolInfo (line 20) | class IaCToolInfo: method __init__ (line 23) | def __init__( method to_dict (line 52) | def to_dict(self) -> Dict[str, Any]: class ComparisonTable (line 65) | class ComparisonTable: method __init__ (line 68) | def __init__(self, headers: List[str], rows: List[Dict[str, Any]]): method to_dict (line 78) | def to_dict(self) -> Dict[str, Any]: class ToolSpecificGuidance (line 83) | class ToolSpecificGuidance: method __init__ (line 86) | def __init__( method to_dict (line 109) | def to_dict(self) -> Dict[str, Any]: class GetIaCGuidanceTool (line 120) | class GetIaCGuidanceTool: method __init__ (line 123) | def __init__(self, mcp: FastMCP): method get_iac_guidance_tool (line 127) | async def get_iac_guidance_tool( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/guidance/get_lambda_event_schemas.py class GetLambdaEventSchemasTool (line 133) | class GetLambdaEventSchemasTool: method __init__ (line 136) | def __init__(self, mcp: FastMCP): method get_lambda_event_schemas (line 140) | async def get_lambda_event_schemas( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/guidance/get_lambda_guidance.py class WhenToUseScenario (line 20) | class WhenToUseScenario: method __init__ (line 23) | def __init__(self, scenario: str, description: str, examples: Optional... method to_dict (line 35) | def to_dict(self) -> Dict[str, Any]: class WhenNotToUseScenario (line 43) | class WhenNotToUseScenario: method __init__ (line 46) | def __init__(self, scenario: str, description: str, alternatives: Opti... method to_dict (line 58) | def to_dict(self) -> Dict[str, Any]: class DecisionCriterion (line 66) | class DecisionCriterion: method __init__ (line 69) | def __init__(self, criterion: str, description: str): method to_dict (line 79) | def to_dict(self) -> Dict[str, Any]: class UseCaseSpecificGuidance (line 84) | class UseCaseSpecificGuidance: method __init__ (line 87) | def __init__( method to_dict (line 113) | def to_dict(self) -> Dict[str, Any]: class GetLambdaGuidanceTool (line 129) | class GetLambdaGuidanceTool: method __init__ (line 132) | def __init__(self, mcp: FastMCP): method get_lambda_guidance (line 136) | async def get_lambda_guidance( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/guidance/get_serverless_templates.py class GetServerlessTemplatesTool (line 23) | class GetServerlessTemplatesTool: method __init__ (line 26) | def __init__(self, mcp: FastMCP): method get_serverless_templates (line 31) | async def get_serverless_templates( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/poller/esm_diagnosis.py class EsmDiagnosisTool (line 20) | class EsmDiagnosisTool: method __init__ (line 28) | def __init__(self, mcp: FastMCP): method esm_kafka_diagnosis_tool (line 38) | async def esm_kafka_diagnosis_tool( method esm_kafka_resolution_tool (line 167) | async def esm_kafka_resolution_tool( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/poller/esm_guidance.py class EsmGuidanceTool (line 22) | class EsmGuidanceTool: method __init__ (line 30) | def __init__(self, mcp: FastMCP): method esm_guidance_tool (line 46) | async def esm_guidance_tool( method _validate_aws_parameters (line 182) | def _validate_aws_parameters( method esm_msk_policy_tool (line 231) | async def esm_msk_policy_tool( method esm_msk_security_group_tool (line 318) | async def esm_msk_security_group_tool( method esm_deployment_precheck_tool (line 412) | async def esm_deployment_precheck_tool( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/poller/esm_recommend.py class EsmRecommendTool (line 23) | class EsmRecommendTool: method __init__ (line 56) | def __init__(self, mcp: FastMCP): method _initialize_lambda_client (line 72) | def _initialize_lambda_client(self): method _get_esm_configs (line 91) | def _get_esm_configs( method _get_esm_limits_from_aws (line 138) | def _get_esm_limits_from_aws(self) -> Dict[str, Dict]: method esm_get_config_tradeoff_tool (line 176) | async def esm_get_config_tradeoff_tool( method esm_validate_configs_tool (line 377) | async def esm_validate_configs_tool( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/sam/sam_build.py class SamBuildTool (line 22) | class SamBuildTool: method __init__ (line 25) | def __init__(self, mcp: FastMCP): method handle_sam_build (line 29) | async def handle_sam_build( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/sam/sam_deploy.py class SamDeployTool (line 23) | class SamDeployTool(BaseTool): method __init__ (line 26) | def __init__(self, mcp: FastMCP, allow_write: bool): method handle_sam_deploy (line 32) | async def handle_sam_deploy( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/sam/sam_init.py class SamInitTool (line 22) | class SamInitTool: method __init__ (line 25) | def __init__(self, mcp: FastMCP): method handle_sam_init (line 29) | async def handle_sam_init( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/sam/sam_local_invoke.py class SamLocalInvokeTool (line 27) | class SamLocalInvokeTool: method __init__ (line 30) | def __init__(self, mcp: FastMCP): method handle_sam_local_invoke (line 34) | async def handle_sam_local_invoke( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/sam/sam_logs.py class SamLogsTool (line 25) | class SamLogsTool(BaseTool): method __init__ (line 28) | def __init__(self, mcp: FastMCP, allow_sensitive_data_access): method handle_sam_logs (line 34) | async def handle_sam_logs( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/schemas/describe_schema.py class DescribeSchemaTool (line 24) | class DescribeSchemaTool: method __init__ (line 27) | def __init__(self, mcp: FastMCP, schemas_client: BaseClient): method describe_schema_impl (line 32) | async def describe_schema_impl( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/schemas/list_registries.py class ListRegistriesTool (line 24) | class ListRegistriesTool: method __init__ (line 27) | def __init__(self, mcp: FastMCP, schemas_client: BaseClient): method list_registries_impl (line 32) | async def list_registries_impl( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/schemas/search_schema.py class SearchSchemaTool (line 24) | class SearchSchemaTool: method __init__ (line 32) | def __init__(self, mcp: FastMCP, schemas_client: BaseClient): method search_schema_impl (line 37) | async def search_schema_impl( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/webapps/configure_domain.py class ConfigureDomainTool (line 25) | class ConfigureDomainTool(BaseTool): method __init__ (line 28) | def __init__(self, mcp: FastMCP, allow_write: bool): method configure_domain (line 34) | async def configure_domain( method _create_acm_certificate (line 123) | async def _create_acm_certificate(self, acm_client, domain_name: str) ... method _wait_for_certificate_validation (line 151) | async def _wait_for_certificate_validation(self, acm_client, certifica... method _find_existing_certificate (line 175) | async def _find_existing_certificate(self, acm_client, domain_name: st... method _update_cloudfront_distribution (line 210) | async def _update_cloudfront_distribution( method _create_route53_record (line 287) | async def _create_route53_record( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/webapps/deploy_webapp.py class DeployWebAppTool (line 40) | class DeployWebAppTool(BaseTool): method __init__ (line 43) | def __init__(self, mcp: FastMCP, allow_write): method deploy_webapp (line 49) | async def deploy_webapp( method check_dependencies_installed (line 221) | def check_dependencies_installed(built_artifacts_path: str, runtime: s... method check_destructive_deployment_change (line 267) | async def check_destructive_deployment_change( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/webapps/get_metrics.py class GetMetricsTool (line 26) | class GetMetricsTool(BaseTool): method __init__ (line 29) | def __init__(self, mcp: FastMCP): method get_metrics (line 33) | async def get_metrics( method get_unit_for_metric (line 425) | def get_unit_for_metric(label: str) -> str: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/webapps/update_webapp_frontend.py class UpdateFrontendTool (line 32) | class UpdateFrontendTool(BaseTool): method __init__ (line 35) | def __init__(self, mcp: FastMCP, allow_write: bool): method update_webapp_frontend_tool (line 40) | async def update_webapp_frontend_tool( method _get_all_files (line 270) | async def _get_all_files( method _upload_file_to_s3 (line 303) | async def _upload_file_to_s3( method _sync_directory_to_s3 (line 331) | async def _sync_directory_to_s3( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/webapps/utils/deploy_service.py function deploy_application (line 46) | async def deploy_application(request: DeployWebAppRequest) -> Dict[str, ... function generate_sam_template (line 225) | async def generate_sam_template( function build_and_deploy_application (line 252) | async def build_and_deploy_application( function get_stack_outputs (line 319) | async def get_stack_outputs(stack_name: str, region: Optional[str] = Non... FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/webapps/utils/frontend_uploader.py function upload_frontend_assets (line 29) | async def upload_frontend_assets( function upload_to_s3 (line 71) | async def upload_to_s3(source_path: str, bucket_name: str, region: Optio... FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/webapps/utils/startup_script_generator.py class EntryPointNotFoundError (line 27) | class EntryPointNotFoundError(Exception): method __init__ (line 30) | def __init__(self, entry_point: str, built_artifacts_path: str): function generate_startup_script (line 47) | async def generate_startup_script( function get_default_startup_script_name (line 111) | def get_default_startup_script_name(runtime: str) -> str: function generate_script_content (line 124) | def generate_script_content( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/tools/webapps/webapp_deployment_help.py class WebappDeploymentHelpTool (line 23) | class WebappDeploymentHelpTool: method __init__ (line 26) | def __init__(self, mcp: FastMCP): method webapp_deployment_help_tool (line 30) | async def webapp_deployment_help_tool( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/utils/aws_client_helper.py function get_aws_client (line 25) | def get_aws_client(service_name: str, region: Optional[str]) -> Any: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/utils/cloudformation.py function get_stack_info (line 20) | async def get_stack_info(stack_name: str, region: Optional[str] = None) ... function map_cloudformation_status (line 66) | def map_cloudformation_status(cf_status: str) -> str: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/utils/data_scrubber.py class DataScrubber (line 21) | class DataScrubber: method scrub_text (line 92) | def scrub_text(cls, text: Any) -> Any: method scrub_dict (line 130) | def scrub_dict(cls, data: Any, deep_copy: bool = True) -> Any: method _scrub_dict_recursive (line 153) | def _scrub_dict_recursive(cls, data: Any) -> Any: method _is_sensitive_field_name (line 192) | def _is_sensitive_field_name(cls, field_name: str) -> bool: method scrub_lambda_config (line 222) | def scrub_lambda_config(cls, config: Dict[str, Any]) -> Dict[str, Any]: method scrub_esm_config (line 256) | def scrub_esm_config(cls, config: Any) -> Dict[str, Any]: method _looks_like_sensitive_value (line 290) | def _looks_like_sensitive_value(cls, value: str) -> bool: method _has_high_entropy (line 314) | def _has_high_entropy(cls, value: str) -> bool: method scrub_aws_response (line 338) | def scrub_aws_response(cls, response: Dict[str, Any]) -> Dict[str, Any]: FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/utils/deployment_manager.py class DeploymentStatus (line 33) | class DeploymentStatus: function initialize_deployment_status (line 42) | async def initialize_deployment_status( function store_deployment_metadata (line 75) | async def store_deployment_metadata(project_name: str, metadata: Dict[st... function store_deployment_error (line 110) | async def store_deployment_error(project_name: str, error: Any) -> None: function get_deployment_status (line 128) | async def get_deployment_status(project_name: str) -> Dict[str, Any]: function list_deployments (line 204) | async def list_deployments( FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/utils/github.py function fetch_github_content (line 21) | def fetch_github_content(url: str, headers: Optional[Dict[str, str]] = N... FILE: src/aws-serverless-mcp-server/awslabs/aws_serverless_mcp_server/utils/process.py function run_command (line 19) | async def run_command(cmd_list, cwd=None): FILE: src/aws-serverless-mcp-server/tests/conftest.py function pytest_addoption (line 21) | def pytest_addoption(parser): function pytest_configure (line 31) | def pytest_configure(config): function pytest_collection_modifyitems (line 36) | def pytest_collection_modifyitems(config, items): function mock_context (line 46) | def mock_context(): function mock_schemas_client (line 58) | def mock_schemas_client(): function mock_env (line 64) | def mock_env(): FILE: src/aws-serverless-mcp-server/tests/test_cloudformation.py class TestCloudFormation (line 26) | class TestCloudFormation: method test_get_stack_info_success (line 30) | async def test_get_stack_info_success(self): method test_get_stack_info_with_region (line 76) | async def test_get_stack_info_with_region(self): method test_get_stack_info_not_found (line 114) | async def test_get_stack_info_not_found(self): method test_get_stack_info_empty_response (line 138) | async def test_get_stack_info_empty_response(self): method test_get_stack_info_other_exception (line 159) | async def test_get_stack_info_other_exception(self): method test_map_cloudformation_status (line 178) | def test_map_cloudformation_status(self): FILE: src/aws-serverless-mcp-server/tests/test_configure_domain.py class TestConfigureDomain (line 21) | class TestConfigureDomain: method test_configure_domain_with_existing_certificate_and_route53 (line 25) | async def test_configure_domain_with_existing_certificate_and_route53(... method test_configure_domain_with_new_certificate (line 212) | async def test_configure_domain_with_new_certificate(self): method test_configure_domain_cloudfront_error (line 361) | async def test_configure_domain_cloudfront_error(self): method test_configure_domain_allow_write_false (line 406) | async def test_configure_domain_allow_write_false(self): FILE: src/aws-serverless-mcp-server/tests/test_data_scrubber.py class TestDataScrubber (line 20) | class TestDataScrubber: method test_scrub_text_with_account_id (line 23) | def test_scrub_text_with_account_id(self): method test_scrub_text_with_access_key (line 30) | def test_scrub_text_with_access_key(self): method test_scrub_text_with_secret_key (line 37) | def test_scrub_text_with_secret_key(self): method test_scrub_text_with_session_token (line 44) | def test_scrub_text_with_session_token(self): method test_scrub_text_with_ip_address (line 52) | def test_scrub_text_with_ip_address(self): method test_scrub_text_with_email (line 59) | def test_scrub_text_with_email(self): method test_scrub_text_with_phone (line 66) | def test_scrub_text_with_phone(self): method test_scrub_text_with_url_credentials (line 73) | def test_scrub_text_with_url_credentials(self): method test_scrub_text_with_db_connection (line 81) | def test_scrub_text_with_db_connection(self): method test_scrub_text_with_jwt_token (line 88) | def test_scrub_text_with_jwt_token(self): method test_scrub_text_non_string_input (line 96) | def test_scrub_text_non_string_input(self): method test_scrub_dict_basic (line 102) | def test_scrub_dict_basic(self): method test_scrub_dict_deep_copy_default (line 114) | def test_scrub_dict_deep_copy_default(self): method test_scrub_dict_no_deep_copy (line 122) | def test_scrub_dict_no_deep_copy(self): method test_scrub_dict_non_dict_input (line 129) | def test_scrub_dict_non_dict_input(self): method test_scrub_dict_recursive_nested_dict (line 135) | def test_scrub_dict_recursive_nested_dict(self): method test_scrub_dict_recursive_list (line 146) | def test_scrub_dict_recursive_list(self): method test_scrub_dict_recursive_string (line 157) | def test_scrub_dict_recursive_string(self): method test_scrub_dict_recursive_other_types (line 164) | def test_scrub_dict_recursive_other_types(self): method test_is_sensitive_field_name_exact_matches (line 170) | def test_is_sensitive_field_name_exact_matches(self): method test_is_sensitive_field_name_partial_matches (line 177) | def test_is_sensitive_field_name_partial_matches(self): method test_is_sensitive_field_name_non_sensitive (line 184) | def test_is_sensitive_field_name_non_sensitive(self): method test_scrub_lambda_config_basic (line 190) | def test_scrub_lambda_config_basic(self): method test_scrub_lambda_config_sensitive_values (line 210) | def test_scrub_lambda_config_sensitive_values(self): method test_scrub_esm_config_basic (line 225) | def test_scrub_esm_config_basic(self): method test_scrub_esm_config_non_dict_input (line 235) | def test_scrub_esm_config_non_dict_input(self): method test_scrub_esm_config_sensitive_fields (line 243) | def test_scrub_esm_config_sensitive_fields(self): method test_looks_like_sensitive_value_short_values (line 256) | def test_looks_like_sensitive_value_short_values(self): method test_scrub_text_all_patterns (line 261) | def test_scrub_text_all_patterns(self): method test_scrub_dict_deep_copy_false (line 299) | def test_scrub_dict_deep_copy_false(self): method test_scrub_dict_recursive_nested_structures (line 313) | def test_scrub_dict_recursive_nested_structures(self): method test_looks_like_sensitive_value_pattern_matches (line 350) | def test_looks_like_sensitive_value_pattern_matches(self): method test_looks_like_sensitive_value_high_entropy (line 357) | def test_looks_like_sensitive_value_high_entropy(self): method test_looks_like_sensitive_value_low_entropy (line 363) | def test_looks_like_sensitive_value_low_entropy(self): method test_has_high_entropy_short_strings (line 368) | def test_has_high_entropy_short_strings(self): method test_has_high_entropy_high_entropy_string (line 373) | def test_has_high_entropy_high_entropy_string(self): method test_has_high_entropy_low_entropy_string (line 381) | def test_has_high_entropy_low_entropy_string(self): method test_scrub_aws_response_basic (line 386) | def test_scrub_aws_response_basic(self): method test_scrub_aws_response_no_metadata (line 411) | def test_scrub_aws_response_no_metadata(self): method test_scrub_aws_response_no_headers (line 417) | def test_scrub_aws_response_no_headers(self): method test_scrub_lambda_config_with_sensitive_field_name (line 424) | def test_scrub_lambda_config_with_sensitive_field_name(self): FILE: src/aws-serverless-mcp-server/tests/test_deploy_serverless_app_help.py class TestDeployServerlessAppHelp (line 24) | class TestDeployServerlessAppHelp: method test_deploy_serverless_app_help_event_driven (line 28) | async def test_deploy_serverless_app_help_event_driven(self): method test_deploy_serverless_app_help_backend (line 59) | async def test_deploy_serverless_app_help_backend(self): method test_deploy_serverless_app_help_fullstack (line 88) | async def test_deploy_serverless_app_help_fullstack(self): method test_deploy_serverless_app_help_step_structure (line 117) | async def test_deploy_serverless_app_help_step_structure(self): method test_deploy_serverless_app_help_application_types_coverage (line 145) | async def test_deploy_serverless_app_help_application_types_coverage(s... method test_deploy_serverless_app_help_content_consistency (line 174) | async def test_deploy_serverless_app_help_content_consistency(self): method test_deploy_serverless_app_help_sam_integration (line 202) | async def test_deploy_serverless_app_help_sam_integration(self): method test_deploy_serverless_app_help_lambda_web_adapter_mention (line 221) | async def test_deploy_serverless_app_help_lambda_web_adapter_mention(s... method test_deploy_serverless_app_help_iac_guidance (line 238) | async def test_deploy_serverless_app_help_iac_guidance(self): method test_deploy_serverless_app_help_deployment_artifacts (line 256) | async def test_deploy_serverless_app_help_deployment_artifacts(self): method test_deploy_serverless_app_help_step_order (line 274) | async def test_deploy_serverless_app_help_step_order(self): FILE: src/aws-serverless-mcp-server/tests/test_deploy_service.py class TestDeployService (line 36) | class TestDeployService: method test_deploy_application_backend_success (line 40) | async def test_deploy_application_backend_success(self): method test_deploy_application_fullstack_success (line 121) | async def test_deploy_application_fullstack_success(self): method test_deploy_application_startup_script_not_executable (line 195) | async def test_deploy_application_startup_script_not_executable(self): method test_deploy_application_startup_script_not_found (line 254) | async def test_deploy_application_startup_script_not_found(self): method test_deploy_application_generate_startup_script_success (line 298) | async def test_deploy_application_generate_startup_script_success(self): method test_deploy_application_generate_startup_script_entry_point_not_found (line 364) | async def test_deploy_application_generate_startup_script_entry_point_... method test_deploy_application_no_startup_script_config (line 411) | async def test_deploy_application_no_startup_script_config(self): method test_deploy_application_absolute_startup_script_path (line 454) | async def test_deploy_application_absolute_startup_script_path(self): method test_generate_sam_template_success (line 497) | async def test_generate_sam_template_success(self): method test_generate_sam_template_failure (line 526) | async def test_generate_sam_template_failure(self): method test_build_and_deploy_application_failure (line 547) | async def test_build_and_deploy_application_failure(self): method test_get_stack_outputs_success (line 573) | async def test_get_stack_outputs_success(self): method test_get_stack_outputs_no_stacks (line 600) | async def test_get_stack_outputs_no_stacks(self): method test_get_stack_outputs_client_error (line 613) | async def test_get_stack_outputs_client_error(self): method test_get_stack_outputs_no_region (line 629) | async def test_get_stack_outputs_no_region(self): method test_get_stack_outputs_exception (line 647) | async def test_get_stack_outputs_exception(self): method test_deploy_application_path_conversion (line 654) | async def test_deploy_application_path_conversion(self): FILE: src/aws-serverless-mcp-server/tests/test_deploy_webapp.py class TestDeployWebapp (line 28) | class TestDeployWebapp: method test_check_dependencies_installed_nodejs (line 31) | def test_check_dependencies_installed_nodejs(self): method test_check_dependencies_installed_python (line 47) | def test_check_dependencies_installed_python(self): method test_check_dependencies_installed_ruby (line 76) | def test_check_dependencies_installed_ruby(self): method test_check_dependencies_installed_other_runtime (line 90) | def test_check_dependencies_installed_other_runtime(self): method test_check_dependencies_installed_exception (line 98) | def test_check_dependencies_installed_exception(self): method test_check_destructive_deployment_change_no_existing_deployment (line 107) | async def test_check_destructive_deployment_change_no_existing_deploym... method test_check_destructive_deployment_change_same_type (line 116) | async def test_check_destructive_deployment_change_same_type(self): method test_check_destructive_deployment_change_destructive (line 130) | async def test_check_destructive_deployment_change_destructive(self): method test_check_destructive_deployment_change_non_destructive (line 146) | async def test_check_destructive_deployment_change_non_destructive(self): method test_check_destructive_deployment_change_exception (line 160) | async def test_check_destructive_deployment_change_exception(self): method test_deploy_webapp_destructive_change (line 169) | async def test_deploy_webapp_destructive_change(self): method test_deploy_webapp_missing_dependencies (line 213) | async def test_deploy_webapp_missing_dependencies(self): method test_deploy_webapp_success (line 269) | async def test_deploy_webapp_success(self): method test_deploy_webapp_exception (line 330) | async def test_deploy_webapp_exception(self): method test_deploy_webapp_fullstack_allow_write_false (line 376) | async def test_deploy_webapp_fullstack_allow_write_false(self): FILE: src/aws-serverless-mcp-server/tests/test_deployment_details.py class TestDeploymentDetails (line 24) | class TestDeploymentDetails: method test_handle_deployment_details_found (line 28) | async def test_handle_deployment_details_found(self): method test_handle_deployment_details_not_found (line 69) | async def test_handle_deployment_details_not_found(self): method test_handle_deployment_details_exception (line 90) | async def test_handle_deployment_details_exception(self): method test_handle_deployment_details_in_progress (line 112) | async def test_handle_deployment_details_in_progress(self): method test_handle_deployment_details_failed (line 148) | async def test_handle_deployment_details_failed(self): FILE: src/aws-serverless-mcp-server/tests/test_deployment_help.py class TestDeploymentHelp (line 23) | class TestDeploymentHelp: method test_deployment_help_general (line 27) | async def test_deployment_help_general(self): method test_deployment_help_backend (line 58) | async def test_deployment_help_backend(self): method test_deployment_help_frontend (line 96) | async def test_deployment_help_frontend(self): method test_deployment_help_fullstack (line 132) | async def test_deployment_help_fullstack(self): FILE: src/aws-serverless-mcp-server/tests/test_deployment_list.py class TestDeploymentList (line 22) | class TestDeploymentList: method test_handle_deployments_list_with_deployments (line 26) | async def test_handle_deployments_list_with_deployments(self): method test_handle_deployments_list_no_deployments (line 78) | async def test_handle_deployments_list_no_deployments(self): method test_handle_deployments_list_exception (line 102) | async def test_handle_deployments_list_exception(self): FILE: src/aws-serverless-mcp-server/tests/test_deployment_manager.py class TestDeploymentManagerComprehensive (line 32) | class TestDeploymentManagerComprehensive: method temp_deployment_dir (line 36) | def temp_deployment_dir(self): method test_initialize_deployment_status_with_region (line 46) | async def test_initialize_deployment_status_with_region(self, temp_dep... method test_initialize_deployment_status_without_region (line 64) | async def test_initialize_deployment_status_without_region(self, temp_... method test_initialize_deployment_status_file_creation_error (line 76) | async def test_initialize_deployment_status_file_creation_error(self, ... method test_store_deployment_metadata_new_file (line 92) | async def test_store_deployment_metadata_new_file(self, temp_deploymen... method test_store_deployment_metadata_existing_file (line 113) | async def test_store_deployment_metadata_existing_file(self, temp_depl... method test_store_deployment_metadata_write_error (line 134) | async def test_store_deployment_metadata_write_error(self, temp_deploy... method test_store_deployment_error_basic (line 157) | async def test_store_deployment_error_basic(self, temp_deployment_dir): method test_store_deployment_error_with_exception (line 173) | async def test_store_deployment_error_with_exception(self, temp_deploy... method test_get_deployment_status_existing_file (line 188) | async def test_get_deployment_status_existing_file(self, temp_deployme... method test_get_deployment_status_file_not_found (line 221) | async def test_get_deployment_status_file_not_found(self, temp_deploym... method test_get_deployment_status_invalid_json (line 230) | async def test_get_deployment_status_invalid_json(self, temp_deploymen... method test_get_deployment_status_cloudformation_error (line 243) | async def test_get_deployment_status_cloudformation_error(self, temp_d... method test_list_deployments_with_files (line 268) | async def test_list_deployments_with_files(self, temp_deployment_dir): method test_list_deployments_empty_directory (line 313) | async def test_list_deployments_empty_directory(self, temp_deployment_... method test_list_deployments_directory_not_exists (line 319) | async def test_list_deployments_directory_not_exists(self): method test_list_deployments_with_filters (line 329) | async def test_list_deployments_with_filters(self, temp_deployment_dir): method test_list_deployments_processing_error (line 375) | async def test_list_deployments_processing_error(self, temp_deployment... method test_deployment_status_constants (line 396) | def test_deployment_status_constants(self): FILE: src/aws-serverless-mcp-server/tests/test_esm_diagnosis.py class TestEsmDiagnosisTool (line 23) | class TestEsmDiagnosisTool: method esm_diagnosis_tool (line 27) | def esm_diagnosis_tool(self): method test_esm_kafka_troubleshoot_diagnosis (line 41) | async def test_esm_kafka_troubleshoot_diagnosis( method test_esm_kafka_troubleshoot_resolution (line 101) | async def test_esm_kafka_troubleshoot_resolution( method test_esm_kafka_troubleshoot_msk_specific_resolution (line 182) | async def test_esm_kafka_troubleshoot_msk_specific_resolution(self, es... method test_esm_kafka_troubleshoot_self_managed_specific_resolution (line 194) | async def test_esm_kafka_troubleshoot_self_managed_specific_resolution( method test_esm_kafka_troubleshoot_safety_requirements (line 209) | async def test_esm_kafka_troubleshoot_safety_requirements(self, esm_di... method test_esm_kafka_troubleshoot_authentication_failed_msk (line 224) | async def test_esm_kafka_troubleshoot_authentication_failed_msk(self, ... method test_esm_kafka_troubleshoot_authentication_failed_self_managed (line 236) | async def test_esm_kafka_troubleshoot_authentication_failed_self_managed( method test_esm_kafka_troubleshoot_on_failure_destination_unreachable (line 250) | async def test_esm_kafka_troubleshoot_on_failure_destination_unreachable( method test_esm_kafka_troubleshoot_invalid_issue_type (line 263) | async def test_esm_kafka_troubleshoot_invalid_issue_type(self, esm_dia... method test_esm_kafka_troubleshoot_template_generation_guidance (line 274) | async def test_esm_kafka_troubleshoot_template_generation_guidance(sel... method test_esm_kafka_troubleshoot_all_issue_types (line 285) | async def test_esm_kafka_troubleshoot_all_issue_types(self, esm_diagno... method test_esm_kafka_troubleshoot_all_kafka_types (line 309) | async def test_esm_kafka_troubleshoot_all_kafka_types(self, esm_diagno... method test_esm_kafka_troubleshoot_default_parameters (line 330) | async def test_esm_kafka_troubleshoot_default_parameters(self, esm_dia... method test_esm_kafka_troubleshoot_none_parameters (line 339) | async def test_esm_kafka_troubleshoot_none_parameters(self, esm_diagno... method test_esm_kafka_troubleshoot_auto_detect_branches (line 350) | async def test_esm_kafka_troubleshoot_auto_detect_branches(self, esm_d... method test_esm_kafka_troubleshoot_diagnosis_msk (line 416) | async def test_esm_kafka_troubleshoot_diagnosis_msk(self, esm_diagnosi... method test_esm_kafka_troubleshoot_diagnosis_self_managed (line 427) | async def test_esm_kafka_troubleshoot_diagnosis_self_managed(self, esm... method test_esm_kafka_troubleshoot_diagnosis_auto_detect (line 438) | async def test_esm_kafka_troubleshoot_diagnosis_auto_detect(self, esm_... method test_esm_kafka_troubleshoot_timeout_issues_msk (line 449) | async def test_esm_kafka_troubleshoot_timeout_issues_msk(self, esm_dia... method test_esm_kafka_troubleshoot_timeout_issues_self_managed (line 460) | async def test_esm_kafka_troubleshoot_timeout_issues_self_managed(self... method test_esm_kafka_troubleshoot_consumer_lag_msk (line 471) | async def test_esm_kafka_troubleshoot_consumer_lag_msk(self, esm_diagn... method test_esm_kafka_troubleshoot_consumer_lag_self_managed (line 482) | async def test_esm_kafka_troubleshoot_consumer_lag_self_managed(self, ... method test_esm_kafka_troubleshoot_permission_denied_msk (line 493) | async def test_esm_kafka_troubleshoot_permission_denied_msk(self, esm_... method test_esm_kafka_troubleshoot_permission_denied_self_managed (line 504) | async def test_esm_kafka_troubleshoot_permission_denied_self_managed(s... FILE: src/aws-serverless-mcp-server/tests/test_esm_guidance.py class TestEsmGuidanceTool (line 24) | class TestEsmGuidanceTool: method esm_guidance_tool (line 28) | def esm_guidance_tool(self): method test_esm_guidance_tool (line 47) | async def test_esm_guidance_tool( method test_esm_guidance_tool_networking_question (line 110) | async def test_esm_guidance_tool_networking_question(self, esm_guidanc... method test_esm_guidance_tool_sqs_networking (line 127) | async def test_esm_guidance_tool_sqs_networking(self, esm_guidance_tool): method test_esm_guidance_tool_policy_generation (line 142) | async def test_esm_guidance_tool_policy_generation(self, esm_guidance_... method test_esm_guidance_tool_sqs_policy_generation (line 161) | async def test_esm_guidance_tool_sqs_policy_generation(self, esm_guida... method test_esm_guidance_tool_security_group_generation (line 179) | async def test_esm_guidance_tool_security_group_generation(self, esm_g... method test_esm_guidance_tool_invalid_parameters (line 193) | async def test_esm_guidance_tool_invalid_parameters(self, esm_guidance... method test_esm_guidance_tool_sqs_concurrency_guidance (line 208) | async def test_esm_guidance_tool_sqs_concurrency_guidance(self, esm_gu... method test_esm_guidance_tool_invalid_event_source (line 223) | async def test_esm_guidance_tool_invalid_event_source(self, esm_guidan... method test_esm_guidance_tool_self_managed_kafka_policy (line 235) | async def test_esm_guidance_tool_self_managed_kafka_policy(self, esm_g... method test_esm_guidance_tool_deployment_precheck (line 252) | async def test_esm_guidance_tool_deployment_precheck(self, esm_guidanc... method test_esm_guidance_tool_all_networking_event_sources (line 269) | async def test_esm_guidance_tool_all_networking_event_sources(self, es... method test_esm_guidance_tool_troubleshooting_all_sources (line 289) | async def test_esm_guidance_tool_troubleshooting_all_sources(self, esm... method test_esm_guidance_tool_policy_validation_errors (line 309) | async def test_esm_guidance_tool_policy_validation_errors(self, esm_gu... method test_esm_guidance_tool_troubleshooting_type (line 356) | async def test_esm_guidance_tool_troubleshooting_type(self, esm_guidan... method test_esm_guidance_tool_networking_type (line 366) | async def test_esm_guidance_tool_networking_type(self, esm_guidance_to... method test_esm_guidance_tool_unspecified_event_source (line 379) | async def test_esm_guidance_tool_unspecified_event_source(self, esm_gu... method test_esm_guidance_tool_kafka_setup_guidance (line 389) | async def test_esm_guidance_tool_kafka_setup_guidance(self, esm_guidan... method test_esm_guidance_tool_networking_guidance (line 401) | async def test_esm_guidance_tool_networking_guidance(self, esm_guidanc... method test_esm_guidance_tool_troubleshooting_guidance (line 414) | async def test_esm_guidance_tool_troubleshooting_guidance(self, esm_gu... FILE: src/aws-serverless-mcp-server/tests/test_esm_recommend.py class TestEsmRecommendTool (line 21) | class TestEsmRecommendTool: method mock_mcp (line 25) | def mock_mcp(self): method mock_context (line 32) | def mock_context(self): method esm_tool (line 39) | def esm_tool(self, mock_mcp): method test_esm_optimize_tool (line 63) | async def test_esm_optimize_tool( method test_esm_optimize_tool_invalid_action (line 115) | async def test_esm_optimize_tool_invalid_action(self, esm_tool, mock_c... method test_esm_optimize_tool_missing_required_params (line 125) | async def test_esm_optimize_tool_missing_required_params(self, esm_too... method test_esm_optimize_tool_kafka_throughput_analysis (line 150) | async def test_esm_optimize_tool_kafka_throughput_analysis(self, esm_t... method test_esm_optimize_tool_event_source_restrictions (line 163) | async def test_esm_optimize_tool_event_source_restrictions(self, esm_t... method test_esm_optimize_tool_sqs_specific_validation (line 178) | async def test_esm_optimize_tool_sqs_specific_validation(self, esm_too... method test_esm_optimize_tool_template_generation_with_deployment_guidance (line 196) | async def test_esm_optimize_tool_template_generation_with_deployment_g... method test_esm_optimize_tool_validate_missing_params (line 223) | async def test_esm_optimize_tool_validate_missing_params(self, esm_too... method test_esm_optimize_tool_aws_client_error_handling (line 249) | async def test_esm_optimize_tool_aws_client_error_handling(self, esm_t... method test_esm_optimize_tool_template_generation_with_scripts (line 259) | async def test_esm_optimize_tool_template_generation_with_scripts( method test_esm_optimize_tool_validation_action (line 309) | async def test_esm_optimize_tool_validation_action(self, esm_tool, moc... method test_esm_optimize_tool_generate_template_action (line 322) | async def test_esm_optimize_tool_generate_template_action(self, esm_to... method test_esm_optimize_tool_invalid_action_with_params (line 335) | async def test_esm_optimize_tool_invalid_action_with_params(self, esm_... method test_esm_optimize_tool_validate_action_missing_event_source (line 348) | async def test_esm_optimize_tool_validate_action_missing_event_source( method test_esm_optimize_tool_validate_action_missing_configs (line 361) | async def test_esm_optimize_tool_validate_action_missing_configs(self,... method test_esm_optimize_tool_generate_template_with_field_info (line 373) | async def test_esm_optimize_tool_generate_template_with_field_info( FILE: src/aws-serverless-mcp-server/tests/test_frontend_uploader.py class TestFrontendUploader (line 30) | class TestFrontendUploader: method test_upload_frontend_assets_no_frontend_config (line 34) | async def test_upload_frontend_assets_no_frontend_config(self): method test_upload_frontend_assets_no_built_assets_path (line 52) | async def test_upload_frontend_assets_no_built_assets_path(self): method test_upload_frontend_assets_no_bucket_name (line 78) | async def test_upload_frontend_assets_no_bucket_name(self): method test_upload_frontend_assets_path_not_exists (line 104) | async def test_upload_frontend_assets_path_not_exists(self): method test_upload_frontend_assets_success (line 131) | async def test_upload_frontend_assets_success(self): method test_upload_frontend_assets_upload_failure (line 163) | async def test_upload_frontend_assets_upload_failure(self): method test_upload_to_s3_success (line 196) | async def test_upload_to_s3_success(self): method test_upload_to_s3_no_region (line 240) | async def test_upload_to_s3_no_region(self): method test_upload_to_s3_client_error (line 264) | async def test_upload_to_s3_client_error(self): method test_upload_to_s3_botocore_error (line 287) | async def test_upload_to_s3_botocore_error(self): method test_upload_to_s3_empty_directory (line 308) | async def test_upload_to_s3_empty_directory(self): FILE: src/aws-serverless-mcp-server/tests/test_get_iac_guidance.py class TestIaCToolInfo (line 26) | class TestIaCToolInfo: method test_to_dict (line 29) | def test_to_dict(self): class TestComparisonTable (line 52) | class TestComparisonTable: method test_to_dict (line 55) | def test_to_dict(self): class TestToolSpecificGuidance (line 70) | class TestToolSpecificGuidance: method test_to_dict (line 73) | def test_to_dict(self): class TestGetIaCGuidance (line 94) | class TestGetIaCGuidance: method test_get_iac_guidance_basic (line 98) | async def test_get_iac_guidance_basic(self): method test_get_iac_guidance_with_examples (line 130) | async def test_get_iac_guidance_with_examples(self): method test_get_iac_guidance_without_examples (line 144) | async def test_get_iac_guidance_without_examples(self): method test_get_iac_guidance_specific_tool_sam (line 157) | async def test_get_iac_guidance_specific_tool_sam(self): method test_get_iac_guidance_specific_tool_cdk (line 170) | async def test_get_iac_guidance_specific_tool_cdk(self): method test_get_iac_guidance_specific_tool_cloudformation (line 183) | async def test_get_iac_guidance_specific_tool_cloudformation(self): FILE: src/aws-serverless-mcp-server/tests/test_get_lambda_event_schemas.py class TestGetLambdaEventSchemas (line 24) | class TestGetLambdaEventSchemas: method test_get_lambda_event_schemas_api_gateway (line 28) | async def test_get_lambda_event_schemas_api_gateway(self): method test_get_lambda_event_schemas_s3 (line 68) | async def test_get_lambda_event_schemas_s3(self): method test_get_lambda_event_schemas_dynamodb (line 115) | async def test_get_lambda_event_schemas_dynamodb(self): method test_get_lambda_event_schemas_fetch_error (line 170) | async def test_get_lambda_event_schemas_fetch_error(self): method test_get_lambda_event_schemas_unsupported_event_source (line 192) | async def test_get_lambda_event_schemas_unsupported_event_source(self): method test_get_lambda_event_schemas_unsupported_runtime (line 203) | async def test_get_lambda_event_schemas_unsupported_runtime(self): FILE: src/aws-serverless-mcp-server/tests/test_get_lambda_guidance.py class TestGetLambdaGuidance (line 23) | class TestGetLambdaGuidance: method test_get_lambda_guidance_with_examples (line 27) | async def test_get_lambda_guidance_with_examples(self): method test_get_lambda_guidance_without_examples (line 55) | async def test_get_lambda_guidance_without_examples(self): method test_get_lambda_guidance_default_examples (line 81) | async def test_get_lambda_guidance_default_examples(self): method test_get_lambda_guidance_various_use_cases (line 105) | async def test_get_lambda_guidance_various_use_cases(self): method test_get_lambda_guidance_content_structure (line 139) | async def test_get_lambda_guidance_content_structure(self): method test_get_lambda_guidance_empty_use_case (line 174) | async def test_get_lambda_guidance_empty_use_case(self): method test_get_lambda_guidance_unknown_use_case (line 194) | async def test_get_lambda_guidance_unknown_use_case(self): FILE: src/aws-serverless-mcp-server/tests/test_get_metrics.py class TestGetMetrics (line 24) | class TestGetMetrics: method test_get_unit_for_metric (line 27) | def test_get_unit_for_metric(self): method test_get_metrics_success (line 36) | async def test_get_metrics_success(self): method test_get_metrics_with_optional_params (line 114) | async def test_get_metrics_with_optional_params(self): method test_get_metrics_no_valid_metrics (line 163) | async def test_get_metrics_no_valid_metrics(self): method test_get_metrics_boto3_exception (line 186) | async def test_get_metrics_boto3_exception(self): method test_get_metrics_invalid_time_format (line 216) | async def test_get_metrics_invalid_time_format(self): FILE: src/aws-serverless-mcp-server/tests/test_get_serverless_templates.py class TestGetServerlessTemplates (line 23) | class TestGetServerlessTemplates: method test_get_serverless_templates_with_runtime (line 27) | async def test_get_serverless_templates_with_runtime(self): method test_get_serverless_templates_without_runtime (line 76) | async def test_get_serverless_templates_without_runtime(self): method test_get_serverless_templates_various_types (line 115) | async def test_get_serverless_templates_various_types(self): method test_get_serverless_templates_content_structure (line 158) | async def test_get_serverless_templates_content_structure(self): method test_get_serverless_templates_no_matches (line 207) | async def test_get_serverless_templates_no_matches(self): method test_get_serverless_templates_github_error (line 231) | async def test_get_serverless_templates_github_error(self): method test_get_serverless_templates_caching (line 252) | async def test_get_serverless_templates_caching(self): method test_get_serverless_templates_limit (line 278) | async def test_get_serverless_templates_limit(self): method test_get_serverless_templates_search_filtering (line 325) | async def test_get_serverless_templates_search_filtering(self): FILE: src/aws-serverless-mcp-server/tests/test_github.py class TestGithub (line 23) | class TestGithub: method test_fetch_github_content_success (line 26) | def test_fetch_github_content_success(self): method test_fetch_github_content_with_headers (line 49) | def test_fetch_github_content_with_headers(self): method test_fetch_github_content_request_exception (line 73) | def test_fetch_github_content_request_exception(self): method test_fetch_github_content_json_decode_error (line 84) | def test_fetch_github_content_json_decode_error(self): method test_fetch_github_content_http_error (line 98) | def test_fetch_github_content_http_error(self): FILE: src/aws-serverless-mcp-server/tests/test_iam_policies.py class TestSecurePolicyGenerator (line 21) | class TestSecurePolicyGenerator: method test_validate_aws_parameters_valid_inputs (line 24) | def test_validate_aws_parameters_valid_inputs(self): method test_validate_aws_parameters_invalid_region (line 31) | def test_validate_aws_parameters_invalid_region(self): method test_validate_aws_parameters_invalid_account (line 39) | def test_validate_aws_parameters_invalid_account(self): method test_validate_aws_parameters_both_invalid (line 47) | def test_validate_aws_parameters_both_invalid(self): method test_validate_aws_parameters_edge_cases (line 56) | def test_validate_aws_parameters_edge_cases(self): method test_generate_kafka_esm_policy_basic (line 66) | def test_generate_kafka_esm_policy_basic(self): method test_generate_kafka_esm_policy_with_patterns (line 81) | def test_generate_kafka_esm_policy_with_patterns(self): method test_generate_kafka_esm_policy_different_partitions (line 99) | def test_generate_kafka_esm_policy_different_partitions(self): method test_generate_sqs_esm_policy_basic (line 127) | def test_generate_sqs_esm_policy_basic(self): method test_generate_sqs_esm_policy_different_partitions (line 141) | def test_generate_sqs_esm_policy_different_partitions(self): method test_generate_kinesis_esm_policy_basic (line 154) | def test_generate_kinesis_esm_policy_basic(self): method test_generate_kinesis_esm_policy_different_partitions (line 168) | def test_generate_kinesis_esm_policy_different_partitions(self): method test_generate_dynamodb_esm_policy_basic (line 181) | def test_generate_dynamodb_esm_policy_basic(self): method test_generate_dynamodb_esm_policy_different_partitions (line 195) | def test_generate_dynamodb_esm_policy_different_partitions(self): method test_policy_generation_with_special_characters (line 208) | def test_policy_generation_with_special_characters(self): method test_policy_generation_resource_arns (line 222) | def test_policy_generation_resource_arns(self): method test_policy_statements_structure (line 239) | def test_policy_statements_structure(self): method test_policy_generation_minimal_permissions (line 255) | def test_policy_generation_minimal_permissions(self): method test_secure_policy_generator_basic_functionality (line 271) | def test_secure_policy_generator_basic_functionality(self): method test_generate_kafka_esm_policy_with_validation_errors (line 276) | def test_generate_kafka_esm_policy_with_validation_errors(self): method test_generate_sqs_esm_policy_with_validation_errors (line 287) | def test_generate_sqs_esm_policy_with_validation_errors(self): method test_generate_kinesis_esm_policy_with_validation_errors (line 297) | def test_generate_kinesis_esm_policy_with_validation_errors(self): method test_generate_dynamodb_esm_policy_with_validation_errors (line 307) | def test_generate_dynamodb_esm_policy_with_validation_errors(self): FILE: src/aws-serverless-mcp-server/tests/test_models.py class TestBackendConfiguration (line 23) | class TestBackendConfiguration: method test_valid_backend_configuration (line 26) | def test_valid_backend_configuration(self): method test_backend_configuration_with_optional_fields (line 54) | def test_backend_configuration_with_optional_fields(self): class TestFrontendConfiguration (line 88) | class TestFrontendConfiguration: method test_valid_frontend_configuration (line 91) | def test_valid_frontend_configuration(self): method test_frontend_configuration_with_optional_fields (line 108) | def test_frontend_configuration_with_optional_fields(self): class TestDeployWebAppRequest (line 133) | class TestDeployWebAppRequest: method test_valid_backend_deployment_request (line 136) | def test_valid_backend_deployment_request(self): method test_valid_frontend_deployment_request (line 169) | def test_valid_frontend_deployment_request(self): method test_valid_fullstack_deployment_request (line 194) | def test_valid_fullstack_deployment_request(self): FILE: src/aws-serverless-mcp-server/tests/test_process.py class TestProcess (line 22) | class TestProcess: method test_run_command_success (line 26) | async def test_run_command_success(self): method test_run_command_with_cwd (line 52) | async def test_run_command_with_cwd(self): method test_run_command_failure (line 78) | async def test_run_command_failure(self): method test_run_command_complex_command (line 96) | async def test_run_command_complex_command(self): FILE: src/aws-serverless-mcp-server/tests/test_sam_build.py class TestSamBuild (line 24) | class TestSamBuild: method test_sam_build_success (line 28) | async def test_sam_build_success(self): method test_sam_build_with_optional_params (line 75) | async def test_sam_build_with_optional_params(self): method test_sam_build_failure (line 132) | async def test_sam_build_failure(self): method test_sam_build_general_exception (line 166) | async def test_sam_build_general_exception(self): method test_sam_build_with_parallel_default (line 200) | async def test_sam_build_with_parallel_default(self): method test_sam_build_with_parallel_disabled (line 244) | async def test_sam_build_with_parallel_disabled(self): FILE: src/aws-serverless-mcp-server/tests/test_sam_deploy.py class TestSamDeploy (line 24) | class TestSamDeploy: method test_sam_deploy_success (line 28) | async def test_sam_deploy_success(self): method test_sam_deploy_with_optional_params (line 77) | async def test_sam_deploy_with_optional_params(self): method test_sam_deploy_failure (line 142) | async def test_sam_deploy_failure(self): method test_sam_deploy_general_exception (line 176) | async def test_sam_deploy_general_exception(self): method test_sam_deploy_allow_write_false (line 210) | async def test_sam_deploy_allow_write_false(self): FILE: src/aws-serverless-mcp-server/tests/test_sam_init.py class TestSamInit (line 24) | class TestSamInit: method test_sam_init_success (line 28) | async def test_sam_init_success(self): method test_sam_init_with_optional_params (line 86) | async def test_sam_init_with_optional_params(self): method test_sam_init_failure (line 139) | async def test_sam_init_failure(self): method test_sam_init_general_exception (line 176) | async def test_sam_init_general_exception(self): FILE: src/aws-serverless-mcp-server/tests/test_sam_local_invoke.py class TestSamLocalInvoke (line 23) | class TestSamLocalInvoke: method test_sam_local_invoke_success (line 27) | async def test_sam_local_invoke_success(self): method test_sam_local_invoke_with_event_file (line 74) | async def test_sam_local_invoke_with_event_file(self): method test_sam_local_invoke_with_event_data (line 116) | async def test_sam_local_invoke_with_event_data(self): method test_sam_local_invoke_with_optional_params (line 180) | async def test_sam_local_invoke_with_optional_params(self): method test_sam_local_invoke_non_json_output (line 235) | async def test_sam_local_invoke_non_json_output(self): method test_sam_local_invoke_failure (line 270) | async def test_sam_local_invoke_failure(self): FILE: src/aws-serverless-mcp-server/tests/test_sam_logs.py class TestSamLogs (line 22) | class TestSamLogs: method test_sam_logs_success (line 26) | async def test_sam_logs_success(self): method test_sam_logs_with_optional_params (line 69) | async def test_sam_logs_with_optional_params(self): method test_sam_logs_failure (line 120) | async def test_sam_logs_failure(self): method test_sam_logs_general_exception (line 151) | async def test_sam_logs_general_exception(self): FILE: src/aws-serverless-mcp-server/tests/test_schemas.py class TestListRegistries (line 25) | class TestListRegistries: method test_list_registries_basic (line 29) | async def test_list_registries_basic(self, mock_context, mock_schemas_... method test_list_registries_with_params (line 49) | async def test_list_registries_with_params(self, mock_context, mock_sc... method test_error_handling (line 63) | async def test_error_handling(self, mock_context, mock_schemas_client): class TestSearchSchema (line 73) | class TestSearchSchema: method test_search_schema_basic (line 77) | async def test_search_schema_basic(self, mock_context, mock_schemas_cl... method test_search_schema_with_params (line 100) | async def test_search_schema_with_params(self, mock_context, mock_sche... method test_error_handling (line 114) | async def test_error_handling(self, mock_context, mock_schemas_client): class TestDescribeSchema (line 124) | class TestDescribeSchema: method test_describe_schema_basic (line 128) | async def test_describe_schema_basic(self, mock_context, mock_schemas_... method test_describe_schema_with_version (line 155) | async def test_describe_schema_with_version(self, mock_context, mock_s... method test_error_handling (line 168) | async def test_error_handling(self, mock_context, mock_schemas_client): FILE: src/aws-serverless-mcp-server/tests/test_secure_esm_guidance.py class TestSecureEsmGuidanceTool (line 23) | class TestSecureEsmGuidanceTool: method secure_esm_guidance_tool (line 27) | def secure_esm_guidance_tool(self): method test_secure_esm_policy_tools_with_different_partitions (line 33) | async def test_secure_esm_policy_tools_with_different_partitions( method test_secure_esm_policy_tools_with_consumer_group_patterns (line 69) | async def test_secure_esm_policy_tools_with_consumer_group_patterns( method test_secure_esm_policy_tools_parameter_validation (line 90) | async def test_secure_esm_policy_tools_parameter_validation(self, secu... method test_secure_esm_guidance_basic_functionality (line 147) | async def test_secure_esm_guidance_basic_functionality( method test_secure_esm_sqs_policy_tool (line 156) | async def test_secure_esm_sqs_policy_tool(self, secure_esm_guidance_to... method test_secure_esm_kinesis_policy_tool (line 170) | async def test_secure_esm_kinesis_policy_tool(self, secure_esm_guidanc... method test_secure_esm_dynamodb_policy_tool (line 184) | async def test_secure_esm_dynamodb_policy_tool(self, secure_esm_guidan... method test_secure_esm_msk_policy_tool (line 198) | async def test_secure_esm_msk_policy_tool(self, secure_esm_guidance_to... method test_secure_esm_msk_policy_tool_validation_error (line 213) | async def test_secure_esm_msk_policy_tool_validation_error( method test_secure_esm_sqs_policy_tool_validation_error (line 231) | async def test_secure_esm_sqs_policy_tool_validation_error( method test_secure_esm_kinesis_policy_tool_validation_error (line 248) | async def test_secure_esm_kinesis_policy_tool_validation_error( method test_secure_esm_dynamodb_policy_tool_validation_error (line 265) | async def test_secure_esm_dynamodb_policy_tool_validation_error( FILE: src/aws-serverless-mcp-server/tests/test_server.py class TestServer (line 23) | class TestServer: method test_mcp_initialization (line 26) | def test_mcp_initialization(self): method test_resource_registration (line 38) | def test_resource_registration(self): method test_main_success (line 82) | def test_main_success( method test_main_failure (line 176) | def test_main_failure(self, mock_mcp, mock_arg_parser, mock_logger, mo... method test_main_with_different_args (line 206) | def test_main_with_different_args( method test_main_as_script (line 235) | def test_main_as_script(self): method test_streaming_infrastructure_setup_resource (line 255) | def test_streaming_infrastructure_setup_resource(self): method test_natural_language_detection_resource (line 285) | def test_natural_language_detection_resource(self): method test_template_list_resource (line 311) | def test_template_list_resource(self): method test_template_details_resource (line 324) | def test_template_details_resource(self): method test_deployment_list_resource (line 340) | async def test_deployment_list_resource(self, mock_handle): method test_deployment_details_resource (line 353) | async def test_deployment_details_resource(self, mock_handle): method test_esm_tools_initialization (line 373) | def test_esm_tools_initialization( method test_aws_execution_env_setting (line 408) | def test_aws_execution_env_setting(self): FILE: src/aws-serverless-mcp-server/tests/test_startup_script_generator.py class TestStartupScriptGenerator (line 28) | class TestStartupScriptGenerator: method test_entry_point_not_found_error (line 31) | def test_entry_point_not_found_error(self): method test_get_default_startup_script_name (line 46) | def test_get_default_startup_script_name(self): method test_generate_script_content_nodejs (line 55) | def test_generate_script_content_nodejs(self): method test_generate_script_content_nodejs_with_env (line 68) | def test_generate_script_content_nodejs_with_env(self): method test_generate_script_content_python (line 85) | def test_generate_script_content_python(self): method test_generate_script_content_python_with_env (line 98) | def test_generate_script_content_python_with_env(self): method test_generate_script_content_java_jar (line 115) | def test_generate_script_content_java_jar(self): method test_generate_script_content_java_class (line 128) | def test_generate_script_content_java_class(self): method test_generate_script_content_dotnet (line 141) | def test_generate_script_content_dotnet(self): method test_generate_script_content_go (line 154) | def test_generate_script_content_go(self): method test_generate_script_content_ruby (line 167) | def test_generate_script_content_ruby(self): method test_generate_script_content_unknown_runtime (line 180) | def test_generate_script_content_unknown_runtime(self): method test_generate_startup_script_success (line 194) | async def test_generate_startup_script_success(self): method test_generate_startup_script_custom_name (line 229) | async def test_generate_startup_script_custom_name(self): method test_generate_startup_script_with_env_vars (line 254) | async def test_generate_startup_script_with_env_vars(self): method test_generate_startup_script_entry_point_not_found (line 283) | async def test_generate_startup_script_entry_point_not_found(self): method test_generate_startup_script_entry_point_not_found_empty_dir (line 301) | async def test_generate_startup_script_entry_point_not_found_empty_dir... method test_generate_startup_script_entry_point_not_found_listdir_error (line 315) | async def test_generate_startup_script_entry_point_not_found_listdir_e... method test_generate_startup_script_chmod_permissions (line 329) | async def test_generate_startup_script_chmod_permissions(self): method test_generate_script_content_environment_variable_escaping (line 359) | def test_generate_script_content_environment_variable_escaping(self): method test_generate_startup_script_file_write_error (line 379) | async def test_generate_startup_script_file_write_error(self): method test_generate_startup_script_chmod_error (line 393) | async def test_generate_startup_script_chmod_error(self): FILE: src/aws-serverless-mcp-server/tests/test_template_details.py class TestTemplateDetails (line 21) | class TestTemplateDetails: method test_handle_template_details_valid_templates (line 25) | def test_handle_template_details_valid_templates(self, template_name): method test_handle_template_details_invalid_template (line 52) | def test_handle_template_details_invalid_template(self): method test_backend_template_details (line 73) | def test_backend_template_details(self): method test_frontend_template_details (line 87) | def test_frontend_template_details(self): method test_fullstack_template_details (line 101) | def test_fullstack_template_details(self): FILE: src/aws-serverless-mcp-server/tests/test_template_list.py class TestTemplateList (line 20) | class TestTemplateList: method test_handle_template_list (line 23) | def test_handle_template_list(self): FILE: src/aws-serverless-mcp-server/tests/test_template_registry.py class TestTemplateRegistry (line 29) | class TestTemplateRegistry: method test_template_class_initialization (line 32) | def test_template_class_initialization(self): method test_template_class_initialization_no_framework (line 46) | def test_template_class_initialization_no_framework(self): method test_get_templates_path_from_env (line 58) | def test_get_templates_path_from_env(self): method test_get_templates_path_default_locations (line 67) | def test_get_templates_path_default_locations(self, mock_glob, mock_is... method test_get_templates_path_no_valid_paths (line 87) | def test_get_templates_path_no_valid_paths(self, mock_glob, mock_isdir... method test_get_template_for_deployment_with_framework (line 100) | async def test_get_template_for_deployment_with_framework(self): method test_get_template_for_deployment_default_template (line 119) | async def test_get_template_for_deployment_default_template(self): method test_get_template_for_deployment_generic_template (line 138) | async def test_get_template_for_deployment_generic_template(self): method test_get_template_for_deployment_no_template (line 157) | async def test_get_template_for_deployment_no_template(self): method test_discover_templates (line 172) | async def test_discover_templates(self): method test_discover_templates_empty_directory (line 217) | async def test_discover_templates_empty_directory(self): method test_discover_templates_directory_not_exists (line 237) | async def test_discover_templates_directory_not_exists(self): method test_discover_templates_error (line 253) | async def test_discover_templates_error(self): FILE: src/aws-serverless-mcp-server/tests/test_template_renderer.py class TestTemplateRenderer (line 34) | class TestTemplateRenderer: method test_get_jinja_filters (line 37) | def test_get_jinja_filters(self): method test_get_jinja_tests (line 61) | def test_get_jinja_tests(self): method test_render_template_backend (line 84) | async def test_render_template_backend(self): method test_render_template_frontend (line 154) | async def test_render_template_frontend(self): method test_render_template_fullstack (line 218) | async def test_render_template_fullstack(self): method test_render_template_no_framework (line 300) | async def test_render_template_no_framework(self): method test_render_template_error (line 363) | async def test_render_template_error(self): FILE: src/aws-serverless-mcp-server/tests/test_update_webapp_frontend.py class TestUpdateWebappFrontend (line 24) | class TestUpdateWebappFrontend: method test_get_all_files (line 28) | async def test_get_all_files(self): method test_get_all_files_empty_directory (line 61) | async def test_get_all_files_empty_directory(self): method test_get_all_files_with_exception (line 68) | async def test_get_all_files_with_exception(self): method test_upload_file_to_s3 (line 75) | async def test_upload_file_to_s3(self): method test_upload_file_to_s3_with_nested_path (line 96) | async def test_upload_file_to_s3_with_nested_path(self): method test_upload_file_to_s3_with_exception (line 117) | async def test_upload_file_to_s3_with_exception(self): method test_sync_directory_to_s3 (line 132) | async def test_sync_directory_to_s3(self): method test_sync_directory_to_s3_empty_s3 (line 170) | async def test_sync_directory_to_s3_empty_s3(self): method test_sync_directory_to_s3_pagination (line 195) | async def test_sync_directory_to_s3_pagination(self): method test_update_webapp_frontend_built_assets_not_found (line 238) | async def test_update_webapp_frontend_built_assets_not_found(self): method test_update_webapp_frontend_stack_not_found (line 255) | async def test_update_webapp_frontend_stack_not_found(self): method test_update_webapp_frontend_no_website_bucket (line 286) | async def test_update_webapp_frontend_no_website_bucket(self): method test_update_webapp_frontend_success_no_cloudfront (line 317) | async def test_update_webapp_frontend_success_no_cloudfront(self): method test_update_webapp_frontend_success_with_cloudfront (line 360) | async def test_update_webapp_frontend_success_with_cloudfront(self): method test_update_webapp_frontend_success_with_cloudfront_url (line 424) | async def test_update_webapp_frontend_success_with_cloudfront_url(self): method test_update_webapp_frontend_sync_error (line 477) | async def test_update_webapp_frontend_sync_error(self): method test_update_webapp_frontend_relative_path (line 516) | async def test_update_webapp_frontend_relative_path(self): method test_update_webapp_frontend_no_region (line 560) | async def test_update_webapp_frontend_no_region(self): method test_update_webapp_frontend_allow_write_false (line 603) | async def test_update_webapp_frontend_allow_write_false(self): FILE: src/aws-support-mcp-server/awslabs/aws_support_mcp_server/client.py class SupportClient (line 35) | class SupportClient: method __init__ (line 50) | def __init__(self, region_name: str = DEFAULT_REGION, profile_name: Op... method _run_in_executor (line 116) | async def _run_in_executor(self, func: Callable[..., Any], *args: Any,... method _validate_email_addresses (line 134) | def _validate_email_addresses(self, cc_email_addresses: List[str]) -> ... method _validate_issue_type (line 152) | def _validate_issue_type(self, issue_type: str) -> None: method _validate_language (line 170) | def _validate_language(self, language: str) -> None: method create_case (line 184) | async def create_case( method describe_cases (line 256) | async def describe_cases( method resolve_case (line 327) | async def resolve_case(self, case_id: str) -> Dict[str, Any]: method add_communication_to_case (line 359) | async def add_communication_to_case( method describe_communications (line 417) | async def describe_communications( method describe_services (line 477) | async def describe_services( method describe_severity_levels (line 516) | async def describe_severity_levels(self, language: str = 'en') -> Dict... method describe_supported_languages (line 547) | async def describe_supported_languages(self) -> Dict[str, Any]: method describe_create_case_options (line 573) | async def describe_create_case_options( method add_attachments_to_set (line 617) | async def add_attachments_to_set( method _retry_with_backoff (line 681) | async def _retry_with_backoff( FILE: src/aws-support-mcp-server/awslabs/aws_support_mcp_server/consts.py class CaseStatus (line 28) | class CaseStatus(str, Enum): class IssueType (line 41) | class IssueType(str, Enum): class ErrorCode (line 50) | class ErrorCode(str, Enum): FILE: src/aws-support-mcp-server/awslabs/aws_support_mcp_server/debug_helper.py class DiagnosticsTracker (line 23) | class DiagnosticsTracker: method __init__ (line 26) | def __init__(self): method enabled (line 35) | def enabled(self) -> bool: method uptime (line 40) | def uptime(self) -> float: method enable (line 44) | def enable(self): method disable (line 50) | def disable(self): method reset (line 56) | def reset(self): method track_performance (line 63) | def track_performance(self, function_name: str, duration: float): method track_error (line 84) | def track_error(self, error_type: str): method track_request (line 94) | def track_request(self, request_type: str): method get_diagnostics_report (line 104) | def get_diagnostics_report(self) -> Dict[str, Any]: class AsyncCallable (line 143) | class AsyncCallable(Protocol[P, R]): method __call__ (line 146) | async def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R: function track_performance (line 151) | def track_performance(func: AsyncCallable[P, R]) -> AsyncCallable[P, R]: function track_errors (line 170) | def track_errors(func: AsyncCallable[P, R]) -> AsyncCallable[P, R]: function track_request (line 189) | def track_request(request_type: str) -> Callable[[AsyncCallable[P, R]], ... function get_diagnostics_report (line 205) | def get_diagnostics_report() -> Dict[str, Any]: FILE: src/aws-support-mcp-server/awslabs/aws_support_mcp_server/errors.py function handle_client_error (line 24) | async def handle_client_error(ctx: Any, e: ClientError, operation: str) ... function handle_validation_error (line 53) | async def handle_validation_error(ctx: Any, e: ValidationError, operatio... function handle_general_error (line 80) | async def handle_general_error(ctx: Any, e: Exception, operation: str) -... function format_error_message (line 106) | def format_error_message(error_code: str, error_message: str, operation:... function create_error_response (line 120) | def create_error_response( function get_error_status_code (line 146) | def get_error_status_code(error: Union[ClientError, ValidationError, Exc... FILE: src/aws-support-mcp-server/awslabs/aws_support_mcp_server/formatters.py function format_case (line 32) | def format_case(case_data: Dict[str, Any], include_communications: bool ... function format_cases (line 93) | def format_cases( function format_communications (line 108) | def format_communications(communications_data: Dict[str, Any]) -> Dict[s... function format_services (line 145) | def format_services(services_data: List[Dict[str, Any]]) -> Dict[str, Any]: function format_severity_levels (line 173) | def format_severity_levels(severity_levels_data: List[Dict[str, Any]]) -... function format_json_response (line 197) | def format_json_response(data: Any, indent: Optional[int] = 2) -> str: function format_markdown_case_summary (line 210) | def format_markdown_case_summary(case: Dict[str, Any]) -> str: function format_markdown_services (line 250) | def format_markdown_services(services: Dict[str, Any]) -> str: function format_markdown_severity_levels (line 277) | def format_markdown_severity_levels(severity_levels: Dict[str, Any]) -> ... FILE: src/aws-support-mcp-server/awslabs/aws_support_mcp_server/models.py class AttachmentDetails (line 46) | class AttachmentDetails(BaseModel): class Config (line 54) | class Config: method model_dump (line 59) | def model_dump(self, **kwargs) -> Dict[str, JsonValue]: # type: ignore class Communication (line 67) | class Communication(BaseModel): class Config (line 88) | class Config: method model_dump (line 93) | def model_dump(self, **kwargs) -> Dict[str, JsonValue]: # type: ignore class RecentCommunications (line 109) | class RecentCommunications(BaseModel): class Config (line 120) | class Config: method model_dump (line 125) | def model_dump(self, **kwargs) -> Dict[str, JsonValue]: # type: ignore class Category (line 137) | class Category(BaseModel): class Config (line 143) | class Config: method model_dump (line 148) | def model_dump(self, **kwargs) -> Dict[str, JsonValue]: # type: ignore class Service (line 153) | class Service(BaseModel): class Config (line 162) | class Config: method model_dump (line 167) | def model_dump(self, **kwargs) -> Dict[str, JsonValue]: # type: ignore class SeverityLevel (line 176) | class SeverityLevel(BaseModel): class Config (line 182) | class Config: method model_dump (line 187) | def model_dump(self, **kwargs) -> Dict[str, JsonValue]: # type: ignore class SupportCase (line 192) | class SupportCase(BaseModel): class Config (line 224) | class Config: method model_dump (line 229) | def model_dump(self, **kwargs) -> Dict[str, JsonValue]: # type: ignore class CreateCaseRequest (line 259) | class CreateCaseRequest(BaseModel): class Config (line 295) | class Config: method to_api_params (line 300) | def to_api_params(self) -> Dict[str, JsonValue]: class DescribeCasesRequest (line 320) | class DescribeCasesRequest(BaseModel): class Config (line 355) | class Config: method to_api_params (line 360) | def to_api_params(self) -> Dict[str, JsonValue]: class AddCommunicationRequest (line 384) | class AddCommunicationRequest(BaseModel): class Config (line 405) | class Config: method to_api_params (line 410) | def to_api_params(self) -> Dict[str, JsonValue]: class ResolveCaseRequest (line 425) | class ResolveCaseRequest(BaseModel): class Config (line 432) | class Config: method to_api_params (line 437) | def to_api_params(self) -> Dict[str, Any]: class CreateCaseResponse (line 445) | class CreateCaseResponse(BaseModel): class Config (line 454) | class Config: class DescribeCasesResponse (line 460) | class DescribeCasesResponse(BaseModel): class Config (line 468) | class Config: method model_dump (line 473) | def model_dump(self, **kwargs) -> Dict[str, JsonValue]: # type: ignore class AddCommunicationResponse (line 485) | class AddCommunicationResponse(BaseModel): class Config (line 494) | class Config: class ResolveCaseResponse (line 500) | class ResolveCaseResponse(BaseModel): class Config (line 514) | class Config: class DescribeCreateCaseOptionsRequest (line 520) | class DescribeCreateCaseOptionsRequest(BaseModel): class Config (line 526) | class Config: method to_api_params (line 531) | def to_api_params(self) -> Dict[str, JsonValue]: class CreateCaseCategory (line 536) | class CreateCaseCategory(BaseModel): class Config (line 542) | class Config: method model_dump (line 547) | def model_dump(self, **kwargs) -> Dict[str, JsonValue]: # type: ignore class DescribeCreateCaseOptionsResponse (line 552) | class DescribeCreateCaseOptionsResponse(BaseModel): class Config (line 568) | class Config: method model_dump (line 573) | def model_dump(self, **kwargs) -> Dict[str, JsonValue]: # type: ignore class AttachmentData (line 581) | class AttachmentData(BaseModel): class Config (line 589) | class Config: method model_dump (line 594) | def model_dump(self, **kwargs) -> Dict[str, JsonValue]: # type: ignore class AddAttachmentsToSetRequest (line 599) | class AddAttachmentsToSetRequest(BaseModel): class Config (line 615) | class Config: method to_api_params (line 620) | def to_api_params(self) -> Dict[str, JsonValue]: class AddAttachmentsToSetResponse (line 635) | class AddAttachmentsToSetResponse(BaseModel): class Config (line 651) | class Config: class DescribeSupportedLanguagesRequest (line 657) | class DescribeSupportedLanguagesRequest(BaseModel): class Config (line 664) | class Config: method to_api_params (line 669) | def to_api_params(self) -> Dict[str, JsonValue]: class SupportedLanguage (line 674) | class SupportedLanguage(BaseModel): class DescribeSupportedLanguagesResponse (line 684) | class DescribeSupportedLanguagesResponse(BaseModel): class Config (line 693) | class Config: FILE: src/aws-support-mcp-server/awslabs/aws_support_mcp_server/server.py function diagnostics_resource (line 221) | async def diagnostics_resource() -> str: function _create_support_case_logic (line 258) | async def _create_support_case_logic( function create_support_case (line 306) | async def create_support_case( function _describe_support_cases_logic (line 370) | async def _describe_support_cases_logic( function describe_support_cases (line 424) | async def describe_support_cases( function describe_severity_levels (line 488) | async def describe_severity_levels( function _add_communication_to_case_logic (line 535) | async def _add_communication_to_case_logic( function add_communication_to_case (line 573) | async def add_communication_to_case( function _resolve_support_case_logic (line 603) | async def _resolve_support_case_logic( function resolve_support_case (line 634) | async def resolve_support_case( function describe_services (line 656) | async def describe_services( function main (line 728) | def main(): FILE: src/aws-support-mcp-server/tests/conftests.py function support_case_data (line 21) | def support_case_data() -> Dict[str, Any]: function minimal_support_case_data (line 51) | def minimal_support_case_data() -> Dict[str, Any]: function edge_case_support_case_data (line 66) | def edge_case_support_case_data() -> Dict[str, Any]: function multiple_support_cases_data (line 96) | def multiple_support_cases_data() -> List[Dict[str, Any]]: function communication_data (line 125) | def communication_data() -> Dict[str, Any]: function minimal_communication_data (line 137) | def minimal_communication_data() -> Dict[str, Any]: function communications_response_data (line 148) | def communications_response_data() -> Dict[str, Any]: function empty_communications_response_data (line 170) | def empty_communications_response_data() -> Dict[str, Any]: function service_data (line 176) | def service_data() -> Dict[str, Any]: function minimal_service_data (line 189) | def minimal_service_data() -> Dict[str, Any]: function services_response_data (line 199) | def services_response_data() -> Dict[str, Any]: function empty_services_response_data (line 221) | def empty_services_response_data() -> Dict[str, Any]: function category_data (line 227) | def category_data() -> Dict[str, Any]: function severity_level_data (line 233) | def severity_level_data() -> Dict[str, Any]: function minimal_severity_level_data (line 239) | def minimal_severity_level_data() -> Dict[str, Any]: function severity_levels_response_data (line 245) | def severity_levels_response_data() -> Dict[str, Any]: function empty_severity_levels_response_data (line 259) | def empty_severity_levels_response_data() -> Dict[str, Any]: function create_case_request_data (line 265) | def create_case_request_data() -> Dict[str, Any]: function minimal_create_case_request_data (line 281) | def minimal_create_case_request_data() -> Dict[str, Any]: function create_case_response_data (line 293) | def create_case_response_data() -> Dict[str, Any]: function describe_cases_request_data (line 303) | def describe_cases_request_data() -> Dict[str, Any]: function minimal_describe_cases_request_data (line 319) | def minimal_describe_cases_request_data() -> Dict[str, Any]: function describe_cases_response_data (line 325) | def describe_cases_response_data() -> Dict[str, Any]: function empty_describe_cases_response_data (line 357) | def empty_describe_cases_response_data() -> Dict[str, Any]: function add_communication_request_data (line 363) | def add_communication_request_data() -> Dict[str, Any]: function minimal_add_communication_request_data (line 374) | def minimal_add_communication_request_data() -> Dict[str, Any]: function add_communication_response_data (line 383) | def add_communication_response_data() -> Dict[str, Any]: function resolve_case_request_data (line 393) | def resolve_case_request_data() -> Dict[str, Any]: function resolve_case_response_data (line 399) | def resolve_case_response_data() -> Dict[str, Any]: FILE: src/aws-support-mcp-server/tests/test_aws_support_mcp_server.py function support_case_data (line 63) | def support_case_data() -> Dict[str, Any]: function minimal_support_case_data (line 93) | def minimal_support_case_data() -> Dict[str, Any]: function edge_case_support_case_data (line 108) | def edge_case_support_case_data() -> Dict[str, Any]: function multiple_support_cases_data (line 138) | def multiple_support_cases_data() -> List[Dict[str, Any]]: function communication_data (line 167) | def communication_data() -> Dict[str, Any]: function minimal_communication_data (line 179) | def minimal_communication_data() -> Dict[str, Any]: function communications_response_data (line 190) | def communications_response_data() -> Dict[str, Any]: function empty_communications_response_data (line 212) | def empty_communications_response_data() -> Dict[str, Any]: function service_data (line 221) | def service_data() -> Dict[str, Any]: function minimal_service_data (line 234) | def minimal_service_data() -> Dict[str, Any]: function services_response_data (line 244) | def services_response_data() -> Dict[str, Any]: function empty_services_response_data (line 266) | def empty_services_response_data() -> Dict[str, Any]: function category_data (line 272) | def category_data() -> Dict[str, Any]: function severity_level_data (line 278) | def severity_level_data() -> Dict[str, Any]: function minimal_severity_level_data (line 284) | def minimal_severity_level_data() -> Dict[str, Any]: function severity_levels_response_data (line 290) | def severity_levels_response_data() -> Dict[str, Any]: function empty_severity_levels_response_data (line 304) | def empty_severity_levels_response_data() -> Dict[str, Any]: function supported_languages_data (line 310) | def supported_languages_data() -> List[Dict[str, Any]]: function create_case_request_data (line 321) | def create_case_request_data() -> Dict[str, Any]: function minimal_create_case_request_data (line 337) | def minimal_create_case_request_data() -> Dict[str, Any]: function create_case_response_data (line 349) | def create_case_response_data() -> Dict[str, Any]: function describe_cases_request_data (line 359) | def describe_cases_request_data() -> Dict[str, Any]: function minimal_describe_cases_request_data (line 375) | def minimal_describe_cases_request_data() -> Dict[str, Any]: function describe_cases_response_data (line 381) | def describe_cases_response_data() -> Dict[str, Any]: function empty_describe_cases_response_data (line 413) | def empty_describe_cases_response_data() -> Dict[str, Any]: function add_communication_request_data (line 419) | def add_communication_request_data() -> Dict[str, Any]: function minimal_add_communication_request_data (line 430) | def minimal_add_communication_request_data() -> Dict[str, Any]: function add_communication_response_data (line 439) | def add_communication_response_data() -> Dict[str, Any]: function resolve_case_request_data (line 449) | def resolve_case_request_data() -> Dict[str, Any]: function resolve_case_response_data (line 455) | def resolve_case_response_data() -> Dict[str, Any]: class TestSupportClient (line 468) | class TestSupportClient: method test_initialization_default_parameters (line 472) | def test_initialization_default_parameters(self, mock_session): method test_initialization_custom_parameters (line 491) | def test_initialization_custom_parameters(self, mock_session): method test_initialization_subscription_required_error (line 516) | def test_initialization_subscription_required_error(self, mock_session): method test_initialization_other_client_error (line 532) | def test_initialization_other_client_error(self, mock_session): method test_run_in_executor (line 547) | async def test_run_in_executor(self, mock_get_event_loop, mock_session): method test_initialization_with_no_credentials_warning (line 570) | def test_initialization_with_no_credentials_warning(self, mock_session): method test_initialization_with_credential_error_warning (line 582) | def test_initialization_with_credential_error_warning(self, mock_sessi... method test_initialization_with_unexpected_error_logging (line 594) | def test_initialization_with_unexpected_error_logging(self, mock_sessi... method test_initialization_business_subscription_required_error (line 609) | def test_initialization_business_subscription_required_error(self, moc... method test_initialization_unexpected_error (line 628) | def test_initialization_unexpected_error(self, mock_session): method test_describe_communications_case_not_found (line 641) | async def test_describe_communications_case_not_found( method test_describe_communications_unexpected_error (line 662) | async def test_describe_communications_unexpected_error( method test_describe_supported_languages_client_error (line 682) | async def test_describe_supported_languages_client_error( method test_describe_create_case_options_client_error (line 705) | async def test_describe_create_case_options_client_error( method test_add_attachments_to_set_client_error (line 728) | async def test_add_attachments_to_set_client_error(self, mock_run_in_e... method test_retry_with_backoff_max_retries_exceeded (line 750) | async def test_retry_with_backoff_max_retries_exceeded( method test_retry_with_backoff_non_retryable_error (line 775) | async def test_retry_with_backoff_non_retryable_error( method test_retry_with_backoff_unexpected_error (line 800) | async def test_retry_with_backoff_unexpected_error(self, mock_run_in_e... method test_retry_with_backoff_too_many_requests (line 822) | async def test_retry_with_backoff_too_many_requests(self, mock_run_in_... method test_initialization_credential_handling (line 846) | def test_initialization_credential_handling(self, mock_session): method test_initialization_no_credentials (line 863) | def test_initialization_no_credentials(self, mock_session): method test_initialization_credential_error (line 878) | def test_initialization_credential_error(self, mock_session): method test_describe_communications (line 894) | async def test_describe_communications(self, mock_run_in_executor, moc... method test_describe_supported_languages (line 931) | async def test_describe_supported_languages(self, mock_run_in_executor... method test_describe_create_case_options (line 952) | async def test_describe_create_case_options(self, mock_run_in_executor... method test_retry_with_backoff_success (line 977) | async def test_retry_with_backoff_success(self, mock_run_in_executor, ... method test_describe_services (line 1004) | async def test_describe_services(self, mock_run_in_executor, mock_sess... method test_describe_severity_levels (line 1033) | async def test_describe_severity_levels(self, mock_run_in_executor, mo... method test_add_attachments_to_set (line 1056) | async def test_add_attachments_to_set(self, mock_run_in_executor, mock... method test_retry_with_backoff (line 1084) | async def test_retry_with_backoff(self, mock_run_in_executor, mock_ses... method test_create_case (line 1111) | async def test_create_case(self, mock_run_in_executor, mock_session): method test_create_case_minimal (line 1140) | async def test_create_case_minimal(self, mock_run_in_executor, mock_se... method test_create_case_client_error (line 1165) | async def test_create_case_client_error(self, mock_run_in_executor, mo... method test_describe_cases (line 1191) | async def test_describe_cases(self, mock_run_in_executor, mock_session): method test_describe_cases_minimal (line 1220) | async def test_describe_cases_minimal(self, mock_run_in_executor, mock... method test_describe_cases_case_not_found (line 1239) | async def test_describe_cases_case_not_found(self, mock_run_in_executo... method test_resolve_case (line 1259) | async def test_resolve_case(self, mock_run_in_executor, mock_session): method test_resolve_case_case_not_found (line 1281) | async def test_resolve_case_case_not_found(self, mock_run_in_executor,... method test_add_communication_to_case (line 1301) | async def test_add_communication_to_case(self, mock_run_in_executor, m... method test_validate_email_addresses_valid (line 1324) | def test_validate_email_addresses_valid(self, mock_session): method test_validate_email_addresses_invalid (line 1354) | def test_validate_email_addresses_invalid(self, mock_session): method test_validate_email_addresses_empty_input (line 1384) | def test_validate_email_addresses_empty_input(self, mock_session): method test_validate_email_addresses_mixed_case (line 1398) | def test_validate_email_addresses_mixed_case(self, mock_session): method test_add_communication_to_case_minimal (line 1411) | async def test_add_communication_to_case_minimal(self, mock_run_in_exe... method test_validate_issue_type_valid (line 1431) | def test_validate_issue_type_valid(self, mock_session): method test_validate_issue_type_invalid (line 1449) | def test_validate_issue_type_invalid(self, mock_session): method test_validate_language_valid (line 1474) | def test_validate_language_valid(self, mock_session): method test_validate_language_invalid (line 1489) | def test_validate_language_invalid(self, mock_session): method test_add_communication_to_case_case_not_found (line 1516) | async def test_add_communication_to_case_case_not_found( class TestErrorHandling (line 1542) | class TestErrorHandling: method mock_context (line 1555) | def mock_context(self): method test_handle_client_error_access_denied (line 1561) | async def test_handle_client_error_access_denied(self, mock_context): method test_handle_client_error_case_not_found (line 1573) | async def test_handle_client_error_case_not_found(self, mock_context): method test_handle_client_error_throttling (line 1585) | async def test_handle_client_error_throttling(self, mock_context): method test_handle_general_error_with_custom_exception (line 1597) | async def test_handle_general_error_with_custom_exception(self, mock_c... method test_create_error_response_with_details (line 1613) | def test_create_error_response_with_details(self): method test_handle_client_error_subscription_required (line 1628) | async def test_handle_client_error_subscription_required(self, mock_co... method test_handle_client_error_unauthorized (line 1644) | async def test_handle_client_error_unauthorized(self): method test_handle_client_error_other (line 1661) | async def test_handle_client_error_other(self): method test_handle_validation_error (line 1679) | async def test_handle_validation_error(self): method test_handle_general_error (line 1721) | async def test_handle_general_error(self): method test_handle_general_error_with_internal_server_error (line 1741) | async def test_handle_general_error_with_internal_server_error(self): class TestFormatCases (line 1763) | class TestFormatCases: method test_format_multiple_cases (line 1766) | def test_format_multiple_cases(self, multiple_support_cases_data): method test_format_empty_cases_list (line 1777) | def test_format_empty_cases_list(self): class TestFormatCommunications (line 1783) | class TestFormatCommunications: method test_format_communications_with_attachments (line 1786) | def test_format_communications_with_attachments(self, communications_r... method test_format_empty_communications (line 1800) | def test_format_empty_communications(self, empty_communications_respon... class TestFormatServices (line 1809) | class TestFormatServices: method test_format_services_with_categories (line 1812) | def test_format_services_with_categories(self, services_response_data): method test_format_empty_services (line 1824) | def test_format_empty_services(self, empty_services_response_data): class TestFormatSeverityLevels (line 1830) | class TestFormatSeverityLevels: method test_format_severity_levels (line 1833) | def test_format_severity_levels(self, severity_levels_response_data): method test_format_empty_severity_levels (line 1841) | def test_format_empty_severity_levels(self, empty_severity_levels_resp... class TestFormatMarkdown (line 1847) | class TestFormatMarkdown: method test_format_markdown_case_summary (line 1850) | def test_format_markdown_case_summary(self, support_case_data): method test_format_markdown_services (line 1865) | def test_format_markdown_services(self, services_response_data): method test_format_markdown_severity_levels (line 1884) | def test_format_markdown_severity_levels(self, severity_levels_respons... method test_format_json_response (line 1897) | def test_format_json_response(self): class TestFormatCase (line 1907) | class TestFormatCase: method test_valid_case_formatting (line 1910) | def test_valid_case_formatting(self, support_case_data): method test_minimal_case_formatting (line 1929) | def test_minimal_case_formatting(self, minimal_support_case_data): method test_edge_case_formatting (line 1941) | def test_edge_case_formatting(self, edge_case_support_case_data): function test_create_case (line 1953) | async def test_create_case(mock_support_client): function test_describe_cases (line 1983) | async def test_describe_cases(mock_support_client): function test_add_communication_to_case (line 2041) | async def test_add_communication_to_case(mock_support_client): function test_resolve_case (line 2066) | async def test_resolve_case(mock_support_client): function test_error_handling (line 2088) | async def test_error_handling(): function test_create_case_validation_error (line 2096) | async def test_create_case_validation_error(mock_support_client): function test_create_case_client_error (line 2126) | async def test_create_case_client_error(mock_support_client): function test_create_case_general_error (line 2151) | async def test_create_case_general_error(mock_support_client): function test_describe_cases_validation_error (line 2173) | async def test_describe_cases_validation_error(mock_support_client): function test_describe_cases_client_error (line 2191) | async def test_describe_cases_client_error(mock_support_client): function test_describe_cases_general_error (line 2209) | async def test_describe_cases_general_error(mock_support_client): function test_describe_cases_markdown_format (line 2224) | async def test_describe_cases_markdown_format(mock_support_client): function test_add_communication_validation_error (line 2253) | async def test_add_communication_validation_error(mock_support_client): function test_add_communication_client_error (line 2278) | async def test_add_communication_client_error(mock_support_client): function test_add_communication_general_error (line 2298) | async def test_add_communication_general_error(mock_support_client): function test_resolve_case_validation_error (line 2317) | async def test_resolve_case_validation_error(mock_support_client): function test_resolve_case_client_error (line 2342) | async def test_resolve_case_client_error(mock_support_client): function test_resolve_case_general_error (line 2360) | async def test_resolve_case_general_error(mock_support_client): class TestDiagnosticsTracker (line 2375) | class TestDiagnosticsTracker: method setup_method (line 2378) | def setup_method(self): method test_initial_state (line 2384) | def test_initial_state(self): method test_enable_disable (line 2391) | def test_enable_disable(self): method test_reset (line 2403) | def test_reset(self): method test_track_performance (line 2416) | def test_track_performance(self): method test_track_performance_disabled (line 2430) | def test_track_performance_disabled(self): method test_track_error (line 2436) | def test_track_error(self): method test_track_error_disabled (line 2447) | def test_track_error_disabled(self): method test_track_request (line 2453) | def test_track_request(self): method test_track_request_disabled (line 2464) | def test_track_request_disabled(self): method test_uptime (line 2470) | def test_uptime(self): method test_performance_tracking_edge_cases (line 2477) | def test_performance_tracking_edge_cases(self, mock_time): class TestServer (line 2495) | class TestServer: method test_logging_configuration (line 2499) | def test_logging_configuration(self, mock_logger): method test_main_with_log_file_and_directory_creation (line 2520) | def test_main_with_log_file_and_directory_creation( method test_main_without_debug_flag (line 2542) | def test_main_without_debug_flag(self, mock_logger): method test_main_debug_enables_diagnostics (line 2559) | def test_main_debug_enables_diagnostics(self, mock_diagnostics, mock_l... FILE: src/aws-support-mcp-server/tests/test_models.py class TestBaseModels (line 69) | class TestBaseModels: method test_attachment_details (line 72) | def test_attachment_details(self): method test_communication (line 88) | def test_communication(self): method test_recent_communications (line 138) | def test_recent_communications(self): method test_category (line 156) | def test_category(self): method test_service (line 172) | def test_service(self): method test_severity_level (line 195) | def test_severity_level(self): method test_support_case (line 211) | def test_support_case(self): class TestRequestModels (line 251) | class TestRequestModels: method test_create_case_request (line 254) | def test_create_case_request(self): method test_describe_cases_request (line 308) | def test_describe_cases_request(self): method test_add_communication_request (line 392) | def test_add_communication_request(self): method test_resolve_case_request (line 431) | def test_resolve_case_request(self): class TestResponseModels (line 450) | class TestResponseModels: method test_create_case_response (line 453) | def test_create_case_response(self): method test_describe_cases_response (line 474) | def test_describe_cases_response(self): method test_add_communication_response (line 494) | def test_add_communication_response(self): method test_resolve_case_response (line 515) | def test_resolve_case_response(self): class TestEnums (line 549) | class TestEnums: method test_issue_type (line 552) | def test_issue_type(self): method test_case_status (line 562) | def test_case_status(self): class TestAttachmentModels (line 577) | class TestAttachmentModels: method test_attachment_data (line 580) | def test_attachment_data(self): method test_add_attachments_to_set_request (line 605) | def test_add_attachments_to_set_request(self): method test_add_attachments_to_set_response (line 636) | def test_add_attachments_to_set_response(self): class TestLanguageModels (line 670) | class TestLanguageModels: method test_supported_language (line 673) | def test_supported_language(self): method test_describe_supported_languages_request (line 698) | def test_describe_supported_languages_request(self): method test_describe_supported_languages_response (line 703) | def test_describe_supported_languages_response(self): FILE: src/bedrock-kb-retrieval-mcp-server/awslabs/bedrock_kb_retrieval_mcp_server/knowledgebases/clients.py function get_bedrock_agent_runtime_client (line 32) | def get_bedrock_agent_runtime_client( function get_bedrock_agent_client (line 54) | def get_bedrock_agent_client( FILE: src/bedrock-kb-retrieval-mcp-server/awslabs/bedrock_kb_retrieval_mcp_server/knowledgebases/discovery.py function discover_knowledge_bases (line 28) | async def discover_knowledge_bases( FILE: src/bedrock-kb-retrieval-mcp-server/awslabs/bedrock_kb_retrieval_mcp_server/knowledgebases/retrieval.py function query_knowledge_base (line 29) | async def query_knowledge_base( FILE: src/bedrock-kb-retrieval-mcp-server/awslabs/bedrock_kb_retrieval_mcp_server/models.py class DataSource (line 17) | class DataSource(TypedDict): class KnowledgeBase (line 24) | class KnowledgeBase(TypedDict): FILE: src/bedrock-kb-retrieval-mcp-server/awslabs/bedrock_kb_retrieval_mcp_server/server.py function list_knowledge_bases_tool (line 91) | async def list_knowledge_bases_tool() -> str: function query_knowledge_bases_tool (line 132) | async def query_knowledge_bases_tool( function main (line 194) | def main(): FILE: src/bedrock-kb-retrieval-mcp-server/tests/conftest.py function mock_bedrock_agent_runtime_client (line 22) | def mock_bedrock_agent_runtime_client(): function mock_bedrock_agent_client (line 48) | def mock_bedrock_agent_client(): function mock_boto3 (line 115) | def mock_boto3(): FILE: src/bedrock-kb-retrieval-mcp-server/tests/test_clients.py class TestTypeDefinitions (line 24) | class TestTypeDefinitions: method test_type_definitions (line 27) | def test_type_definitions(self): method test_type_checking_branch (line 40) | def test_type_checking_branch(self): class TestGetBedrockAgentRuntimeClient (line 80) | class TestGetBedrockAgentRuntimeClient: method test_get_bedrock_agent_runtime_client_default (line 83) | def test_get_bedrock_agent_runtime_client_default(self, mock_boto3): method test_get_bedrock_agent_runtime_client_with_region (line 95) | def test_get_bedrock_agent_runtime_client_with_region(self, mock_boto3): method test_get_bedrock_agent_runtime_client_with_profile (line 107) | def test_get_bedrock_agent_runtime_client_with_profile(self, mock_boto3): method test_get_bedrock_agent_runtime_client_with_region_and_profile (line 122) | def test_get_bedrock_agent_runtime_client_with_region_and_profile(self... method test_get_bedrock_agent_runtime_client_with_none_region (line 139) | def test_get_bedrock_agent_runtime_client_with_none_region(self, mock_... class TestGetBedrockAgentClient (line 152) | class TestGetBedrockAgentClient: method test_get_bedrock_agent_client_default (line 155) | def test_get_bedrock_agent_client_default(self, mock_boto3): method test_get_bedrock_agent_client_with_region (line 167) | def test_get_bedrock_agent_client_with_region(self, mock_boto3): method test_get_bedrock_agent_client_with_profile (line 179) | def test_get_bedrock_agent_client_with_profile(self, mock_boto3): method test_get_bedrock_agent_client_with_region_and_profile (line 194) | def test_get_bedrock_agent_client_with_region_and_profile(self, mock_b... method test_get_bedrock_agent_client_with_none_region (line 209) | def test_get_bedrock_agent_client_with_none_region(self, mock_boto3): FILE: src/bedrock-kb-retrieval-mcp-server/tests/test_discovery.py class TestDiscoverKnowledgeBases (line 24) | class TestDiscoverKnowledgeBases: method test_discover_knowledge_bases (line 28) | async def test_discover_knowledge_bases(self, mock_bedrock_agent_client): method test_discover_knowledge_bases_with_custom_tag (line 64) | async def test_discover_knowledge_bases_with_custom_tag(self, mock_bed... method test_discover_knowledge_bases_no_matching_tags (line 92) | async def test_discover_knowledge_bases_no_matching_tags(self, mock_be... method test_discover_knowledge_bases_no_knowledge_bases (line 120) | async def test_discover_knowledge_bases_no_knowledge_bases(self, mock_... method test_discover_knowledge_bases_no_data_sources (line 150) | async def test_discover_knowledge_bases_no_data_sources(self, mock_bed... FILE: src/bedrock-kb-retrieval-mcp-server/tests/test_env_config.py function create_mock_query_knowledge_base (line 23) | def create_mock_query_knowledge_base(return_value='test result'): class TestEnvironmentVariableConfig (line 32) | class TestEnvironmentVariableConfig: method setup_method (line 35) | def setup_method(self): method teardown_method (line 40) | def teardown_method(self): method test_default_reranking_config_is_off (line 47) | def test_default_reranking_config_is_off(self, mock_agent_client, mock... method test_reranking_enabled_with_true_value (line 59) | def test_reranking_enabled_with_true_value(self, mock_agent_client, mo... method test_reranking_enabled_with_yes_value (line 74) | def test_reranking_enabled_with_yes_value(self, mock_agent_client, moc... method test_reranking_enabled_with_1_value (line 89) | def test_reranking_enabled_with_1_value(self, mock_agent_client, mock_... method test_reranking_enabled_with_on_value (line 104) | def test_reranking_enabled_with_on_value(self, mock_agent_client, mock... method test_reranking_disabled_with_invalid_value (line 119) | def test_reranking_disabled_with_invalid_value(self, mock_agent_client... method test_environment_affects_tool_default (line 133) | async def test_environment_affects_tool_default(self): method test_explicit_parameter_overrides_environment (line 192) | async def test_explicit_parameter_overrides_environment(self): FILE: src/bedrock-kb-retrieval-mcp-server/tests/test_models.py class TestDataSource (line 24) | class TestDataSource: method test_data_source_creation (line 27) | def test_data_source_creation(self): class TestKnowledgeBase (line 35) | class TestKnowledgeBase: method test_knowledge_base_creation (line 38) | def test_knowledge_base_creation(self): class TestKnowledgeBaseMapping (line 60) | class TestKnowledgeBaseMapping: method test_knowledge_base_mapping (line 63) | def test_knowledge_base_mapping(self): FILE: src/bedrock-kb-retrieval-mcp-server/tests/test_retrieval.py class TestQueryKnowledgeBase (line 22) | class TestQueryKnowledgeBase: method test_query_knowledge_base_default (line 26) | async def test_query_knowledge_base_default(self, mock_bedrock_agent_r... method test_query_knowledge_base_with_custom_parameters (line 66) | async def test_query_knowledge_base_with_custom_parameters( method test_query_knowledge_base_without_reranking (line 113) | async def test_query_knowledge_base_without_reranking(self, mock_bedro... method test_query_knowledge_base_with_unsupported_region (line 141) | async def test_query_knowledge_base_with_unsupported_region( method test_query_knowledge_base_with_image_content (line 164) | async def test_query_knowledge_base_with_image_content( FILE: src/bedrock-kb-retrieval-mcp-server/tests/test_server.py class TestMCPServer (line 29) | class TestMCPServer: method test_mcp_initialization (line 32) | def test_mcp_initialization(self): class TestListKnowledgeBasesTool (line 42) | class TestListKnowledgeBasesTool: method test_list_knowledge_bases_tool (line 47) | async def test_list_knowledge_bases_tool(self, mock_discover_knowledge... class TestQueryKnowledgeBasesTool (line 97) | class TestQueryKnowledgeBasesTool: method test_query_knowledge_bases_tool (line 102) | async def test_query_knowledge_bases_tool(self, mock_query_knowledge_b... class TestMain (line 140) | class TestMain: method test_main_default (line 144) | def test_main_default(self, mock_mcp): class TestServerIntegration (line 155) | class TestServerIntegration: method test_server_integration (line 161) | async def test_server_integration( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/models.py class APIStatus (line 24) | class APIStatus(str, Enum): class CostMetric (line 31) | class CostMetric(str, Enum): class DateGranularity (line 43) | class DateGranularity(str, Enum): class SchemaFormat (line 51) | class SchemaFormat(str, Enum): class BaseResponse (line 60) | class BaseResponse(BaseModel): class ErrorResponse (line 67) | class ErrorResponse(BaseResponse): class SuccessResponse (line 75) | class SuccessResponse(BaseResponse): class DateRange (line 82) | class DateRange(BaseModel): method validate_date_format (line 90) | def validate_date_format(cls, v): class ColumnDefinition (line 100) | class ColumnDefinition(BaseModel): class SchemaInfo (line 108) | class SchemaInfo(BaseModel): class StorageLensQueryRequest (line 116) | class StorageLensQueryRequest(BaseModel): class AthenaQueryExecution (line 126) | class AthenaQueryExecution(BaseModel): class GroupBy (line 138) | class GroupBy(BaseModel): class CostFilter (line 145) | class CostFilter(BaseModel): class CostExplorerRequest (line 152) | class CostExplorerRequest(BaseModel): class RecommendationType (line 163) | class RecommendationType(str, Enum): class ComputeOptimizerRequest (line 175) | class ComputeOptimizerRequest(BaseModel): class BudgetPeriod (line 185) | class BudgetPeriod(str, Enum): class BudgetType (line 194) | class BudgetType(str, Enum): class SQLExecutionResult (line 206) | class SQLExecutionResult(BaseModel): FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/prompts/__init__.py function register_all_prompts (line 32) | def register_all_prompts(mcp: Any) -> None: FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/prompts/decorator.py function finops_prompt (line 23) | def finops_prompt( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/prompts/graviton_migration.py function graviton_migration_analysis (line 25) | def graviton_migration_analysis( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/prompts/savings_plans.py function savings_plans_analysis (line 25) | def savings_plans_analysis( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/prompts/types.py class PromptFunction (line 19) | class PromptFunction(Protocol): method __call__ (line 27) | def __call__(self, *args: Any, **kwargs: Any) -> Any: function is_prompt_function (line 36) | def is_prompt_function(func: Callable[..., Any]) -> bool: function as_prompt_function (line 41) | def as_prompt_function(func: Callable[..., Any]) -> PromptFunction: FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/server.py function register_prompts (line 130) | async def register_prompts(): function setup (line 141) | async def setup(): function main (line 200) | def main(): FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/aws_pricing_operations.py function get_service_codes (line 34) | async def get_service_codes(ctx: Context, max_results: Optional[int] = N... function get_service_attributes (line 104) | async def get_service_attributes(ctx: Context, service_code: str) -> Dic... function get_attribute_values (line 156) | async def get_attribute_values( function get_pricing_from_api (line 241) | async def get_pricing_from_api( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/aws_pricing_tools.py function aws_pricing (line 78) | async def aws_pricing( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/bcm_pricing_calculator_tools.py function bcm_pricing_calc_core (line 44) | async def bcm_pricing_calc_core( function bcm_pricing_calc (line 209) | async def bcm_pricing_calc( function get_preferences (line 255) | async def get_preferences(ctx: Context) -> dict: function list_workload_estimates (line 306) | async def list_workload_estimates( function get_workload_estimate (line 471) | async def get_workload_estimate( function list_workload_estimate_usage (line 562) | async def list_workload_estimate_usage( function format_usage_item_response (line 742) | def format_usage_item_response(usage_item: Dict[str, Any]) -> Dict[str, ... function format_workload_estimate_response (line 818) | def format_workload_estimate_response(estimate: Dict[str, Any]) -> Dict[... FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/billing_conductor_operations.py function _create_billing_conductor_client (line 37) | def _create_billing_conductor_client() -> Any: function list_billing_groups (line 46) | async def list_billing_groups( function _format_billing_groups (line 119) | def _format_billing_groups(billing_groups: List[Dict[str, Any]]) -> List... function list_account_associations (line 170) | async def list_account_associations( function _format_linked_accounts (line 242) | def _format_linked_accounts( function list_billing_group_cost_reports (line 270) | async def list_billing_group_cost_reports( function get_billing_group_cost_report (line 341) | async def get_billing_group_cost_report( function _format_cost_report_base (line 415) | def _format_cost_report_base(report: Dict[str, Any]) -> Dict[str, Any]: function _format_billing_group_cost_reports (line 435) | def _format_billing_group_cost_reports( function _format_billing_group_cost_report_results (line 449) | def _format_billing_group_cost_report_results( function list_custom_line_items (line 478) | async def list_custom_line_items( function list_custom_line_item_versions (line 550) | async def list_custom_line_item_versions( function list_resources_associated_to_custom_line_item (line 619) | async def list_resources_associated_to_custom_line_item( function _format_custom_line_item_base (line 696) | def _format_custom_line_item_base(item: Dict[str, Any]) -> Dict[str, Any]: function _format_custom_line_items (line 734) | def _format_custom_line_items( function _format_charge_details (line 741) | def _format_charge_details(charge_details: Dict[str, Any]) -> Dict[str, ... function _format_line_item_filters (line 765) | def _format_line_item_filters( function _format_custom_line_item_versions (line 788) | def _format_custom_line_item_versions( function _format_associated_resources (line 812) | def _format_associated_resources( function list_pricing_rules (line 830) | async def list_pricing_rules( function list_pricing_plans (line 901) | async def list_pricing_plans( function list_pricing_rules_associated_to_pricing_plan (line 972) | async def list_pricing_rules_associated_to_pricing_plan( function list_pricing_plans_associated_with_pricing_rule (line 1053) | async def list_pricing_plans_associated_with_pricing_rule( function _format_pricing_rules (line 1136) | def _format_pricing_rules(pricing_rules: List[Dict[str, Any]]) -> List[D... function _format_pricing_plans (line 1175) | def _format_pricing_plans(pricing_plans: List[Dict[str, Any]]) -> List[D... FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/billing_conductor_tools.py function list_billing_groups (line 100) | async def list_billing_groups( function list_account_associations (line 163) | async def list_account_associations( function list_billing_group_cost_reports (line 216) | async def list_billing_group_cost_reports( function get_billing_group_cost_report (line 270) | async def get_billing_group_cost_report( function list_custom_line_items (line 327) | async def list_custom_line_items( function list_custom_line_item_versions (line 368) | async def list_custom_line_item_versions( function list_resources_associated_to_custom_line_item (line 411) | async def list_resources_associated_to_custom_line_item( function list_pricing_rules (line 462) | async def list_pricing_rules( function list_pricing_plans (line 505) | async def list_pricing_plans( function list_pricing_rules_associated_to_pricing_plan (line 545) | async def list_pricing_rules_associated_to_pricing_plan( function list_pricing_plans_associated_with_pricing_rule (line 591) | async def list_pricing_plans_associated_with_pricing_rule( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/budget_tools.py function budgets (line 46) | async def budgets( function get_aws_account_id (line 82) | async def get_aws_account_id(ctx: Context) -> str: function describe_budgets (line 107) | async def describe_budgets( function format_budgets (line 181) | def format_budgets(budgets: List[Dict[str, Any]]) -> List[Dict[str, Any]]: FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/compute_optimizer_tools.py function compute_optimizer (line 67) | async def compute_optimizer( function get_ec2_instance_recommendations (line 301) | async def get_ec2_instance_recommendations( function get_auto_scaling_group_recommendations (line 368) | async def get_auto_scaling_group_recommendations( function get_ebs_volume_recommendations (line 435) | async def get_ebs_volume_recommendations( function get_lambda_function_recommendations (line 511) | async def get_lambda_function_recommendations( function get_rds_recommendations (line 578) | async def get_rds_recommendations(ctx, co_client, max_results, filters, ... function get_ecs_service_recommendations (line 664) | async def get_ecs_service_recommendations( function format_savings_opportunity (line 780) | def format_savings_opportunity(savings_opportunity): function format_timestamp (line 794) | def format_timestamp(timestamp): FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/cost_anomaly_tools.py function cost_anomaly (line 56) | async def cost_anomaly( function get_anomalies (line 227) | async def get_anomalies( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/cost_comparison_tools.py function cost_comparison (line 88) | async def cost_comparison( function get_cost_and_usage_comparisons (line 165) | async def get_cost_and_usage_comparisons( function get_cost_comparison_drivers (line 288) | async def get_cost_comparison_drivers( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/cost_explorer_operations.py function get_cost_and_usage (line 34) | async def get_cost_and_usage( function get_cost_and_usage_with_resources (line 146) | async def get_cost_and_usage_with_resources( function get_dimension_values (line 217) | async def get_dimension_values( function get_cost_forecast (line 296) | async def get_cost_forecast( function get_usage_forecast (line 364) | async def get_usage_forecast( function get_tags (line 431) | async def get_tags( function get_cost_categories (line 504) | async def get_cost_categories( function get_savings_plans_utilization (line 584) | async def get_savings_plans_utilization( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/cost_explorer_tools.py function cost_explorer (line 133) | async def cost_explorer( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/cost_optimization_hub_helpers.py function format_timestamp (line 28) | def format_timestamp(timestamp: Any) -> Optional[str]: function list_recommendations (line 58) | async def list_recommendations( function get_recommendation (line 222) | async def get_recommendation( function list_recommendation_summaries (line 341) | async def list_recommendation_summaries( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/cost_optimization_hub_tools.py function cost_optimization_hub (line 102) | async def cost_optimization_hub( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/free_tier_usage_tools.py function free_tier_usage (line 49) | async def free_tier_usage( function get_free_tier_usage_data (line 84) | async def get_free_tier_usage_data( function create_free_tier_usage_summary (line 154) | def create_free_tier_usage_summary(usages: List[Dict[str, Any]]) -> Dict... FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/recommendation_details_tools.py function get_recommendation_details (line 71) | async def get_recommendation_details(ctx: Context, recommendation_id: st... function process_recommendation (line 100) | async def process_recommendation(ctx: Context, recommendation: Dict[str,... function format_base_recommendation (line 133) | def format_base_recommendation(recommendation: Dict[str, Any]) -> Dict[s... function get_cost_explorer_data (line 170) | async def get_cost_explorer_data(ctx: Context, recommendation: Dict[str,... function get_savings_plans_recommendation (line 191) | async def get_savings_plans_recommendation( function get_reserved_instances_recommendation (line 260) | async def get_reserved_instances_recommendation( function get_compute_optimizer_data (line 321) | async def get_compute_optimizer_data( function format_timestamp (line 383) | def format_timestamp(timestamp: Optional[int]) -> Optional[str]: function get_template_for_recommendation (line 394) | def get_template_for_recommendation( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/ri_performance_tools.py function ri_performance (line 65) | async def ri_performance( function get_reservation_coverage (line 138) | async def get_reservation_coverage( function get_reservation_utilization (line 261) | async def get_reservation_utilization( function format_coverage_metrics (line 380) | def format_coverage_metrics(coverage_data: Dict) -> Dict: function format_utilization_metrics (line 424) | def format_utilization_metrics(utilization_data: Dict) -> Dict: FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/sp_performance_tools.py function sp_performance (line 49) | async def sp_performance( function get_savings_plans_coverage (line 106) | async def get_savings_plans_coverage( function get_savings_plans_utilization (line 193) | async def get_savings_plans_utilization( function get_savings_plans_utilization_details (line 385) | async def get_savings_plans_utilization_details( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/storage_lens_tools.py class SchemaFormat (line 57) | class SchemaFormat(Enum): class ColumnDefinition (line 65) | class ColumnDefinition(TypedDict): class SchemaInfo (line 72) | class SchemaInfo(TypedDict): class ManifestFile (line 80) | class ManifestFile(TypedDict): class AthenaQueryExecution (line 87) | class AthenaQueryExecution(TypedDict): class ManifestHandler (line 94) | class ManifestHandler: method __init__ (line 97) | def __init__(self, ctx: Context): method get_manifest (line 106) | async def get_manifest(self, manifest_location: str) -> Dict[str, Any]: method _read_manifest_file (line 133) | async def _read_manifest_file(self, bucket: str, key: str) -> Dict[str... method _find_latest_manifest (line 152) | async def _find_latest_manifest(self, bucket: str, key: str) -> Dict[s... method extract_data_location (line 207) | def extract_data_location(self, manifest: Dict[str, Any]) -> str: method parse_schema (line 240) | def parse_schema(self, manifest: Dict[str, Any]) -> SchemaInfo: class AthenaHandler (line 292) | class AthenaHandler: method __init__ (line 295) | def __init__(self, ctx: Context): method create_database (line 305) | async def create_database(self, database_name: str, output_location: s... method create_table_for_csv (line 315) | async def create_table_for_csv( method create_table_for_parquet (line 349) | async def create_table_for_parquet( method setup_table (line 380) | async def setup_table( method execute_query (line 417) | async def execute_query( method wait_for_query_completion (line 452) | async def wait_for_query_completion( method get_query_results (line 504) | async def get_query_results(self, query_execution_id: str) -> Dict[str... method determine_output_location (line 545) | def determine_output_location( class StorageLensQueryTool (line 566) | class StorageLensQueryTool: method __init__ (line 569) | def __init__(self, ctx: Context): method query_storage_lens (line 579) | async def query_storage_lens( function storage_lens_run_query (line 767) | async def storage_lens_run_query( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/tools/unified_sql_tools.py function session_sql (line 52) | async def session_sql( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/utilities/aws_service_base.py function get_pricing_region (line 54) | def get_pricing_region(requested_region: Optional[str] = None) -> str: function create_aws_client (line 87) | def create_aws_client(service_name: str, region_name: Optional[str] = No... function parse_json (line 141) | def parse_json(json_str: Optional[str], parameter_name: str) -> Any: function get_date_range (line 163) | def get_date_range( function validate_date_format (line 182) | def validate_date_format(date_str: Optional[str]) -> bool: function handle_aws_error (line 205) | async def handle_aws_error( function paginate_aws_response (line 322) | async def paginate_aws_response( function format_response (line 419) | def format_response(status: str, data: Any, message: Optional[str] = Non... FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/utilities/logging_utils.py function get_server_directory (line 46) | def get_server_directory() -> Path: function configure_logging (line 58) | def configure_logging() -> None: function get_logger (line 99) | def get_logger(name: str): class LoggerContextAdapter (line 111) | class LoggerContextAdapter: method __init__ (line 119) | def __init__(self, ctx: Context, module_name: str): method debug (line 129) | async def debug(self, message: str) -> None: method info (line 138) | async def info(self, message: str) -> None: method warning (line 147) | async def warning(self, message: str) -> None: method error (line 156) | async def error(self, message: str, exc_info: bool = False) -> None: function get_context_logger (line 170) | def get_context_logger(ctx: Context, module_name: str) -> LoggerContextA... class TimingLogger (line 183) | class TimingLogger: method __init__ (line 190) | def __init__(self, logger, operation_name: str, context: Optional[Dict... method __enter__ (line 204) | def __enter__(self): method __exit__ (line 211) | def __exit__(self, exc_type, exc_val, exc_tb): FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/utilities/sql_utils.py function should_convert_to_sql (line 54) | def should_convert_to_sql(response_size: int) -> bool: function get_session_db_path (line 75) | def get_session_db_path() -> str: function cleanup_session_db (line 106) | def cleanup_session_db() -> None: function get_db_connection (line 118) | def get_db_connection() -> Tuple[sqlite3.Connection, sqlite3.Cursor]: function validate_table_name (line 150) | def validate_table_name(table_name: str) -> bool: function create_safe_sql_statement (line 170) | def create_safe_sql_statement( function create_table (line 202) | def create_table(cursor: sqlite3.Cursor, table_name: str, schema: List[s... function insert_data (line 223) | def insert_data(cursor: sqlite3.Cursor, table_name: str, data: Optional[... function register_table_in_schema_info (line 255) | def register_table_in_schema_info( function validate_sql_query (line 275) | def validate_sql_query(query: str) -> bool: function execute_query (line 305) | def execute_query(cursor: sqlite3.Cursor, query: str) -> Tuple[List[str]... function _get_specialized_converter (line 333) | def _get_specialized_converter(operation_name: str) -> Optional[str]: function convert_response_if_needed (line 357) | async def convert_response_if_needed( function convert_api_response_to_table (line 402) | async def convert_api_response_to_table( function execute_session_sql (line 893) | async def execute_session_sql( FILE: src/billing-cost-management-mcp-server/awslabs/billing_cost_management_mcp_server/utilities/time_utils.py function epoch_seconds_to_utc_iso_string (line 21) | def epoch_seconds_to_utc_iso_string(epoch_seconds: Union[int, float]) ->... FILE: src/billing-cost-management-mcp-server/tests/conftest.py function tests_setup_and_teardown (line 37) | def tests_setup_and_teardown(): function event_loop (line 49) | def event_loop(): FILE: src/billing-cost-management-mcp-server/tests/prompts/test_prompts.py function test_decorator_basic (line 29) | def test_decorator_basic(): function test_decorator_defaults (line 48) | def test_decorator_defaults(): function test_decorator_function_execution (line 65) | def test_decorator_function_execution(): function test_register_all_prompts (line 77) | def test_register_all_prompts(): function test_graviton_migration_prompt (line 101) | def test_graviton_migration_prompt(): function test_savings_plans_prompt (line 157) | def test_savings_plans_prompt(): FILE: src/billing-cost-management-mcp-server/tests/test_models.py function test_api_status_enum (line 33) | def test_api_status_enum(): function test_cost_metric_enum (line 39) | def test_cost_metric_enum(): function test_date_granularity_enum (line 45) | def test_date_granularity_enum(): function test_schema_format_enum (line 51) | def test_schema_format_enum(): function test_base_response (line 57) | def test_base_response(): function test_error_response (line 64) | def test_error_response(): function test_success_response (line 71) | def test_success_response(): function test_date_range (line 78) | def test_date_range(): function test_date_range_validation (line 85) | def test_date_range_validation(): function test_column_definition (line 91) | def test_column_definition(): function test_schema_info (line 99) | def test_schema_info(): function test_storage_lens_query_request (line 107) | def test_storage_lens_query_request(): FILE: src/billing-cost-management-mcp-server/tests/test_server.py function test_server_imports (line 21) | def test_server_imports(): function test_server_module_attributes (line 28) | def test_server_module_attributes(): function test_path_modification (line 38) | def test_path_modification(): function test_server_tool_imports (line 48) | def test_server_tool_imports(): function test_environment_variables_handling (line 61) | def test_environment_variables_handling(): function test_main_function_exists (line 67) | def test_main_function_exists(): function test_server_registration_logic (line 75) | def test_server_registration_logic(): function test_setup_function (line 90) | async def test_setup_function(mock_register_prompts, mock_mcp): function test_register_prompts_success (line 103) | async def test_register_prompts_success(mock_register_all_prompts): function test_register_prompts_error (line 115) | async def test_register_prompts_error(mock_register_all_prompts): function test_main_function (line 126) | def test_main_function(mock_mcp_run, mock_asyncio_run): FILE: src/billing-cost-management-mcp-server/tests/tools/test_aws_bcm_pricing_calculator_tools.py function mock_context (line 26) | def mock_context(): function mock_bcm_pricing_calculator_client (line 35) | def mock_bcm_pricing_calculator_client(): class TestGetPreferences (line 123) | class TestGetPreferences: method test_get_preferences_success_management_account (line 129) | async def test_get_preferences_success_management_account( method test_get_preferences_success_member_account (line 154) | async def test_get_preferences_success_member_account( method test_get_preferences_success_standalone_account (line 174) | async def test_get_preferences_success_standalone_account( method test_get_preferences_not_configured (line 194) | async def test_get_preferences_not_configured( method test_get_preferences_exception (line 216) | async def test_get_preferences_exception( class TestListWorkloadEstimates (line 242) | class TestListWorkloadEstimates: method test_list_workload_estimates_success (line 251) | async def test_list_workload_estimates_success( method test_list_workload_estimates_with_filters (line 290) | async def test_list_workload_estimates_with_filters( method test_list_workload_estimates_preferences_not_configured (line 328) | async def test_list_workload_estimates_preferences_not_configured( method test_list_workload_estimates_exception (line 353) | async def test_list_workload_estimates_exception( class TestGetWorkloadEstimate (line 377) | class TestGetWorkloadEstimate: method test_get_workload_estimate_success (line 386) | async def test_get_workload_estimate_success( method test_get_workload_estimate_missing_identifier (line 417) | async def test_get_workload_estimate_missing_identifier(self, mock_con... method test_get_workload_estimate_preferences_not_configured (line 430) | async def test_get_workload_estimate_preferences_not_configured( class TestListWorkloadEstimateUsage (line 448) | class TestListWorkloadEstimateUsage: method test_list_workload_estimate_usage_success (line 457) | async def test_list_workload_estimate_usage_success( method test_list_workload_estimate_usage_missing_id (line 499) | async def test_list_workload_estimate_usage_missing_id(self, mock_cont... method test_list_workload_estimate_usage_with_all_filters (line 515) | async def test_list_workload_estimate_usage_with_all_filters( class TestFormatWorkloadEstimateResponse (line 546) | class TestFormatWorkloadEstimateResponse: method test_format_workload_estimate_response_basic (line 549) | def test_format_workload_estimate_response_basic(self): method test_format_workload_estimate_response_with_timestamps (line 569) | def test_format_workload_estimate_response_with_timestamps(self): method test_format_workload_estimate_response_with_cost (line 601) | def test_format_workload_estimate_response_with_cost(self): method test_format_workload_estimate_response_with_failure_message (line 621) | def test_format_workload_estimate_response_with_failure_message(self): method test_format_workload_estimate_response_action_needed_status (line 638) | def test_format_workload_estimate_response_action_needed_status(self): method test_format_workload_estimate_response_unknown_status (line 653) | def test_format_workload_estimate_response_unknown_status(self): class TestFormatUsageItemResponse (line 669) | class TestFormatUsageItemResponse: method test_format_usage_item_response_basic (line 672) | def test_format_usage_item_response_basic(self): method test_format_usage_item_response_with_quantity (line 702) | def test_format_usage_item_response_with_quantity(self): method test_format_usage_item_response_with_cost (line 723) | def test_format_usage_item_response_with_cost(self): method test_format_usage_item_response_with_historical_usage (line 742) | def test_format_usage_item_response_with_historical_usage(self): method test_format_usage_item_response_quantity_none_amount (line 776) | def test_format_usage_item_response_quantity_none_amount(self): method test_format_usage_item_response_stale_status (line 797) | def test_format_usage_item_response_stale_status(self): method test_format_usage_item_response_invalid_status (line 812) | def test_format_usage_item_response_invalid_status(self): method test_format_usage_item_response_unknown_status (line 827) | def test_format_usage_item_response_unknown_status(self): function test_bcm_pricing_calculator_server_initialization (line 843) | def test_bcm_pricing_calculator_server_initialization(): class TestAdditionalFormattingCases (line 854) | class TestAdditionalFormattingCases: method test_format_usage_item_response_no_quantity (line 857) | def test_format_usage_item_response_no_quantity(self): method test_format_usage_item_response_no_cost (line 875) | def test_format_usage_item_response_no_cost(self): method test_format_usage_item_response_no_status (line 892) | def test_format_usage_item_response_no_status(self): method test_format_usage_item_response_default_currency (line 908) | def test_format_usage_item_response_default_currency(self): method test_format_usage_item_response_historical_usage_no_bill_interval_start_end (line 923) | def test_format_usage_item_response_historical_usage_no_bill_interval_... method test_format_workload_estimate_response_no_status (line 952) | def test_format_workload_estimate_response_no_status(self): method test_format_workload_estimate_response_no_failure_message (line 969) | def test_format_workload_estimate_response_no_failure_message(self): class TestMissingCoverageBranches (line 988) | class TestMissingCoverageBranches: method test_get_preferences_management_account_only (line 994) | async def test_get_preferences_management_account_only(self, mock_crea... method test_get_preferences_member_account_only (line 1021) | async def test_get_preferences_member_account_only(self, mock_create_c... method test_get_preferences_standalone_account_only (line 1045) | async def test_get_preferences_standalone_account_only(self, mock_crea... method test_get_preferences_multiple_account_types (line 1069) | async def test_get_preferences_multiple_account_types(self, mock_creat... method test_list_workload_estimates_datetime_parsing_created_after_only (line 1102) | async def test_list_workload_estimates_datetime_parsing_created_after_... method test_list_workload_estimates_datetime_parsing_created_before_only (line 1131) | async def test_list_workload_estimates_datetime_parsing_created_before... method test_list_workload_estimates_datetime_parsing_expires_after_only (line 1160) | async def test_list_workload_estimates_datetime_parsing_expires_after_... method test_list_workload_estimates_datetime_parsing_expires_before_only (line 1189) | async def test_list_workload_estimates_datetime_parsing_expires_before... method test_list_workload_estimates_filter_building_status_only (line 1218) | async def test_list_workload_estimates_filter_building_status_only( method test_list_workload_estimates_filter_building_name_only (line 1249) | async def test_list_workload_estimates_filter_building_name_only( method test_list_workload_estimates_no_filters_applied (line 1282) | async def test_list_workload_estimates_no_filters_applied( class TestAdditionalConditionalBranches (line 1305) | class TestAdditionalConditionalBranches: class TestListWorkloadEstimateUsagePreferencesNotConfigured (line 1310) | class TestListWorkloadEstimateUsagePreferencesNotConfigured: method test_list_workload_estimate_usage_preferences_not_configured (line 1316) | async def test_list_workload_estimate_usage_preferences_not_configured( class TestEdgeCases (line 1339) | class TestEdgeCases: method test_list_workload_estimates_with_pagination (line 1352) | async def test_list_workload_estimates_with_pagination( method test_list_workload_estimate_usage_with_pagination (line 1397) | async def test_list_workload_estimate_usage_with_pagination( method test_format_workload_estimate_response_with_string_timestamps (line 1435) | def test_format_workload_estimate_response_with_string_timestamps(self): method test_format_workload_estimate_response_none_cost (line 1456) | def test_format_workload_estimate_response_none_cost(self): method test_format_usage_item_response_no_historical_bill_interval (line 1476) | def test_format_usage_item_response_no_historical_bill_interval(self): method test_format_usage_item_response_empty_historical_usage (line 1500) | def test_format_usage_item_response_empty_historical_usage(self): method test_get_workload_estimate_exception (line 1527) | async def test_get_workload_estimate_exception( method test_list_workload_estimate_usage_exception (line 1558) | async def test_list_workload_estimate_usage_exception( function test_format_workload_estimate_response_status_indicators (line 1590) | def test_format_workload_estimate_response_status_indicators(status, exp... function test_format_usage_item_response_status_indicators (line 1615) | def test_format_usage_item_response_status_indicators(status, expected_i... class TestBcmPricingCalcCoreFunction (line 1632) | class TestBcmPricingCalcCoreFunction: method test_bcm_pricing_calc_core_invalid_operation (line 1635) | async def test_bcm_pricing_calc_core_invalid_operation(self, mock_cont... method test_bcm_pricing_calc_core_get_workload_estimate_operation (line 1651) | async def test_bcm_pricing_calc_core_get_workload_estimate_operation( method test_bcm_pricing_calc_core_list_workload_estimates_operation (line 1676) | async def test_bcm_pricing_calc_core_list_workload_estimates_operation( method test_bcm_pricing_calc_core_list_workload_estimate_usage_operation (line 1723) | async def test_bcm_pricing_calc_core_list_workload_estimate_usage_oper... method test_bcm_pricing_calc_core_get_preferences_operation_success (line 1767) | async def test_bcm_pricing_calc_core_get_preferences_operation_success( method test_bcm_pricing_calc_core_get_preferences_operation_not_configured (line 1788) | async def test_bcm_pricing_calc_core_get_preferences_operation_not_con... method test_bcm_pricing_calc_core_exception_handling (line 1815) | async def test_bcm_pricing_calc_core_exception_handling( method test_bcm_pricing_calc_core_exception_handling_no_error_in_response (line 1860) | async def test_bcm_pricing_calc_core_exception_handling_no_error_in_re... FILE: src/billing-cost-management-mcp-server/tests/tools/test_aws_pricing_tools.py function aws_pricing (line 48) | async def aws_pricing(ctx, operation, **kwargs): function mock_context (line 135) | def mock_context(): class TestGetPricingRegion (line 143) | class TestGetPricingRegion: method test_pricing_region_with_pricing_region (line 146) | def test_pricing_region_with_pricing_region(self): method test_pricing_region_with_cn_region (line 152) | def test_pricing_region_with_cn_region(self): method test_pricing_region_with_eu_region (line 157) | def test_pricing_region_with_eu_region(self): method test_pricing_region_with_ap_region (line 169) | def test_pricing_region_with_ap_region(self): method test_pricing_region_with_us_region (line 174) | def test_pricing_region_with_us_region(self): method test_pricing_region_with_default (line 179) | def test_pricing_region_with_default(self): class TestAwsPricing (line 192) | class TestAwsPricing: method test_aws_pricing_get_service_codes (line 198) | async def test_aws_pricing_get_service_codes(self, mock_get_service_co... method test_aws_pricing_get_service_attributes (line 223) | async def test_aws_pricing_get_service_attributes( method test_aws_pricing_get_attribute_values (line 247) | async def test_aws_pricing_get_attribute_values(self, mock_get_attribu... method test_aws_pricing_get_pricing_from_api (line 272) | async def test_aws_pricing_get_pricing_from_api(self, mock_get_pricing... method test_aws_pricing_missing_service_code (line 320) | async def test_aws_pricing_missing_service_code(self, mock_format_resp... method test_aws_pricing_missing_attribute_name (line 337) | async def test_aws_pricing_missing_attribute_name(self, mock_format_re... method test_aws_pricing_missing_region (line 356) | async def test_aws_pricing_missing_region(self, mock_format_response, ... method test_aws_pricing_unknown_operation (line 375) | async def test_aws_pricing_unknown_operation(self, mock_format_respons... method test_aws_pricing_error_handling (line 394) | async def test_aws_pricing_error_handling(self, mock_get_service_codes... function test_aws_pricing_server_initialization (line 408) | def test_aws_pricing_server_initialization(): class TestAwsPricingOperations (line 420) | class TestAwsPricingOperations: method test_get_service_codes_calls_api (line 424) | async def test_get_service_codes_calls_api(self): method test_get_service_attributes_calls_api (line 444) | async def test_get_service_attributes_calls_api(self): method test_get_attribute_values_calls_api (line 464) | async def test_get_attribute_values_calls_api(self): method test_get_pricing_from_api_calls_api (line 484) | async def test_get_pricing_from_api_calls_api(self): function test_aws_pricing_missing_service_code_get_attributes (line 505) | async def test_aws_pricing_missing_service_code_get_attributes(): function test_aws_pricing_missing_params_get_attribute_values (line 514) | async def test_aws_pricing_missing_params_get_attribute_values(): function test_aws_pricing_missing_params_get_pricing (line 523) | async def test_aws_pricing_missing_params_get_pricing(): function test_aws_pricing_main_function_get_service_codes (line 532) | async def test_aws_pricing_main_function_get_service_codes(): function test_aws_pricing_main_function_missing_service_code (line 548) | async def test_aws_pricing_main_function_missing_service_code(): function test_aws_pricing_main_function_missing_params (line 559) | async def test_aws_pricing_main_function_missing_params(): function test_aws_pricing_main_function_get_pricing_missing_region (line 570) | async def test_aws_pricing_main_function_get_pricing_missing_region(): function test_get_service_codes_error_handling (line 582) | async def test_get_service_codes_error_handling(mock_create_client): function test_get_service_attributes_service_not_found (line 593) | async def test_get_service_attributes_service_not_found(mock_create_clie... function test_get_attribute_values_api_error (line 610) | async def test_get_attribute_values_api_error(mock_create_client): function test_aws_pricing_get_attribute_values_passes_all_args_extra (line 622) | async def test_aws_pricing_get_attribute_values_passes_all_args_extra(mo... function test_aws_pricing_get_pricing_from_api_passes_filters_string_and_max_results_extra (line 640) | async def test_aws_pricing_get_pricing_from_api_passes_filters_string_an... function test_aws_pricing_get_pricing_from_api_passes_filters_dict_too_extra (line 662) | async def test_aws_pricing_get_pricing_from_api_passes_filters_dict_too_... function _reload_pricing_with_identity_decorator (line 680) | def _reload_pricing_with_identity_decorator(): function test_ap_real_get_service_codes_reload_identity_decorator (line 699) | async def test_ap_real_get_service_codes_reload_identity_decorator(mock_... function test_ap_real_get_service_attributes_reload_identity_decorator (line 714) | async def test_ap_real_get_service_attributes_reload_identity_decorator(... function test_ap_real_get_attribute_values_reload_identity_decorator (line 737) | async def test_ap_real_get_attribute_values_reload_identity_decorator(mo... function test_ap_real_get_pricing_from_api_reload_identity_decorator (line 765) | async def test_ap_real_get_pricing_from_api_reload_identity_decorator(mo... function test_ap_real_unknown_operation_error_reload_identity_decorator (line 795) | async def test_ap_real_unknown_operation_error_reload_identity_decorator... function test_ap_real_exception_flow_calls_handle_error_reload_identity_decorator (line 809) | async def test_ap_real_exception_flow_calls_handle_error_reload_identity... class TestGetServiceCodesAdditional (line 831) | class TestGetServiceCodesAdditional: method test_get_service_codes_pagination (line 837) | async def test_get_service_codes_pagination(self, mock_create_client, ... method test_get_service_codes_with_max_results (line 866) | async def test_get_service_codes_with_max_results(self, mock_create_cl... class TestGetServiceAttributesAdditional (line 881) | class TestGetServiceAttributesAdditional: method test_get_service_attributes_empty_attributes (line 887) | async def test_get_service_attributes_empty_attributes(self, mock_crea... class TestGetAttributeValuesAdditional (line 904) | class TestGetAttributeValuesAdditional: method test_get_attribute_values_pagination_with_max_results_limit (line 910) | async def test_get_attribute_values_pagination_with_max_results_limit( method test_get_attribute_values_with_max_results_none (line 941) | async def test_get_attribute_values_with_max_results_none( class TestGetPricingFromApiAdditional (line 960) | class TestGetPricingFromApiAdditional: method test_get_pricing_from_api_table_conversion (line 969) | async def test_get_pricing_from_api_table_conversion( method test_get_pricing_from_api_no_results (line 997) | async def test_get_pricing_from_api_no_results( method test_get_pricing_from_api_json_parse_errors (line 1025) | async def test_get_pricing_from_api_json_parse_errors( method test_get_pricing_from_api_processing_errors (line 1067) | async def test_get_pricing_from_api_processing_errors( method test_get_pricing_from_api_pagination_with_max_results_limit (line 1102) | async def test_get_pricing_from_api_pagination_with_max_results_limit( method test_get_pricing_from_api_with_filters (line 1138) | async def test_get_pricing_from_api_with_filters( method test_get_pricing_from_api_filters_with_none_values (line 1174) | async def test_get_pricing_from_api_filters_with_none_values( method test_get_pricing_from_api_pricing_region_mapping (line 1214) | async def test_get_pricing_from_api_pricing_region_mapping( FILE: src/billing-cost-management-mcp-server/tests/tools/test_billing_conductor_operations.py function _make_client_error_response (line 84) | def _make_client_error_response( function mock_ctx (line 100) | def mock_ctx(): function sample_billing_groups (line 111) | def sample_billing_groups(): class TestFormatBillingGroups (line 154) | class TestFormatBillingGroups: method test_format_empty_list (line 157) | def test_format_empty_list(self): method test_format_basic_fields (line 162) | def test_format_basic_fields(self, sample_billing_groups): method test_format_computation_preference (line 175) | def test_format_computation_preference(self, sample_billing_groups): method test_format_account_grouping (line 182) | def test_format_account_grouping(self, sample_billing_groups): method test_format_timestamps (line 195) | def test_format_timestamps(self, sample_billing_groups): method test_format_missing_optional_fields (line 202) | def test_format_missing_optional_fields(self): class TestListBillingGroups (line 225) | class TestListBillingGroups: method test_list_billing_groups_success (line 229) | async def test_list_billing_groups_success( method test_list_billing_groups_with_billing_period (line 247) | async def test_list_billing_groups_with_billing_period( method test_list_billing_groups_with_filters (line 266) | async def test_list_billing_groups_with_filters( method test_list_billing_groups_pagination (line 289) | async def test_list_billing_groups_pagination( method test_list_billing_groups_max_pages_stops_pagination (line 313) | async def test_list_billing_groups_max_pages_stops_pagination( method test_list_billing_groups_with_next_token (line 332) | async def test_list_billing_groups_with_next_token( method test_list_billing_groups_empty_result (line 352) | async def test_list_billing_groups_empty_result(self, mock_create_clie... method test_list_billing_groups_invalid_filters (line 367) | async def test_list_billing_groups_invalid_filters(self, mock_ctx): method test_list_billing_groups_aws_error (line 374) | async def test_list_billing_groups_aws_error(self, mock_create_client,... function sample_custom_line_items (line 393) | def sample_custom_line_items(): class TestFormatCustomLineItems (line 432) | class TestFormatCustomLineItems: method test_format_empty_list (line 435) | def test_format_empty_list(self): method test_format_basic_fields (line 440) | def test_format_basic_fields(self, sample_custom_line_items): method test_format_charge_details_flat (line 450) | def test_format_charge_details_flat(self, sample_custom_line_items): method test_format_charge_details_percentage (line 458) | def test_format_charge_details_percentage(self, sample_custom_line_ite... method test_format_presentation_details (line 466) | def test_format_presentation_details(self, sample_custom_line_items): method test_format_timestamps (line 474) | def test_format_timestamps(self, sample_custom_line_items): method test_format_without_timestamps (line 481) | def test_format_without_timestamps(self): method test_format_charge_details_with_line_item_filters (line 488) | def test_format_charge_details_with_line_item_filters(self): class TestListCustomLineItems (line 525) | class TestListCustomLineItems: method test_list_custom_line_items_success (line 529) | async def test_list_custom_line_items_success( method test_list_custom_line_items_with_billing_period (line 546) | async def test_list_custom_line_items_with_billing_period( method test_list_custom_line_items_with_filters (line 563) | async def test_list_custom_line_items_with_filters( method test_list_custom_line_items_empty (line 580) | async def test_list_custom_line_items_empty(self, mock_create_client, ... method test_list_custom_line_items_max_pages_next_token (line 592) | async def test_list_custom_line_items_max_pages_next_token(self, mock_... method test_list_custom_line_items_aws_error (line 604) | async def test_list_custom_line_items_aws_error(self, mock_create_clie... class TestListCustomLineItemVersions (line 622) | class TestListCustomLineItemVersions: method test_success (line 626) | async def test_success(self, mock_create_client, mock_ctx): method test_max_pages_next_token (line 650) | async def test_max_pages_next_token(self, mock_create_client, mock_ctx): method test_with_filters (line 673) | async def test_with_filters(self, mock_create_client, mock_ctx): method test_aws_error (line 687) | async def test_aws_error(self, mock_create_client, mock_ctx): class TestListResourcesAssociatedToCustomLineItem (line 706) | class TestListResourcesAssociatedToCustomLineItem: method test_success (line 710) | async def test_success(self, mock_create_client, mock_ctx): method test_with_billing_period (line 733) | async def test_with_billing_period(self, mock_create_client, mock_ctx): method test_max_pages_next_token (line 750) | async def test_max_pages_next_token(self, mock_create_client, mock_ctx): method test_with_filters (line 764) | async def test_with_filters(self, mock_create_client, mock_ctx): method test_aws_error (line 779) | async def test_aws_error(self, mock_create_client, mock_ctx): function sample_pricing_rules (line 799) | def sample_pricing_rules(): function sample_pricing_plans (line 832) | def sample_pricing_plans(): class TestFormatPricingRules (line 857) | class TestFormatPricingRules: method test_format_empty_list (line 860) | def test_format_empty_list(self): method test_format_basic_fields (line 865) | def test_format_basic_fields(self, sample_pricing_rules): method test_format_tiering (line 876) | def test_format_tiering(self, sample_pricing_rules): method test_format_timestamps (line 884) | def test_format_timestamps(self, sample_pricing_rules): method test_format_minimal_rule (line 891) | def test_format_minimal_rule(self): class TestFormatPricingPlans (line 901) | class TestFormatPricingPlans: method test_format_empty_list (line 904) | def test_format_empty_list(self): method test_format_basic_fields (line 909) | def test_format_basic_fields(self, sample_pricing_plans): method test_format_timestamps (line 919) | def test_format_timestamps(self, sample_pricing_plans): class TestListPricingRules (line 931) | class TestListPricingRules: method test_list_pricing_rules_success (line 935) | async def test_list_pricing_rules_success( method test_list_pricing_rules_with_billing_period (line 952) | async def test_list_pricing_rules_with_billing_period( method test_list_pricing_rules_empty (line 969) | async def test_list_pricing_rules_empty(self, mock_create_client, mock... method test_list_pricing_rules_max_pages_next_token (line 981) | async def test_list_pricing_rules_max_pages_next_token(self, mock_crea... method test_list_pricing_rules_aws_error (line 993) | async def test_list_pricing_rules_aws_error(self, mock_create_client, ... class TestListPricingPlans (line 1011) | class TestListPricingPlans: method test_list_pricing_plans_success (line 1015) | async def test_list_pricing_plans_success( method test_list_pricing_plans_with_billing_period (line 1032) | async def test_list_pricing_plans_with_billing_period( method test_list_pricing_plans_max_pages_next_token (line 1049) | async def test_list_pricing_plans_max_pages_next_token(self, mock_crea... method test_list_pricing_plans_aws_error (line 1061) | async def test_list_pricing_plans_aws_error(self, mock_create_client, ... class TestListPricingRulesAssociatedToPricingPlan (line 1079) | class TestListPricingRulesAssociatedToPricingPlan: method test_success (line 1083) | async def test_success(self, mock_create_client, mock_ctx): method test_with_billing_period (line 1100) | async def test_with_billing_period(self, mock_create_client, mock_ctx): method test_max_pages_next_token (line 1119) | async def test_max_pages_next_token(self, mock_create_client, mock_ctx): method test_aws_error (line 1133) | async def test_aws_error(self, mock_create_client, mock_ctx): class TestListPricingPlansAssociatedWithPricingRule (line 1150) | class TestListPricingPlansAssociatedWithPricingRule: method test_success (line 1154) | async def test_success(self, mock_create_client, mock_ctx): method test_max_pages_next_token (line 1173) | async def test_max_pages_next_token(self, mock_create_client, mock_ctx): method test_aws_error (line 1187) | async def test_aws_error(self, mock_create_client, mock_ctx): function sample_cost_reports (line 1206) | def sample_cost_reports(): function sample_cost_report_results (line 1229) | def sample_cost_report_results(): class TestFormatBillingGroupCostReports (line 1260) | class TestFormatBillingGroupCostReports: method test_format_empty_list (line 1263) | def test_format_empty_list(self): method test_format_basic_fields (line 1268) | def test_format_basic_fields(self, sample_cost_reports): class TestFormatBillingGroupCostReportResults (line 1281) | class TestFormatBillingGroupCostReportResults: method test_format_empty_list (line 1284) | def test_format_empty_list(self): method test_format_with_attributes (line 1289) | def test_format_with_attributes(self, sample_cost_report_results): method test_format_without_attributes (line 1300) | def test_format_without_attributes(self): class TestListBillingGroupCostReports (line 1322) | class TestListBillingGroupCostReports: method test_list_cost_reports_success (line 1326) | async def test_list_cost_reports_success( method test_list_cost_reports_with_billing_period (line 1343) | async def test_list_cost_reports_with_billing_period( method test_list_cost_reports_with_filters (line 1362) | async def test_list_cost_reports_with_filters( method test_list_cost_reports_pagination (line 1379) | async def test_list_cost_reports_pagination( method test_list_cost_reports_empty_result (line 1402) | async def test_list_cost_reports_empty_result(self, mock_create_client... method test_list_cost_reports_aws_error (line 1416) | async def test_list_cost_reports_aws_error(self, mock_create_client, m... class TestGetBillingGroupCostReport (line 1435) | class TestGetBillingGroupCostReport: method test_get_cost_report_success (line 1439) | async def test_get_cost_report_success( method test_get_cost_report_with_group_by (line 1456) | async def test_get_cost_report_with_group_by( method test_get_cost_report_with_billing_period_range (line 1476) | async def test_get_cost_report_with_billing_period_range( method test_get_cost_report_pagination (line 1501) | async def test_get_cost_report_pagination( method test_get_cost_report_aws_error (line 1524) | async def test_get_cost_report_aws_error(self, mock_create_client, moc... function sample_linked_accounts (line 1543) | def sample_linked_accounts(): class TestFormatLinkedAccounts (line 1569) | class TestFormatLinkedAccounts: method test_format_empty_list (line 1572) | def test_format_empty_list(self): method test_format_basic_fields (line 1577) | def test_format_basic_fields(self, sample_linked_accounts): method test_format_billing_group_arn_present (line 1586) | def test_format_billing_group_arn_present(self, sample_linked_accounts): method test_format_billing_group_arn_absent (line 1593) | def test_format_billing_group_arn_absent(self, sample_linked_accounts): method test_format_minimal_account (line 1602) | def test_format_minimal_account(self): class TestListAccountAssociations (line 1622) | class TestListAccountAssociations: method test_list_account_associations_success (line 1626) | async def test_list_account_associations_success( method test_list_account_associations_with_billing_period (line 1644) | async def test_list_account_associations_with_billing_period( method test_list_account_associations_with_association_filter (line 1663) | async def test_list_account_associations_with_association_filter( method test_list_account_associations_with_account_ids_filter (line 1683) | async def test_list_account_associations_with_account_ids_filter( method test_list_account_associations_pagination (line 1703) | async def test_list_account_associations_pagination( method test_list_account_associations_max_pages_stops_pagination (line 1727) | async def test_list_account_associations_max_pages_stops_pagination( method test_list_account_associations_with_next_token (line 1746) | async def test_list_account_associations_with_next_token( method test_list_account_associations_empty_result (line 1766) | async def test_list_account_associations_empty_result(self, mock_creat... method test_list_account_associations_invalid_filters (line 1781) | async def test_list_account_associations_invalid_filters(self, mock_ctx): method test_list_account_associations_aws_error (line 1788) | async def test_list_account_associations_aws_error(self, mock_create_c... FILE: src/billing-cost-management-mcp-server/tests/tools/test_billing_conductor_tools.py function _reload_bc_with_identity_decorator (line 76) | def _reload_bc_with_identity_decorator(): function mock_ctx (line 100) | def mock_ctx(): function test_billing_conductor_server_initialization (line 113) | def test_billing_conductor_server_initialization(): function test_list_billing_groups_tool_registered (line 122) | def test_list_billing_groups_tool_registered(): function test_list_account_associations_tool_registered (line 128) | def test_list_account_associations_tool_registered(): function test_list_billing_group_cost_reports_tool_registered (line 134) | def test_list_billing_group_cost_reports_tool_registered(): function test_get_billing_group_cost_report_tool_registered (line 140) | def test_get_billing_group_cost_report_tool_registered(): function test_list_pricing_rules_tool_registered (line 146) | def test_list_pricing_rules_tool_registered(): function test_list_pricing_plans_tool_registered (line 152) | def test_list_pricing_plans_tool_registered(): function test_list_custom_line_items_tool_registered (line 158) | def test_list_custom_line_items_tool_registered(): class TestListBillingGroupsTool (line 168) | class TestListBillingGroupsTool: method test_list_billing_groups_delegates_to_operation (line 171) | async def test_list_billing_groups_delegates_to_operation(self, mock_c... method test_list_billing_groups_passes_all_params (line 192) | async def test_list_billing_groups_passes_all_params(self, mock_ctx): method test_list_billing_groups_handles_operation_error (line 219) | async def test_list_billing_groups_handles_operation_error(self, mock_... method test_list_billing_groups_handles_unexpected_exception (line 235) | async def test_list_billing_groups_handles_unexpected_exception(self, ... class TestListBillingGroupCostReportsTool (line 260) | class TestListBillingGroupCostReportsTool: method test_delegates_to_operation (line 263) | async def test_delegates_to_operation(self, mock_ctx): method test_passes_all_params (line 285) | async def test_passes_all_params(self, mock_ctx): method test_handles_unexpected_exception (line 306) | async def test_handles_unexpected_exception(self, mock_ctx): class TestGetBillingGroupCostReportTool (line 330) | class TestGetBillingGroupCostReportTool: method test_delegates_to_operation (line 333) | async def test_delegates_to_operation(self, mock_ctx): method test_passes_all_params (line 355) | async def test_passes_all_params(self, mock_ctx): method test_handles_unexpected_exception (line 380) | async def test_handles_unexpected_exception(self, mock_ctx): class TestListPricingRulesTool (line 404) | class TestListPricingRulesTool: method test_delegates_to_operation (line 407) | async def test_delegates_to_operation(self, mock_ctx): method test_passes_all_params (line 423) | async def test_passes_all_params(self, mock_ctx): method test_handles_unexpected_exception (line 437) | async def test_handles_unexpected_exception(self, mock_ctx): class TestListPricingPlansTool (line 459) | class TestListPricingPlansTool: method test_delegates_to_operation (line 462) | async def test_delegates_to_operation(self, mock_ctx): method test_passes_all_params (line 478) | async def test_passes_all_params(self, mock_ctx): method test_handles_unexpected_exception (line 492) | async def test_handles_unexpected_exception(self, mock_ctx): class TestListPricingRulesForPlanTool (line 514) | class TestListPricingRulesForPlanTool: method test_delegates_to_operation (line 517) | async def test_delegates_to_operation(self, mock_ctx): method test_handles_unexpected_exception (line 533) | async def test_handles_unexpected_exception(self, mock_ctx): class TestListPricingPlansForRuleTool (line 555) | class TestListPricingPlansForRuleTool: method test_delegates_to_operation (line 558) | async def test_delegates_to_operation(self, mock_ctx): method test_handles_unexpected_exception (line 574) | async def test_handles_unexpected_exception(self, mock_ctx): class TestListCustomLineItemsTool (line 596) | class TestListCustomLineItemsTool: method test_delegates_to_operation (line 599) | async def test_delegates_to_operation(self, mock_ctx): method test_passes_all_params (line 615) | async def test_passes_all_params(self, mock_ctx): method test_handles_unexpected_exception (line 629) | async def test_handles_unexpected_exception(self, mock_ctx): class TestListCustomLineItemVersionsTool (line 651) | class TestListCustomLineItemVersionsTool: method test_delegates_to_operation (line 654) | async def test_delegates_to_operation(self, mock_ctx): method test_handles_unexpected_exception (line 672) | async def test_handles_unexpected_exception(self, mock_ctx): class TestListResourcesAssociatedToCustomLineItemTool (line 696) | class TestListResourcesAssociatedToCustomLineItemTool: method test_delegates_to_operation (line 699) | async def test_delegates_to_operation(self, mock_ctx): method test_handles_unexpected_exception (line 719) | async def test_handles_unexpected_exception(self, mock_ctx): class TestListAccountAssociationsTool (line 743) | class TestListAccountAssociationsTool: method test_list_account_associations_delegates_to_operation (line 746) | async def test_list_account_associations_delegates_to_operation(self, ... method test_list_account_associations_passes_all_params (line 769) | async def test_list_account_associations_passes_all_params(self, mock_... method test_list_account_associations_handles_unexpected_exception (line 796) | async def test_list_account_associations_handles_unexpected_exception(... FILE: src/billing-cost-management-mcp-server/tests/tools/test_budget_tools.py function mock_context (line 38) | def mock_context(): function mock_budgets_client (line 47) | def mock_budgets_client(): function mock_sts_client (line 114) | def mock_sts_client(): class TestGetAwsAccountId (line 129) | class TestGetAwsAccountId: method test_get_aws_account_id_success (line 133) | async def test_get_aws_account_id_success( method test_get_aws_account_id_error (line 150) | async def test_get_aws_account_id_error(self, mock_create_aws_client, ... class TestFormatBudgets (line 164) | class TestFormatBudgets: method test_format_budgets_basic_fields (line 167) | def test_format_budgets_basic_fields(self): method test_format_budgets_with_limit (line 187) | def test_format_budgets_with_limit(self): method test_format_budgets_with_calculated_spend (line 211) | def test_format_budgets_with_calculated_spend(self): method test_format_budgets_with_time_period (line 240) | def test_format_budgets_with_time_period(self): method test_format_budgets_with_cost_filters (line 265) | def test_format_budgets_with_cost_filters(self): method test_format_budgets_status_exceeded (line 289) | def test_format_budgets_status_exceeded(self): method test_format_budgets_status_forecasted_to_exceed (line 321) | def test_format_budgets_status_forecasted_to_exceed(self): method test_format_budgets_status_ok (line 353) | def test_format_budgets_status_ok(self): method test_format_budgets_status_calculation (line 395) | def test_format_budgets_status_calculation( class TestDescribeBudgets (line 435) | class TestDescribeBudgets: method test_describe_budgets_success (line 439) | async def test_describe_budgets_success( method test_describe_budgets_with_name_filter (line 471) | async def test_describe_budgets_with_name_filter( method test_describe_budgets_with_pagination (line 490) | async def test_describe_budgets_with_pagination( method test_describe_budgets_error (line 520) | async def test_describe_budgets_error( function test_budget_server_initialization (line 540) | def test_budget_server_initialization(): FILE: src/billing-cost-management-mcp-server/tests/tools/test_compute_optimizer_tools.py function mock_co_client (line 47) | def mock_co_client(): function mock_context (line 228) | def mock_context(): class TestGetEC2InstanceRecommendations (line 237) | class TestGetEC2InstanceRecommendations: method test_get_ec2_instance_recommendations_with_filters (line 240) | async def test_get_ec2_instance_recommendations_with_filters( class TestGetAutoScalingGroupRecommendations (line 277) | class TestGetAutoScalingGroupRecommendations: method test_basic_call (line 280) | async def test_basic_call(self, mock_context, mock_co_client): class TestGetEBSVolumeRecommendations (line 316) | class TestGetEBSVolumeRecommendations: method test_basic_call (line 319) | async def test_basic_call(self, mock_context, mock_co_client): class TestGetLambdaFunctionRecommendations (line 341) | class TestGetLambdaFunctionRecommendations: method test_basic_call (line 344) | async def test_basic_call(self, mock_context, mock_co_client): method test_with_filters (line 388) | async def test_with_filters(self, mock_context, mock_co_client): class TestGetRDSRecommendations (line 425) | class TestGetRDSRecommendations: method test_basic_call (line 428) | async def test_basic_call(self, mock_context, mock_co_client): method test_with_filters (line 468) | async def test_with_filters(self, mock_context, mock_co_client): class TestHelperFunctions (line 504) | class TestHelperFunctions: method test_format_savings_opportunity (line 507) | def test_format_savings_opportunity(self): method test_format_timestamp (line 529) | def test_format_timestamp(self): function test_compute_optimizer_server_initialization (line 541) | def test_compute_optimizer_server_initialization(): function _reload_compute_optimizer_with_identity_decorator (line 554) | def _reload_compute_optimizer_with_identity_decorator() -> Any: class TestComputeOptimizerFastMCP (line 573) | class TestComputeOptimizerFastMCP: method test_co_real_get_ec2_recommendations_reload_identity_decorator (line 576) | async def test_co_real_get_ec2_recommendations_reload_identity_decorat... method test_co_real_get_auto_scaling_group_recommendations_reload_identity_decorator (line 609) | async def test_co_real_get_auto_scaling_group_recommendations_reload_i... method test_co_real_invalid_operation_error_reload_identity_decorator (line 640) | async def test_co_real_invalid_operation_error_reload_identity_decorat... method test_co_real_enrollment_error_reload_identity_decorator (line 664) | async def test_co_real_enrollment_error_reload_identity_decorator(self... method test_co_real_resource_not_enrolled_error_reload_identity_decorator (line 688) | async def test_co_real_resource_not_enrolled_error_reload_identity_dec... method test_co_real_access_denied_error_reload_identity_decorator (line 716) | async def test_co_real_access_denied_error_reload_identity_decorator(s... method test_co_real_exception_flow_calls_handle_error_reload_identity_decorator (line 750) | async def test_co_real_exception_flow_calls_handle_error_reload_identi... method test_co_real_value_error_handling_reload_identity_decorator (line 782) | async def test_co_real_value_error_handling_reload_identity_decorator(... class TestComputeOptimizerCoverageGaps (line 811) | class TestComputeOptimizerCoverageGaps: method test_enrollment_status_access_denied_warning (line 814) | async def test_enrollment_status_access_denied_warning(self, mock_cont... method test_enrollment_status_other_error_warning (line 860) | async def test_enrollment_status_other_error_warning(self, mock_context): method test_operation_opt_in_required_error (line 906) | async def test_operation_opt_in_required_error(self, mock_context): method test_operation_validation_exception_error (line 947) | async def test_operation_validation_exception_error(self, mock_context): method test_operation_throttling_exception_error (line 987) | async def test_operation_throttling_exception_error(self, mock_context): method test_operation_service_unavailable_exception_error (line 1027) | async def test_operation_service_unavailable_exception_error(self, moc... method test_operation_resource_not_found_exception_error (line 1070) | async def test_operation_resource_not_found_exception_error(self, mock... method test_rds_recommendations_success_with_data (line 1113) | async def test_rds_recommendations_success_with_data(self, mock_context): class TestGetECSServiceRecommendations (line 1164) | class TestGetECSServiceRecommendations: method test_basic_call (line 1167) | async def test_basic_call(self, mock_context, mock_co_client): method test_with_filters (line 1255) | async def test_with_filters(self, mock_context, mock_co_client): class TestComputeOptimizerECSIntegration (line 1301) | class TestComputeOptimizerECSIntegration: method test_ecs_service_recommendations_success (line 1304) | async def test_ecs_service_recommendations_success(self, mock_context): method test_ecs_service_recommendations_invalid_filter_error (line 1330) | async def test_ecs_service_recommendations_invalid_filter_error(self, ... FILE: src/billing-cost-management-mcp-server/tests/tools/test_cost_anomaly_tools.py function mock_context (line 37) | def mock_context(): function mock_ce_client (line 46) | def mock_ce_client(): class TestGetAnomalies (line 133) | class TestGetAnomalies: method test_get_anomalies_basic (line 136) | async def test_get_anomalies_basic(self, mock_context, mock_ce_client): method test_get_anomalies_with_monitor_arn (line 168) | async def test_get_anomalies_with_monitor_arn(self, mock_context, mock... method test_get_anomalies_with_feedback (line 194) | async def test_get_anomalies_with_feedback(self, mock_context, mock_ce... method test_get_anomalies_with_max_results (line 220) | async def test_get_anomalies_with_max_results(self, mock_context, mock... method test_get_anomalies_with_total_impact_filter (line 246) | async def test_get_anomalies_with_total_impact_filter(self, mock_conte... method test_get_anomalies_with_between_operator (line 274) | async def test_get_anomalies_with_between_operator(self, mock_context,... method test_get_anomalies_with_pagination (line 304) | async def test_get_anomalies_with_pagination(self, mock_context, mock_... method test_get_anomalies_error_handling (line 346) | async def test_get_anomalies_error_handling( function test_cost_anomaly_server_initialization (line 380) | def test_cost_anomaly_server_initialization(): function _reload_cost_anomaly_with_identity_decorator (line 391) | def _reload_cost_anomaly_with_identity_decorator(): class TestCostAnomalyFastMCP (line 410) | class TestCostAnomalyFastMCP: method test_ca_real_invalid_start_date_format (line 413) | async def test_ca_real_invalid_start_date_format(self, mock_context): method test_ca_real_invalid_end_date_format (line 427) | async def test_ca_real_invalid_end_date_format(self, mock_context): method test_ca_real_start_date_after_end_date (line 441) | async def test_ca_real_start_date_after_end_date(self, mock_context): method test_ca_real_future_end_date (line 454) | async def test_ca_real_future_end_date(self, mock_context): method test_ca_real_old_start_date_warning (line 471) | async def test_ca_real_old_start_date_warning(self, mock_context): method test_ca_real_current_year_early_january_warning (line 507) | async def test_ca_real_current_year_early_january_warning(self, mock_c... method test_ca_real_invalid_feedback (line 543) | async def test_ca_real_invalid_feedback(self, mock_context): method test_ca_real_invalid_total_impact_operator (line 562) | async def test_ca_real_invalid_total_impact_operator(self, mock_context): method test_ca_real_between_operator_missing_end_value (line 580) | async def test_ca_real_between_operator_missing_end_value(self, mock_c... method test_ca_real_value_error_handling (line 602) | async def test_ca_real_value_error_handling(self, mock_context): method test_ca_real_client_error_2024_data (line 622) | async def test_ca_real_client_error_2024_data(self, mock_context): method test_ca_real_client_error_validation (line 652) | async def test_ca_real_client_error_validation(self, mock_context): method test_ca_real_successful_call (line 678) | async def test_ca_real_successful_call(self, mock_context): class TestGetAnomaliesAdditional (line 709) | class TestGetAnomaliesAdditional: method test_get_anomalies_with_all_parameters (line 712) | async def test_get_anomalies_with_all_parameters(self, mock_context, m... method test_get_anomalies_formatting_with_all_fields (line 747) | async def test_get_anomalies_formatting_with_all_fields(self, mock_con... method test_get_anomalies_no_optional_fields (line 810) | async def test_get_anomalies_no_optional_fields(self, mock_context, mo... FILE: src/billing-cost-management-mcp-server/tests/tools/test_cost_anomaly_tools_enhanced.py function mock_context (line 27) | def mock_context(): function mock_ce_client (line 37) | def mock_ce_client(): class TestGetAnomalies (line 144) | class TestGetAnomalies: method test_get_anomalies_basic (line 147) | async def test_get_anomalies_basic(self, mock_context, mock_ce_client): method test_get_anomalies_with_monitor_arn (line 179) | async def test_get_anomalies_with_monitor_arn(self, mock_context, mock... method test_get_anomalies_with_feedback (line 205) | async def test_get_anomalies_with_feedback(self, mock_context, mock_ce... method test_get_anomalies_with_max_results (line 231) | async def test_get_anomalies_with_max_results(self, mock_context, mock... method test_get_anomalies_with_total_impact_filter (line 257) | async def test_get_anomalies_with_total_impact_filter(self, mock_conte... method test_get_anomalies_with_between_operator (line 285) | async def test_get_anomalies_with_between_operator(self, mock_context,... method test_get_anomalies_with_pagination (line 315) | async def test_get_anomalies_with_pagination(self, mock_context, mock_... method test_get_anomalies_error_handling (line 393) | async def test_get_anomalies_error_handling( function test_cost_anomaly_server_initialization (line 427) | def test_cost_anomaly_server_initialization(): FILE: src/billing-cost-management-mcp-server/tests/tools/test_cost_comparison_tools.py function cost_comparison (line 36) | async def cost_comparison(ctx, operation, **kwargs): function mock_context (line 109) | def mock_context(): function mock_ce_client (line 118) | def mock_ce_client(): class TestGetCostAndUsageComparisons (line 207) | class TestGetCostAndUsageComparisons: method test_get_cost_and_usage_comparisons_basic (line 210) | async def test_get_cost_and_usage_comparisons_basic(self, mock_context... method test_get_cost_and_usage_comparisons_with_group_by (line 254) | async def test_get_cost_and_usage_comparisons_with_group_by( method test_get_cost_and_usage_comparisons_with_filter (line 288) | async def test_get_cost_and_usage_comparisons_with_filter(self, mock_c... method test_get_cost_and_usage_comparisons_with_max_results (line 319) | async def test_get_cost_and_usage_comparisons_with_max_results( method test_get_cost_and_usage_comparisons_with_billing_view_arn (line 351) | async def test_get_cost_and_usage_comparisons_with_billing_view_arn( method test_get_cost_and_usage_comparisons_with_pagination (line 383) | async def test_get_cost_and_usage_comparisons_with_pagination( method test_get_cost_and_usage_comparisons_error_handling (line 438) | async def test_get_cost_and_usage_comparisons_error_handling( class TestGetCostComparisonDrivers (line 477) | class TestGetCostComparisonDrivers: method test_get_cost_comparison_drivers_basic (line 480) | async def test_get_cost_comparison_drivers_basic(self, mock_context, m... method test_get_cost_comparison_drivers_with_group_by (line 525) | async def test_get_cost_comparison_drivers_with_group_by(self, mock_co... method test_get_cost_comparison_drivers_with_filter (line 557) | async def test_get_cost_comparison_drivers_with_filter(self, mock_cont... method test_get_cost_comparison_drivers_with_max_results (line 588) | async def test_get_cost_comparison_drivers_with_max_results( method test_get_cost_comparison_drivers_with_billing_view_arn (line 620) | async def test_get_cost_comparison_drivers_with_billing_view_arn( method test_get_cost_comparison_drivers_with_pagination (line 652) | async def test_get_cost_comparison_drivers_with_pagination(self, mock_... method test_get_cost_comparison_drivers_error_handling (line 704) | async def test_get_cost_comparison_drivers_error_handling( class TestCostComparison (line 743) | class TestCostComparison: method test_cost_comparison_getCostAndUsageComparisons (line 746) | async def test_cost_comparison_getCostAndUsageComparisons(self, mock_c... method test_cost_comparison_getCostComparisonDrivers (line 762) | async def test_cost_comparison_getCostComparisonDrivers(self, mock_con... method test_cost_comparison_with_all_parameters (line 778) | async def test_cost_comparison_with_all_parameters(self, mock_context): method test_cost_comparison_unsupported_operation (line 798) | async def test_cost_comparison_unsupported_operation(self, mock_context): method test_cost_comparison_error_handling (line 815) | async def test_cost_comparison_error_handling(self, mock_context): function test_cost_comparison_server_initialization (line 824) | def test_cost_comparison_server_initialization(): FILE: src/billing-cost-management-mcp-server/tests/tools/test_cost_explorer_operations.py function mock_context (line 33) | def mock_context(): function mock_ce_client (line 43) | def mock_ce_client(): class TestGetCostAndUsage (line 121) | class TestGetCostAndUsage: method test_basic_call (line 124) | async def test_basic_call(self, mock_context, mock_ce_client): method test_with_json_parameters (line 144) | async def test_with_json_parameters(self, mock_context, mock_ce_client): method test_with_pagination (line 177) | async def test_with_pagination(self, mock_context, mock_ce_client): method test_error_handling (line 205) | async def test_error_handling(self, mock_context, mock_ce_client): class TestGetCostAndUsageWithResources (line 220) | class TestGetCostAndUsageWithResources: method test_basic_call (line 223) | async def test_basic_call(self, mock_context, mock_ce_client): method test_date_adjustment_for_14_day_limit (line 243) | async def test_date_adjustment_for_14_day_limit(self, mock_context, mo... method test_with_json_parameters (line 261) | async def test_with_json_parameters(self, mock_context, mock_ce_client): method test_error_handling (line 294) | async def test_error_handling(self, mock_context, mock_ce_client): class TestGetDimensionValues (line 309) | class TestGetDimensionValues: method test_basic_call (line 312) | async def test_basic_call(self, mock_context, mock_ce_client): method test_with_search_string (line 331) | async def test_with_search_string(self, mock_context, mock_ce_client): method test_with_filter (line 344) | async def test_with_filter(self, mock_context, mock_ce_client): method test_with_max_results (line 375) | async def test_with_max_results(self, mock_context, mock_ce_client): method test_error_handling (line 388) | async def test_error_handling(self, mock_context, mock_ce_client): class TestGetCostForecast (line 403) | class TestGetCostForecast: method test_basic_call (line 406) | async def test_basic_call(self, mock_context, mock_ce_client): method test_default_future_dates (line 427) | async def test_default_future_dates(self, mock_context, mock_ce_client): method test_with_filter (line 443) | async def test_with_filter(self, mock_context, mock_ce_client): method test_with_custom_prediction_interval (line 474) | async def test_with_custom_prediction_interval(self, mock_context, moc... method test_with_different_granularity (line 486) | async def test_with_different_granularity(self, mock_context, mock_ce_... method test_error_handling (line 498) | async def test_error_handling(self, mock_context, mock_ce_client): class TestGetUsageForecast (line 513) | class TestGetUsageForecast: method test_basic_call (line 516) | async def test_basic_call(self, mock_context, mock_ce_client): method test_default_future_dates (line 537) | async def test_default_future_dates(self, mock_context, mock_ce_client): method test_with_filter (line 553) | async def test_with_filter(self, mock_context, mock_ce_client): method test_with_custom_prediction_interval (line 584) | async def test_with_custom_prediction_interval(self, mock_context, moc... method test_with_different_granularity (line 596) | async def test_with_different_granularity(self, mock_context, mock_ce_... method test_error_handling (line 608) | async def test_error_handling(self, mock_context, mock_ce_client): class TestGetTags (line 623) | class TestGetTags: method test_get_tags_basic (line 626) | async def test_get_tags_basic(self, mock_context, mock_ce_client): method test_get_tag_values (line 643) | async def test_get_tag_values(self, mock_context, mock_ce_client): method test_with_search_string (line 659) | async def test_with_search_string(self, mock_context, mock_ce_client): method test_error_handling (line 671) | async def test_error_handling(self, mock_context, mock_ce_client): class TestGetCostCategories (line 686) | class TestGetCostCategories: method test_get_cost_categories_basic (line 689) | async def test_get_cost_categories_basic(self, mock_context, mock_ce_c... method test_get_cost_category_values (line 706) | async def test_get_cost_category_values(self, mock_context, mock_ce_cl... method test_with_search_string (line 722) | async def test_with_search_string(self, mock_context, mock_ce_client): method test_error_handling (line 734) | async def test_error_handling(self, mock_context, mock_ce_client): class TestGetSavingsPlansUtilization (line 749) | class TestGetSavingsPlansUtilization: method test_basic_call (line 752) | async def test_basic_call(self, mock_context, mock_ce_client): method test_with_filter (line 771) | async def test_with_filter(self, mock_context, mock_ce_client): method test_error_handling (line 801) | async def test_error_handling(self, mock_context, mock_ce_client): FILE: src/billing-cost-management-mcp-server/tests/tools/test_cost_explorer_tools.py function cost_explorer (line 49) | async def cost_explorer(ctx, operation, **kwargs): function mock_ce_client (line 141) | def mock_ce_client(): function mock_context (line 204) | def mock_context(): function test_cost_explorer_get_cost_and_usage (line 213) | async def test_cost_explorer_get_cost_and_usage(mock_context, mock_ce_cl... function test_cost_explorer_get_dimension_values (line 267) | async def test_cost_explorer_get_dimension_values(mock_context, mock_ce_... function test_cost_explorer_get_cost_forecast (line 323) | async def test_cost_explorer_get_cost_forecast(mock_context, mock_ce_cli... function test_cost_explorer_missing_required_parameter (line 386) | async def test_cost_explorer_missing_required_parameter(mock_context, mo... function test_usage_forecast (line 416) | async def test_usage_forecast(mock_context, mock_ce_client): function test_cost_and_usage_with_resources (line 464) | async def test_cost_and_usage_with_resources(mock_context, mock_ce_client): function test_get_tags_and_values (line 501) | async def test_get_tags_and_values(mock_context, mock_ce_client): function test_get_cost_categories (line 545) | async def test_get_cost_categories(mock_context, mock_ce_client): function test_get_savings_plans_utilization (line 589) | async def test_get_savings_plans_utilization(mock_context, mock_ce_client): function test_cost_explorer_unknown_operation (line 624) | async def test_cost_explorer_unknown_operation(mock_context, mock_ce_cli... function test_cost_explorer_handle_exception (line 653) | async def test_cost_explorer_handle_exception(mock_context, mock_ce_clie... function test_cost_explorer_server_initialization (line 692) | def test_cost_explorer_server_initialization(): function test_cost_explorer_main_function (line 706) | async def test_cost_explorer_main_function(): class TestCostExplorerOperations (line 747) | class TestCostExplorerOperations: method test_get_cost_and_usage_calls_client (line 751) | async def test_get_cost_and_usage_calls_client(self): method test_get_dimension_values_calls_client (line 763) | async def test_get_dimension_values_calls_client(self): method test_get_cost_forecast_calls_client (line 775) | async def test_get_cost_forecast_calls_client(self): method test_get_tags_calls_client (line 787) | async def test_get_tags_calls_client(self): method test_get_cost_categories_calls_client (line 797) | async def test_get_cost_categories_calls_client(self): function test_cost_explorer_missing_dimension (line 808) | async def test_cost_explorer_missing_dimension(): function test_cost_explorer_missing_metric_forecast (line 817) | async def test_cost_explorer_missing_metric_forecast(): function _reload_ce_with_identity_decorator (line 825) | def _reload_ce_with_identity_decorator(): function test_ce_real_get_cost_and_usage_passes_all_args_reload_identity_decorator (line 844) | async def test_ce_real_get_cost_and_usage_passes_all_args_reload_identit... function test_ce_real_get_cost_and_usage_with_resources_passes_args_reload_identity_decorator (line 887) | async def test_ce_real_get_cost_and_usage_with_resources_passes_args_rel... function test_ce_real_get_dimension_values_passes_args_reload_identity_decorator (line 930) | async def test_ce_real_get_dimension_values_passes_args_reload_identity_... function test_ce_real_get_dimension_values_missing_dimension_error_reload_identity_decorator (line 973) | async def test_ce_real_get_dimension_values_missing_dimension_error_relo... function test_ce_real_get_cost_forecast_passes_args_reload_identity_decorator (line 995) | async def test_ce_real_get_cost_forecast_passes_args_reload_identity_dec... function test_ce_real_get_cost_forecast_missing_metric_error_reload_identity_decorator (line 1034) | async def test_ce_real_get_cost_forecast_missing_metric_error_reload_ide... function test_ce_real_get_usage_forecast_passes_args_reload_identity_decorator (line 1056) | async def test_ce_real_get_usage_forecast_passes_args_reload_identity_de... function test_ce_real_get_tags_and_values_routing_reload_identity_decorator (line 1095) | async def test_ce_real_get_tags_and_values_routing_reload_identity_decor... function test_ce_real_get_cost_categories_and_values_routing_reload_identity_decorator (line 1158) | async def test_ce_real_get_cost_categories_and_values_routing_reload_ide... function test_ce_real_get_savings_plans_utilization_passes_args_reload_identity_decorator (line 1222) | async def test_ce_real_get_savings_plans_utilization_passes_args_reload_... function test_ce_real_unknown_operation_error_reload_identity_decorator (line 1263) | async def test_ce_real_unknown_operation_error_reload_identity_decorator... function test_ce_real_exception_flow_calls_handle_error_reload_identity_decorator (line 1276) | async def test_ce_real_exception_flow_calls_handle_error_reload_identity... FILE: src/billing-cost-management-mcp-server/tests/tools/test_cost_optimization_hub_helpers.py function mock_context (line 30) | def mock_context(): function mock_coh_client (line 38) | def mock_coh_client(): class TestFormatHelpers (line 124) | class TestFormatHelpers: method test_format_timestamp_with_datetime (line 127) | def test_format_timestamp_with_datetime(self): method test_format_timestamp_with_none (line 133) | def test_format_timestamp_with_none(self): class TestListRecommendations (line 140) | class TestListRecommendations: method test_basic_call (line 143) | async def test_basic_call(self, mock_context, mock_coh_client): method test_with_filters_and_next_token (line 191) | async def test_with_filters_and_next_token(self, mock_context, mock_co... class TestGetRecommendation (line 211) | class TestGetRecommendation: method test_basic_call (line 214) | async def test_basic_call(self, mock_context, mock_coh_client): class TestListRecommendationSummaries (line 257) | class TestListRecommendationSummaries: method test_basic_call (line 260) | async def test_basic_call(self, mock_context, mock_coh_client): method test_with_filters_and_pagination (line 312) | async def test_with_filters_and_pagination(self, mock_context, mock_co... class TestListRecommendationsErrorHandling (line 332) | class TestListRecommendationsErrorHandling: method test_enrollment_not_enrolled (line 335) | async def test_enrollment_not_enrolled(self, mock_context, mock_coh_cl... method test_enrollment_check_access_denied (line 344) | async def test_enrollment_check_access_denied(self, mock_context, mock... method test_enrollment_check_other_error (line 362) | async def test_enrollment_check_other_error(self, mock_context, mock_c... method test_enrollment_check_non_client_error (line 380) | async def test_enrollment_check_non_client_error(self, mock_context, m... method test_empty_recommendations (line 391) | async def test_empty_recommendations(self, mock_context, mock_coh_clie... method test_pagination_with_max_results (line 400) | async def test_pagination_with_max_results(self, mock_context, mock_co... method test_validation_exception (line 433) | async def test_validation_exception(self, mock_context, mock_coh_client): method test_access_denied_exception (line 448) | async def test_access_denied_exception(self, mock_context, mock_coh_cl... method test_resource_not_found_exception (line 465) | async def test_resource_not_found_exception(self, mock_context, mock_c... method test_other_client_error_reraise (line 482) | async def test_other_client_error_reraise(self, mock_context, mock_coh... method test_non_client_error_reraise (line 495) | async def test_non_client_error_reraise(self, mock_context, mock_coh_c... class TestGetRecommendationErrorHandling (line 505) | class TestGetRecommendationErrorHandling: method test_empty_recommendation_response (line 508) | async def test_empty_recommendation_response(self, mock_context, mock_... method test_no_recommendation_key (line 518) | async def test_no_recommendation_key(self, mock_context, mock_coh_clie... method test_validation_exception (line 529) | async def test_validation_exception(self, mock_context, mock_coh_client): method test_access_denied_exception (line 548) | async def test_access_denied_exception(self, mock_context, mock_coh_cl... method test_resource_not_found_exception (line 567) | async def test_resource_not_found_exception(self, mock_context, mock_c... method test_other_client_error_reraise (line 586) | async def test_other_client_error_reraise(self, mock_context, mock_coh... method test_non_client_error_reraise (line 601) | async def test_non_client_error_reraise(self, mock_context, mock_coh_c... class TestListRecommendationSummariesErrorHandling (line 613) | class TestListRecommendationSummariesErrorHandling: method test_empty_summaries (line 616) | async def test_empty_summaries(self, mock_context, mock_coh_client): method test_pagination_with_max_results (line 627) | async def test_pagination_with_max_results(self, mock_context, mock_co... method test_validation_exception (line 662) | async def test_validation_exception(self, mock_context, mock_coh_client): method test_access_denied_exception (line 682) | async def test_access_denied_exception(self, mock_context, mock_coh_cl... method test_unauthorized_exception (line 701) | async def test_unauthorized_exception(self, mock_context, mock_coh_cli... method test_resource_not_found_exception (line 718) | async def test_resource_not_found_exception(self, mock_context, mock_c... method test_other_aws_error (line 737) | async def test_other_aws_error(self, mock_context, mock_coh_client): method test_non_aws_error (line 758) | async def test_non_aws_error(self, mock_context, mock_coh_client): class TestRecommendationFormatting (line 775) | class TestRecommendationFormatting: method test_recommendation_without_optional_fields (line 778) | async def test_recommendation_without_optional_fields(self, mock_conte... method test_recommendation_with_cost_breakdown_no_implementation (line 800) | async def test_recommendation_with_cost_breakdown_no_implementation( class TestPaginationEdgeCases (line 824) | class TestPaginationEdgeCases: method test_list_recommendations_single_page_no_token (line 827) | async def test_list_recommendations_single_page_no_token(self, mock_co... method test_list_recommendation_summaries_single_page_no_token (line 846) | async def test_list_recommendation_summaries_single_page_no_token( FILE: src/billing-cost-management-mcp-server/tests/tools/test_cost_optimization_hub_tools.py function cost_optimization_hub (line 34) | async def cost_optimization_hub(ctx, operation, **kwargs): function mock_context (line 115) | def mock_context(): function mock_coh_client (line 124) | def mock_coh_client(): function test_invalid_operation (line 198) | async def test_invalid_operation(mock_context): function test_missing_operation (line 207) | async def test_missing_operation(mock_context): function test_missing_group_by_for_summaries (line 215) | async def test_missing_group_by_for_summaries(mock_context): function test_missing_resource_params_for_get_recommendation (line 224) | async def test_missing_resource_params_for_get_recommendation(mock_conte... function test_get_recommendation_summaries_success (line 233) | async def test_get_recommendation_summaries_success(mock_context): function test_list_recommendations_success (line 246) | async def test_list_recommendations_success(mock_context): function test_get_recommendation_success (line 257) | async def test_get_recommendation_success(mock_context): function _reload_coh_with_identity_decorator (line 272) | def _reload_coh_with_identity_decorator(): function test_coh_real_summaries_reload_identity_decorator (line 293) | async def test_coh_real_summaries_reload_identity_decorator(mock_context): function test_coh_real_list_recommendations_reload_identity_decorator (line 340) | async def test_coh_real_list_recommendations_reload_identity_decorator(m... function test_coh_real_get_recommendation_success_reload_identity_decorator (line 375) | async def test_coh_real_get_recommendation_success_reload_identity_decor... function test_coh_real_get_recommendation_missing_params_reload_identity_decorator (line 403) | async def test_coh_real_get_recommendation_missing_params_reload_identit... function test_coh_real_unsupported_operation_reload_identity_decorator (line 420) | async def test_coh_real_unsupported_operation_reload_identity_decorator(... function test_coh_real_summaries_default_group_by_reload_identity_decorator (line 434) | async def test_coh_real_summaries_default_group_by_reload_identity_decor... function test_coh_real_list_recommendations_no_filters_reload_identity_decorator (line 451) | async def test_coh_real_list_recommendations_no_filters_reload_identity_... function test_coh_real_invalid_group_by_reload_identity_decorator (line 488) | async def test_coh_real_invalid_group_by_reload_identity_decorator(mock_... function test_coh_real_summaries_exception_reload_identity_decorator (line 504) | async def test_coh_real_summaries_exception_reload_identity_decorator(mo... function test_coh_real_list_recommendations_exception_reload_identity_decorator (line 530) | async def test_coh_real_list_recommendations_exception_reload_identity_d... function test_coh_real_get_recommendation_missing_resource_id_reload_identity_decorator (line 553) | async def test_coh_real_get_recommendation_missing_resource_id_reload_id... function test_coh_real_main_exception_reload_identity_decorator (line 572) | async def test_coh_real_main_exception_reload_identity_decorator(mock_co... FILE: src/billing-cost-management-mcp-server/tests/tools/test_free_tier_usage_tools_new.py function free_tier_usage (line 36) | async def free_tier_usage(ctx, operation, **kwargs): function mock_context (line 73) | def mock_context(): function mock_freetier_client (line 82) | def mock_freetier_client(): class TestCreateFreeTierUsageSummary (line 133) | class TestCreateFreeTierUsageSummary: method test_create_free_tier_usage_summary_categories (line 136) | def test_create_free_tier_usage_summary_categories(self): method test_create_free_tier_usage_summary_sorting (line 175) | def test_create_free_tier_usage_summary_sorting(self): method test_create_free_tier_usage_summary_empty_input (line 221) | def test_create_free_tier_usage_summary_empty_input(self): method test_create_free_tier_usage_summary_edge_cases (line 242) | def test_create_free_tier_usage_summary_edge_cases(self): class TestGetFreeTierUsageData (line 285) | class TestGetFreeTierUsageData: method test_get_free_tier_usage_data_basic (line 288) | async def test_get_free_tier_usage_data_basic(self, mock_context, mock... class TestFreeTierUsage (line 307) | class TestFreeTierUsage: method test_free_tier_usage_get_free_tier_usage (line 310) | async def test_free_tier_usage_get_free_tier_usage(self, mock_context): method test_free_tier_usage_with_all_parameters (line 324) | async def test_free_tier_usage_with_all_parameters(self, mock_context): method test_free_tier_usage_unsupported_operation (line 337) | async def test_free_tier_usage_unsupported_operation(self, mock_context): method test_free_tier_usage_error_handling (line 349) | async def test_free_tier_usage_error_handling(self, mock_context): class TestFreeTierUsageEdgeCases (line 359) | class TestFreeTierUsageEdgeCases: method mock_context (line 363) | def mock_context(self): method test_max_results_boundary_conditions (line 372) | async def test_max_results_boundary_conditions(self, mock_context): method test_filter_parameter_handling (line 390) | async def test_filter_parameter_handling(self, mock_context): method test_pagination_with_next_token (line 408) | async def test_pagination_with_next_token(self, mock_context): function test_free_tier_usage_server_initialization (line 429) | def test_free_tier_usage_server_initialization(): FILE: src/billing-cost-management-mcp-server/tests/tools/test_recommendation_details_tools.py function mock_context (line 43) | def mock_context(): function mock_coh_client (line 52) | def mock_coh_client(): function mock_ce_client (line 91) | def mock_ce_client(): function mock_compute_optimizer_client (line 167) | def mock_compute_optimizer_client(): function test_format_timestamp (line 335) | def test_format_timestamp(): function test_format_base_recommendation (line 351) | def test_format_base_recommendation(): class TestGetSavingsPlansRecommendation (line 402) | class TestGetSavingsPlansRecommendation: method test_get_savings_plans_recommendation_success (line 405) | async def test_get_savings_plans_recommendation_success(self, mock_con... method test_get_savings_plans_recommendation_missing_key (line 442) | async def test_get_savings_plans_recommendation_missing_key( method test_get_savings_plans_recommendation_missing_params (line 463) | async def test_get_savings_plans_recommendation_missing_params( method test_get_savings_plans_recommendation_api_error (line 488) | async def test_get_savings_plans_recommendation_api_error(self, mock_c... class TestGetReservedInstancesRecommendation (line 524) | class TestGetReservedInstancesRecommendation: method test_get_reserved_instances_recommendation_success (line 527) | async def test_get_reserved_instances_recommendation_success( method test_get_reserved_instances_recommendation_missing_key (line 567) | async def test_get_reserved_instances_recommendation_missing_key( method test_get_reserved_instances_recommendation_missing_params (line 588) | async def test_get_reserved_instances_recommendation_missing_params( method test_get_reserved_instances_recommendation_api_error (line 613) | async def test_get_reserved_instances_recommendation_api_error( class TestGetCostExplorerData (line 650) | class TestGetCostExplorerData: method test_get_cost_explorer_data_savings_plans (line 656) | async def test_get_cost_explorer_data_savings_plans( method test_get_cost_explorer_data_reserved_instances (line 676) | async def test_get_cost_explorer_data_reserved_instances( method test_get_cost_explorer_data_unsupported_type (line 693) | async def test_get_cost_explorer_data_unsupported_type(self, mock_cont... class TestGetComputeOptimizerData (line 709) | class TestGetComputeOptimizerData: method test_get_compute_optimizer_data_missing_arn (line 712) | async def test_get_compute_optimizer_data_missing_arn(self, mock_conte... method test_get_compute_optimizer_data_idle_resource (line 731) | async def test_get_compute_optimizer_data_idle_resource( method test_get_compute_optimizer_data_ec2_instance (line 759) | async def test_get_compute_optimizer_data_ec2_instance( method test_get_compute_optimizer_data_ebs_volume (line 784) | async def test_get_compute_optimizer_data_ebs_volume( method test_get_compute_optimizer_data_ec2_asg (line 809) | async def test_get_compute_optimizer_data_ec2_asg( method test_get_compute_optimizer_data_lambda_function (line 836) | async def test_get_compute_optimizer_data_lambda_function( method test_get_compute_optimizer_data_ecs_service (line 861) | async def test_get_compute_optimizer_data_ecs_service( method test_get_compute_optimizer_data_rds_instance (line 886) | async def test_get_compute_optimizer_data_rds_instance( method test_get_compute_optimizer_data_unsupported_type (line 911) | async def test_get_compute_optimizer_data_unsupported_type( method test_get_compute_optimizer_data_api_error (line 934) | async def test_get_compute_optimizer_data_api_error( class TestGetTemplateForRecommendation (line 957) | class TestGetTemplateForRecommendation: method test_get_template_for_recommendation_by_action_type (line 962) | def test_get_template_for_recommendation_by_action_type(self, mock_fil... method test_get_template_for_recommendation_by_resource_type (line 981) | def test_get_template_for_recommendation_by_resource_type(self, mock_f... method test_get_template_for_recommendation_no_template_file (line 1000) | def test_get_template_for_recommendation_no_template_file(self, mock_e... method test_get_template_for_recommendation_unsupported_type (line 1015) | def test_get_template_for_recommendation_unsupported_type(self): class TestProcessRecommendation (line 1032) | class TestProcessRecommendation: method test_process_recommendation_compute_resource (line 1044) | async def test_process_recommendation_compute_resource( method test_process_recommendation_savings_plans (line 1079) | async def test_process_recommendation_savings_plans( method test_process_recommendation_reserved_instances (line 1113) | async def test_process_recommendation_reserved_instances( method test_process_recommendation_no_template (line 1147) | async def test_process_recommendation_no_template( function test_recommendation_details_server_initialization (line 1170) | def test_recommendation_details_server_initialization(): FILE: src/billing-cost-management-mcp-server/tests/tools/test_ri_performance_tools.py function ri_performance (line 38) | async def ri_performance(ctx, operation, **kwargs): function mock_context (line 82) | def mock_context(): function mock_ce_client (line 91) | def mock_ce_client(): function test_format_coverage_metrics (line 228) | def test_format_coverage_metrics(): function test_format_utilization_metrics (line 273) | def test_format_utilization_metrics(): class TestGetReservationCoverage (line 303) | class TestGetReservationCoverage: method test_get_reservation_coverage_basic (line 310) | async def test_get_reservation_coverage_basic( method test_get_reservation_coverage_with_options (line 361) | async def test_get_reservation_coverage_with_options( method test_get_reservation_coverage_error (line 417) | async def test_get_reservation_coverage_error( class TestGetReservationUtilization (line 450) | class TestGetReservationUtilization: method test_get_reservation_utilization_basic (line 457) | async def test_get_reservation_utilization_basic( method test_get_reservation_utilization_with_options (line 508) | async def test_get_reservation_utilization_with_options( method test_get_reservation_utilization_error (line 560) | async def test_get_reservation_utilization_error( class TestRIPerformance (line 592) | class TestRIPerformance: method test_ri_performance_coverage (line 595) | async def test_ri_performance_coverage(self, mock_context): method test_ri_performance_utilization (line 615) | async def test_ri_performance_utilization(self, mock_context): method test_ri_performance_with_all_params (line 635) | async def test_ri_performance_with_all_params(self, mock_context): method test_ri_performance_unsupported_operation (line 661) | async def test_ri_performance_unsupported_operation(self, mock_context): function test_ri_performance_server_initialization (line 676) | def test_ri_performance_server_initialization(): FILE: src/billing-cost-management-mcp-server/tests/tools/test_sp_performance_tools.py function sp_performance (line 37) | async def sp_performance(ctx, operation, **kwargs): function mock_context (line 75) | def mock_context(): function mock_ce_client (line 84) | def mock_ce_client(): class TestGetSavingsPlansUtilizationDetails (line 204) | class TestGetSavingsPlansUtilizationDetails: method test_get_savings_plans_utilization_details_basic (line 211) | async def test_get_savings_plans_utilization_details_basic( method test_get_savings_plans_utilization_details_with_filter (line 271) | async def test_get_savings_plans_utilization_details_with_filter( method test_get_savings_plans_utilization_details_with_max_results (line 315) | async def test_get_savings_plans_utilization_details_with_max_results( method test_get_savings_plans_utilization_details_error (line 349) | async def test_get_savings_plans_utilization_details_error( class TestGetSavingsPlansUtilization (line 378) | class TestGetSavingsPlansUtilization: method test_get_savings_plans_utilization_basic (line 385) | async def test_get_savings_plans_utilization_basic( method test_get_savings_plans_utilization_with_filter (line 457) | async def test_get_savings_plans_utilization_with_filter( method test_get_savings_plans_utilization_error (line 500) | async def test_get_savings_plans_utilization_error( class TestGetSavingsPlansCoverage (line 529) | class TestGetSavingsPlansCoverage: method test_get_savings_plans_coverage_basic (line 536) | async def test_get_savings_plans_coverage_basic( method test_get_savings_plans_coverage_with_options (line 587) | async def test_get_savings_plans_coverage_with_options( method test_get_savings_plans_coverage_error (line 638) | async def test_get_savings_plans_coverage_error( class TestSPPerformance (line 669) | class TestSPPerformance: method test_sp_performance_coverage (line 672) | async def test_sp_performance_coverage(self, mock_context): method test_sp_performance_utilization (line 692) | async def test_sp_performance_utilization(self, mock_context): method test_sp_performance_utilization_details (line 712) | async def test_sp_performance_utilization_details(self, mock_context): method test_sp_performance_unsupported_operation (line 727) | async def test_sp_performance_unsupported_operation(self, mock_context): function test_sp_performance_server_initialization (line 743) | def test_sp_performance_server_initialization(): function mock_context_async (line 756) | def mock_context_async(): class TestCoverageGaps (line 766) | class TestCoverageGaps: method test_sp_performance_unsupported_operation (line 769) | async def test_sp_performance_unsupported_operation(self, mock_context... method test_savings_plans_utilization_empty_data (line 783) | async def test_savings_plans_utilization_empty_data( method test_savings_plans_utilization_malformed_data (line 813) | async def test_savings_plans_utilization_malformed_data( method test_savings_plans_utilization_total_error (line 863) | async def test_savings_plans_utilization_total_error( method test_savings_plans_utilization_details_empty_data (line 906) | async def test_savings_plans_utilization_details_empty_data( method test_savings_plans_utilization_details_malformed_data (line 937) | async def test_savings_plans_utilization_details_malformed_data( method test_savings_plans_utilization_details_with_valid_attributes (line 988) | async def test_savings_plans_utilization_details_with_valid_attributes( method test_savings_plans_utilization_details_summary_stats_error (line 1049) | async def test_savings_plans_utilization_details_summary_stats_error( method test_savings_plans_utilization_total_with_none_value (line 1095) | async def test_savings_plans_utilization_total_with_none_value( FILE: src/billing-cost-management-mcp-server/tests/tools/test_storage_lens_tools.py function mock_storage_lens_run_query (line 45) | async def mock_storage_lens_run_query(ctx, query, **kwargs): function storage_lens_query_tool (line 68) | def storage_lens_query_tool(mock_context): function mock_s3_client (line 88) | def mock_s3_client(): function mock_athena_client (line 115) | def mock_athena_client(): function mock_context (line 150) | def mock_context(): function manifest_handler (line 159) | def manifest_handler(mock_context): function athena_handler (line 171) | def athena_handler(mock_context): function test_storage_lens_run_query (line 183) | async def test_storage_lens_run_query(mock_context): function test_storage_lens_run_query_missing_manifest (line 218) | async def test_storage_lens_run_query_missing_manifest(mock_context): function test_storage_lens_run_query_table_replacement (line 242) | async def test_storage_lens_run_query_table_replacement(mock_context): function test_athena_handler_execute_query_integration (line 286) | async def test_athena_handler_execute_query_integration(mock_context, mo... function test_athena_handler_setup_table_integration (line 308) | async def test_athena_handler_setup_table_integration(mock_context, mock... function test_server_initialization (line 336) | def test_server_initialization(): function _reload_storage_lens_with_identity_decorator (line 351) | def _reload_storage_lens_with_identity_decorator(): function test_storage_lens_real_missing_manifest_reload_identity_decorator (line 370) | async def test_storage_lens_real_missing_manifest_reload_identity_decora... function test_storage_lens_real_placeholder_replacement_reload_identity_decorator (line 384) | async def test_storage_lens_real_placeholder_replacement_reload_identity... function test_storage_lens_real_from_insertion_reload_identity_decorator (line 404) | async def test_storage_lens_real_from_insertion_reload_identity_decorato... function test_storage_lens_real_query_missing_table_reference_error_reload_identity_decorator (line 425) | async def test_storage_lens_real_query_missing_table_reference_error_rel... function test_athena_handler_determine_output_location_trailing_slash (line 463) | async def test_athena_handler_determine_output_location_trailing_slash(m... function test_athena_handler_determine_output_location_no_trailing_slash (line 473) | async def test_athena_handler_determine_output_location_no_trailing_slas... function test_athena_handler_execute_query_exception_logs_and_raises (line 483) | async def test_athena_handler_execute_query_exception_logs_and_raises(mo... function test_manifest_handler_get_manifest_exact_path (line 506) | async def test_manifest_handler_get_manifest_exact_path(mock_context, ma... function test_manifest_handler_read_manifest_file_error (line 524) | async def test_manifest_handler_read_manifest_file_error(mock_context, m... function test_manifest_handler_find_latest_manifest (line 538) | async def test_manifest_handler_find_latest_manifest(mock_context, manif... function test_manifest_handler_find_latest_manifest_empty (line 576) | async def test_manifest_handler_find_latest_manifest_empty(mock_context,... function test_manifest_handler_find_latest_manifest_no_contents (line 594) | async def test_manifest_handler_find_latest_manifest_no_contents(mock_co... function test_manifest_handler_extract_data_location (line 611) | def test_manifest_handler_extract_data_location(manifest_handler): function test_manifest_handler_extract_data_location_empty_report_files (line 621) | def test_manifest_handler_extract_data_location_empty_report_files(manif... function test_manifest_handler_extract_data_location_with_arn (line 634) | def test_manifest_handler_extract_data_location_with_arn(manifest_handler): function test_manifest_handler_parse_schema_csv (line 646) | def test_manifest_handler_parse_schema_csv(manifest_handler): function test_manifest_handler_parse_schema_parquet (line 658) | def test_manifest_handler_parse_schema_parquet(manifest_handler): function test_manifest_handler_parse_schema_parquet_unknown_type (line 672) | def test_manifest_handler_parse_schema_parquet_unknown_type(manifest_han... function test_athena_handler_execute_query (line 689) | async def test_athena_handler_execute_query(mock_context, athena_handler): function test_athena_handler_wait_for_query_completion (line 712) | async def test_athena_handler_wait_for_query_completion(mock_context, at... function test_athena_handler_get_query_results (line 737) | async def test_athena_handler_get_query_results(mock_context, athena_han... function test_athena_handler_determine_output_location (line 763) | def test_athena_handler_determine_output_location(athena_handler): function test_athena_handler_create_database (line 777) | async def test_athena_handler_create_database(mock_context, athena_handl... function test_athena_handler_create_table_for_csv (line 794) | async def test_athena_handler_create_table_for_csv(mock_context, athena_... function test_athena_handler_create_table_for_parquet (line 832) | async def test_athena_handler_create_table_for_parquet(mock_context, ath... function test_athena_handler_setup_table_csv (line 871) | async def test_athena_handler_setup_table_csv(mock_context): function test_athena_handler_setup_table_parquet (line 922) | async def test_athena_handler_setup_table_parquet(mock_context, athena_h... function test_storage_lens_query_tool_query_storage_lens (line 959) | async def test_storage_lens_query_tool_query_storage_lens(mock_context, ... function test_storage_lens_query_tool_query_storage_lens_with_default_params (line 1035) | async def test_storage_lens_query_tool_query_storage_lens_with_default_p... function test_storage_lens_query_tool_table_placeholder_replacement (line 1102) | async def test_storage_lens_query_tool_table_placeholder_replacement( function test_athena_handler_get_query_results_with_next_token (line 1202) | async def test_athena_handler_get_query_results_with_next_token(mock_con... function test_athena_handler_get_query_results_exception_flow (line 1219) | async def test_athena_handler_get_query_results_exception_flow(mock_cont... FILE: src/billing-cost-management-mcp-server/tests/tools/test_unified_sql_tools.py function mock_context (line 37) | def mock_context(): class TestSessionSql (line 46) | class TestSessionSql: method test_session_sql_with_data_and_schema (line 49) | async def test_session_sql_with_data_and_schema(self, mock_context): method test_session_sql_error_handling (line 64) | async def test_session_sql_error_handling(self, mock_context): function test_unified_sql_server_initialization (line 78) | def test_unified_sql_server_initialization(): function _reload_unified_sql_with_identity_decorator (line 84) | def _reload_unified_sql_with_identity_decorator(): function test_unified_sql_real_simple_query_reload_identity_decorator (line 103) | async def test_unified_sql_real_simple_query_reload_identity_decorator(m... function test_unified_sql_real_autogen_table_reload_identity_decorator (line 116) | async def test_unified_sql_real_autogen_table_reload_identity_decorator(... function test_unified_sql_real_respects_provided_table_name_reload_identity_decorator (line 145) | async def test_unified_sql_real_respects_provided_table_name_reload_iden... function test_unified_sql_real_exception_flow_calls_handle_error_reload_identity_decorator (line 174) | async def test_unified_sql_real_exception_flow_calls_handle_error_reload... FILE: src/billing-cost-management-mcp-server/tests/utilities/test_aws_service_base.py class TestCreateAwsClient (line 39) | class TestCreateAwsClient: method test_client_creation_default_region (line 43) | def test_client_creation_default_region(self, mock_session): method test_client_creation_custom_region (line 71) | def test_client_creation_custom_region(self, mock_session): method test_client_creation_with_aws_profile (line 92) | def test_client_creation_with_aws_profile(self, mock_session): class TestParseJson (line 110) | class TestParseJson: method test_parse_valid_json (line 113) | def test_parse_valid_json(self): method test_parse_none_json (line 124) | def test_parse_none_json(self): method test_parse_empty_json (line 132) | def test_parse_empty_json(self): method test_parse_invalid_json (line 140) | def test_parse_invalid_json(self): class TestDateFunctions (line 152) | class TestDateFunctions: method test_get_date_range_with_defaults (line 155) | def test_get_date_range_with_defaults(self): method test_get_date_range_with_custom_dates (line 168) | def test_get_date_range_with_custom_dates(self): method test_get_date_range_with_custom_start_only (line 177) | def test_get_date_range_with_custom_start_only(self): method test_get_date_range_with_custom_days_ago (line 189) | def test_get_date_range_with_custom_days_ago(self): method test_validate_date_format_valid (line 202) | def test_validate_date_format_valid(self): method test_validate_date_format_invalid_format (line 207) | def test_validate_date_format_invalid_format(self): method test_validate_date_format_invalid_date (line 212) | def test_validate_date_format_invalid_date(self): method test_validate_date_format_none (line 217) | def test_validate_date_format_none(self): method test_validate_date_format_empty (line 222) | def test_validate_date_format_empty(self): class TestHandleAwsError (line 228) | class TestHandleAwsError: method test_handle_client_error (line 232) | async def test_handle_client_error(self): method test_handle_value_error (line 262) | async def test_handle_value_error(self): method test_handle_generic_error (line 285) | async def test_handle_generic_error(self): method test_handle_boto_core_error (line 308) | async def test_handle_boto_core_error(self): class TestFormatResponse (line 333) | class TestFormatResponse: method test_format_success_response (line 336) | def test_format_success_response(self): method test_format_success_response_with_message (line 350) | def test_format_success_response_with_message(self): method test_format_error_response (line 365) | def test_format_error_response(self): FILE: src/billing-cost-management-mcp-server/tests/utilities/test_sql_utils.py function mock_context (line 50) | def mock_context(): function temp_db_path (line 59) | def temp_db_path(): class TestShouldConvertToSql (line 66) | class TestShouldConvertToSql: method test_should_convert_large_response (line 69) | def test_should_convert_large_response(self): method test_should_not_convert_small_response (line 81) | def test_should_not_convert_small_response(self): method test_should_convert_with_force_enabled (line 94) | def test_should_convert_with_force_enabled(self, mock_getenv): class TestGetSessionDbPath (line 128) | class TestGetSessionDbPath: method test_get_session_db_path (line 136) | def test_get_session_db_path( class TestGetDbConnection (line 151) | class TestGetDbConnection: method test_get_db_connection (line 155) | def test_get_db_connection(self, mock_connect): class TestCreateTable (line 187) | class TestCreateTable: method test_create_table_standard (line 190) | def test_create_table_standard(self): method test_create_table_empty_schema (line 205) | def test_create_table_empty_schema(self): class TestInsertData (line 220) | class TestInsertData: method test_insert_data (line 223) | def test_insert_data(self): method test_insert_empty_data (line 244) | def test_insert_empty_data(self): method test_insert_none_data (line 258) | def test_insert_none_data(self): class TestExecuteQuery (line 273) | class TestExecuteQuery: method test_execute_select_query (line 276) | def test_execute_select_query(self): method test_execute_update_query (line 292) | def test_execute_update_query(self): method test_execute_query_with_parameters (line 308) | def test_execute_query_with_parameters(self): class TestRegisterTableInSchemaInfo (line 326) | class TestRegisterTableInSchemaInfo: method test_register_table (line 329) | def test_register_table(self): class TestExecuteSessionSql (line 357) | class TestExecuteSessionSql: method test_execute_query_only (line 361) | async def test_execute_query_only(self, mock_connect, mock_context): method test_execute_with_data (line 400) | async def test_execute_with_data(self, mock_connect, mock_context): method test_execute_with_auto_table_name (line 441) | async def test_execute_with_auto_table_name( method test_execute_with_error (line 471) | async def test_execute_with_error(self, mock_get_path, mock_connect, m... method test_execute_query_write_operation (line 502) | async def test_execute_query_write_operation(self, mock_get_path, mock... method test_execute_with_connection_error (line 537) | async def test_execute_with_connection_error(self, mock_get_path, mock... method test_execute_with_close_error (line 564) | async def test_execute_with_close_error(self, mock_get_path, mock_conn... class TestConvertApiResponseToTable (line 597) | class TestConvertApiResponseToTable: method test_convert_api_response_error (line 601) | async def test_convert_api_response_error(self, mock_json_dumps, mock_... class TestShouldConvertToSqlAdditional (line 623) | class TestShouldConvertToSqlAdditional: method test_should_convert_large_response_above_threshold (line 626) | def test_should_convert_large_response_above_threshold(self): method test_should_not_convert_small_response (line 631) | def test_should_not_convert_small_response(self): class TestConvertApiResponseToTableAdditional (line 637) | class TestConvertApiResponseToTableAdditional: method test_convert_api_response_to_table_calls_execute_sql (line 641) | async def test_convert_api_response_to_table_calls_execute_sql(self): class TestConvertResponseIfNeeded (line 657) | class TestConvertResponseIfNeeded: method test_convert_response_if_needed_with_large_response (line 661) | async def test_convert_response_if_needed_with_large_response(self): method test_convert_response_if_needed_with_small_response (line 672) | async def test_convert_response_if_needed_with_small_response(self): function test_cleanup_session_db_with_existing_file (line 683) | async def test_cleanup_session_db_with_existing_file(): function test_cleanup_session_db_with_remove_error (line 698) | async def test_cleanup_session_db_with_remove_error(): function test_validate_table_name_invalid (line 712) | def test_validate_table_name_invalid(): function test_validate_table_name_valid (line 720) | def test_validate_table_name_valid(): class TestCreateSafeSqlStatement (line 727) | class TestCreateSafeSqlStatement: method test_create_safe_sql_statement_select_with_limit (line 730) | def test_create_safe_sql_statement_select_with_limit(self): method test_create_safe_sql_statement_select_no_limit (line 739) | def test_create_safe_sql_statement_select_no_limit(self): method test_create_safe_sql_statement_insert (line 748) | def test_create_safe_sql_statement_insert(self): method test_create_safe_sql_statement_other (line 757) | def test_create_safe_sql_statement_other(self): method test_create_safe_sql_statement_invalid_table_name (line 766) | def test_create_safe_sql_statement_invalid_table_name(self): class TestValidateSqlQuery (line 776) | class TestValidateSqlQuery: method test_validate_sql_query_safe (line 779) | def test_validate_sql_query_safe(self): method test_validate_sql_query_dangerous_drop (line 794) | def test_validate_sql_query_dangerous_drop(self): method test_validate_sql_query_dangerous_delete (line 803) | def test_validate_sql_query_dangerous_delete(self): method test_validate_sql_query_dangerous_truncate (line 812) | def test_validate_sql_query_dangerous_truncate(self): method test_validate_sql_query_dangerous_alter (line 821) | def test_validate_sql_query_dangerous_alter(self): method test_validate_sql_query_dangerous_exec (line 830) | def test_validate_sql_query_dangerous_exec(self): method test_validate_sql_query_dangerous_system (line 839) | def test_validate_sql_query_dangerous_system(self): method test_validate_sql_query_dangerous_semicolon (line 848) | def test_validate_sql_query_dangerous_semicolon(self): class TestGetSpecializedConverter (line 858) | class TestGetSpecializedConverter: method test_get_specialized_converter_pricing (line 861) | def test_get_specialized_converter_pricing(self): method test_get_specialized_converter_cost_and_usage (line 870) | def test_get_specialized_converter_cost_and_usage(self): method test_get_specialized_converter_dimension_values (line 882) | def test_get_specialized_converter_dimension_values(self): method test_get_specialized_converter_forecast (line 891) | def test_get_specialized_converter_forecast(self): method test_get_specialized_converter_tags (line 903) | def test_get_specialized_converter_tags(self): method test_get_specialized_converter_cost_categories (line 912) | def test_get_specialized_converter_cost_categories(self): method test_get_specialized_converter_unknown (line 921) | def test_get_specialized_converter_unknown(self): class TestConvertApiResponseToTableSpecificTypes (line 932) | class TestConvertApiResponseToTableSpecificTypes: method test_convert_pricing_products_response (line 937) | async def test_convert_pricing_products_response( method test_convert_cost_and_usage_response (line 981) | async def test_convert_cost_and_usage_response( method test_convert_dimension_values_response (line 1047) | async def test_convert_dimension_values_response( method test_convert_forecast_response (line 1082) | async def test_convert_forecast_response(self, mock_get_path, mock_con... method test_convert_tags_response (line 1125) | async def test_convert_tags_response(self, mock_get_path, mock_connect... method test_convert_cost_categories_response (line 1153) | async def test_convert_cost_categories_response( method test_convert_generic_response (line 1186) | async def test_convert_generic_response(self, mock_get_path, mock_conn... method test_convert_response_connection_close_error (line 1220) | async def test_convert_response_connection_close_error( class TestConvertResponseIfNeededErrorHandling (line 1247) | class TestConvertResponseIfNeededErrorHandling: method test_convert_response_if_needed_json_error (line 1251) | async def test_convert_response_if_needed_json_error(self, mock_json_d... method test_convert_response_if_needed_conversion_error (line 1266) | async def test_convert_response_if_needed_conversion_error(self, mock_... class TestInsertDataEdgeCases (line 1287) | class TestInsertDataEdgeCases: method test_insert_data_empty_first_row (line 1290) | def test_insert_data_empty_first_row(self): method test_insert_data_with_none_values (line 1303) | def test_insert_data_with_none_values(self): class TestExecuteSessionSqlDangerous (line 1323) | class TestExecuteSessionSqlDangerous: method test_execute_session_sql_dangerous_query (line 1327) | async def test_execute_session_sql_dangerous_query(self, mock_connect,... function test_cleanup_session_db_no_file (line 1346) | def test_cleanup_session_db_no_file(): function test_cleanup_session_db_no_path (line 1360) | def test_cleanup_session_db_no_path(): class TestEnvironmentVariables (line 1379) | class TestEnvironmentVariables: method test_sql_conversion_threshold_custom (line 1383) | def test_sql_conversion_threshold_custom(self, mock_getenv): function test_get_context_logger_import (line 1412) | async def test_get_context_logger_import(): FILE: src/billing-cost-management-mcp-server/tests/utilities/test_time_utils.py class TestEpochSecondsToUtcIsoString (line 22) | class TestEpochSecondsToUtcIsoString: method test_known_timestamp (line 25) | def test_known_timestamp(self): method test_unix_epoch_zero (line 31) | def test_unix_epoch_zero(self): method test_float_timestamp (line 36) | def test_float_timestamp(self): method test_returns_string_without_timezone (line 41) | def test_returns_string_without_timezone(self): method test_different_timestamps (line 47) | def test_different_timestamps(self): FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/aws_client.py function get_aws_client (line 27) | def get_aws_client(service_name, region_name=None): FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/cloud_control_utils.py function supports_tagging (line 20) | def supports_tagging(resource_type: str, schema: Dict) -> bool: function add_default_tags (line 27) | def add_default_tags( function validate_patch (line 82) | def validate_patch(patch_document: Any): function progress_event (line 106) | def progress_event(response_event, hooks_events) -> Dict[str, Any]: FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/context.py class Context (line 18) | class Context: method __init__ (line 23) | def __init__(self, readonly_mode: bool): method readonly_mode (line 28) | def readonly_mode(cls) -> bool: method initialize (line 35) | def initialize(cls, readonly_mode: bool): FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/errors.py function handle_aws_api_error (line 16) | def handle_aws_api_error(e: Exception) -> Exception: class ClientError (line 49) | class ClientError(Exception): method __init__ (line 52) | def __init__(self, message): class ServerError (line 60) | class ServerError(Exception): method __init__ (line 63) | def __init__(self, message: str): FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/iac_generator.py function create_template (line 22) | async def create_template( function _start_template_generation (line 76) | async def _start_template_generation( function _handle_existing_template (line 133) | async def _handle_existing_template( FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/impl/tools/explanation.py function _format_value (line 26) | def _format_value(value: Any) -> str: function _generate_explanation (line 40) | def _generate_explanation( function _explain_dict (line 103) | def _explain_dict(data: dict, format: str) -> str: function _explain_list (line 191) | def _explain_list(data: list, format: str) -> str: function _explain_security_scan (line 208) | def _explain_security_scan(scan_data: dict) -> str: function explain_impl (line 256) | async def explain_impl(request: ExplainRequest, workflow_store: dict) ->... FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/impl/tools/infrastructure_generation.py function generate_infrastructure_code_impl_wrapper (line 27) | async def generate_infrastructure_code_impl_wrapper( FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/impl/tools/resource_operations.py function check_readonly_mode (line 37) | def check_readonly_mode(aws_session_data: dict) -> None: function check_security_scanning (line 43) | def check_security_scanning() -> tuple[bool, str | None]: function _validate_token_chain (line 54) | def _validate_token_chain( function create_resource_impl (line 79) | async def create_resource_impl(request: CreateResourceRequest, workflow_... function update_resource_impl (line 144) | async def update_resource_impl(request: UpdateResourceRequest, workflow_... function delete_resource_impl (line 215) | async def delete_resource_impl(request: DeleteResourceRequest, workflow_... function get_resource_impl (line 265) | async def get_resource_impl( function get_resource_request_status_impl (line 367) | async def get_resource_request_status_impl(request_token: str, region: s... FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/impl/tools/security_scanning.py function _check_checkov_installed (line 27) | def _check_checkov_installed() -> dict: function run_security_analysis (line 63) | async def run_security_analysis(resource_type: str, properties: dict) ->... function run_checkov_impl (line 68) | async def run_checkov_impl(request: RunCheckovRequest, workflow_store: d... FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/impl/tools/session_management.py function check_aws_credentials (line 25) | def check_aws_credentials() -> dict: function check_environment_variables_impl (line 68) | async def check_environment_variables_impl(workflow_store: dict) -> dict: function get_aws_session_info_impl (line 104) | async def get_aws_session_info_impl(environment_token: str, workflow_sto... function get_aws_profile_info (line 190) | def get_aws_profile_info(): FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/impl/utils/validation.py function validate_workflow_token (line 20) | def validate_workflow_token( function cleanup_workflow_tokens (line 38) | def cleanup_workflow_tokens(workflow_store: dict, *tokens: str) -> None: function validate_resource_type (line 45) | def validate_resource_type(resource_type: str) -> None: function validate_identifier (line 51) | def validate_identifier(identifier: str) -> None: function ensure_region_string (line 57) | def ensure_region_string(region) -> str | None: function ensure_string (line 62) | def ensure_string(value, default: str = '') -> str: FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/infrastructure_generator.py function generate_infrastructure_code (line 25) | async def generate_infrastructure_code( FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/models/models.py class CreateResourceRequest (line 21) | class CreateResourceRequest(BaseModel): class UpdateResourceRequest (line 32) | class UpdateResourceRequest(BaseModel): class DeleteResourceRequest (line 45) | class DeleteResourceRequest(BaseModel): class GetResourceRequest (line 56) | class GetResourceRequest(BaseModel): class GenerateInfrastructureCodeRequest (line 65) | class GenerateInfrastructureCodeRequest(BaseModel): class ExplainRequest (line 78) | class ExplainRequest(BaseModel): class RunCheckovRequest (line 89) | class RunCheckovRequest(BaseModel): class ResourceOperationResult (line 96) | class ResourceOperationResult(BaseModel): class SecurityScanResult (line 108) | class SecurityScanResult(BaseModel): FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/schema_manager.py class SchemaManager (line 30) | class SchemaManager: method __init__ (line 33) | def __init__(self): method _load_metadata (line 49) | def _load_metadata(self) -> dict: method _load_cached_schemas (line 67) | def _load_cached_schemas(self): method get_schema (line 83) | async def get_schema(self, resource_type: str, region: str | None = No... method _download_resource_schema (line 124) | async def _download_resource_schema( function schema_manager (line 217) | def schema_manager() -> SchemaManager: FILE: src/ccapi-mcp-server/awslabs/ccapi_mcp_server/server.py function get_resource_schema_information (line 137) | async def get_resource_schema_information( function list_resources (line 161) | async def list_resources( function generate_infrastructure_code (line 241) | async def generate_infrastructure_code( function explain (line 275) | async def explain( function get_resource (line 327) | async def get_resource( function update_resource (line 353) | async def update_resource( function create_resource (line 396) | async def create_resource( function delete_resource (line 435) | async def delete_resource( function get_resource_request_status (line 466) | async def get_resource_request_status( function run_checkov (line 479) | async def run_checkov( function create_template (line 522) | async def create_template( function check_environment_variables (line 602) | async def check_environment_variables() -> dict: function get_aws_session_info (line 608) | async def get_aws_session_info( function get_aws_account_info (line 640) | async def get_aws_account_info() -> dict: function main (line 674) | def main(): FILE: src/ccapi-mcp-server/tests/test_aws_client.py class TestClient (line 23) | class TestClient: method test_happy_path (line 28) | async def test_happy_path(self, mock_environ, mock_session_class): method test_happy_path_no_region (line 40) | async def test_happy_path_no_region(self, mock_environ, mock_session_c... method test_expired_token (line 53) | async def test_expired_token(self, mock_environ, mock_session_class): method test_no_providers (line 64) | async def test_no_providers(self, mock_environ, mock_session_class): method test_other_error (line 75) | async def test_other_error(self, mock_environ, mock_session_class): method test_profile_region_fallback (line 86) | async def test_profile_region_fallback(self, mock_environ, mock_sessio... method test_profile_region_with_exception_handling (line 99) | async def test_profile_region_with_exception_handling(self, mock_envir... FILE: src/ccapi-mcp-server/tests/test_checkov_install.py class TestCheckovCheck (line 8) | class TestCheckovCheck: method test_checkov_available (line 11) | def test_checkov_available(self): method test_checkov_not_found (line 28) | def test_checkov_not_found(self): method test_checkov_command_fails (line 39) | def test_checkov_command_fails(self): FILE: src/ccapi-mcp-server/tests/test_cloud_control_utils.py class TestUtils (line 20) | class TestUtils: method test_progress_event (line 23) | def test_progress_event(self): method test_validate_patch (line 34) | def test_validate_patch(self): method test_validate_patch_invalid (line 40) | def test_validate_patch_invalid(self): method test_progress_event_pending (line 47) | def test_progress_event_pending(self): method test_validate_patch_missing_path (line 60) | def test_validate_patch_missing_path(self): method test_progress_event_with_identifier (line 69) | def test_progress_event_with_identifier(self): method test_add_default_tags_enabled (line 84) | def test_add_default_tags_enabled(self): method test_validate_patch_replace_operation (line 98) | def test_validate_patch_replace_operation(self): method test_validate_patch_remove_operation (line 104) | def test_validate_patch_remove_operation(self): method test_validate_patch_invalid_operation (line 110) | def test_validate_patch_invalid_operation(self): method test_progress_event_failed_status (line 119) | def test_progress_event_failed_status(self): method test_progress_event_with_resource_model (line 134) | def test_progress_event_with_resource_model(self): method test_validate_patch_empty_list (line 148) | def test_validate_patch_empty_list(self): method test_validate_patch_working (line 158) | def test_validate_patch_working(self): method test_validate_patch_non_list (line 163) | def test_validate_patch_non_list(self): method test_validate_patch_dict_input (line 170) | def test_validate_patch_dict_input(self): method test_progress_event_minimal (line 177) | def test_progress_event_minimal(self): method test_add_default_tags_always_enabled (line 192) | def test_add_default_tags_always_enabled(self): method test_add_default_tags_no_properties (line 216) | def test_add_default_tags_no_properties(self): method test_progress_event_with_hooks (line 223) | def test_progress_event_with_hooks(self): method test_validate_patch_move_copy_operations (line 239) | def test_validate_patch_move_copy_operations(self): method test_add_default_tags_no_tags_property (line 257) | def test_add_default_tags_no_tags_property(self): method test_add_default_tags_with_tags_property (line 270) | def test_add_default_tags_with_tags_property(self): method test_add_default_tags_with_existing_user_tags (line 284) | def test_add_default_tags_with_existing_user_tags(self): method test_progress_event_with_error_code (line 317) | def test_progress_event_with_error_code(self): method test_progress_event_with_retry_after (line 331) | def test_progress_event_with_retry_after(self): method test_validate_patch_test_operation (line 345) | def test_validate_patch_test_operation(self): method test_validate_patch_missing_value_for_add (line 351) | def test_validate_patch_missing_value_for_add(self): method test_validate_patch_comprehensive_types (line 360) | def test_validate_patch_comprehensive_types(self): method test_validate_patch_edge_cases (line 372) | def test_validate_patch_edge_cases(self): method test_add_default_tags_disabled (line 396) | def test_add_default_tags_disabled(self): method test_add_default_tags_lambda_url_no_tagging (line 410) | def test_add_default_tags_lambda_url_no_tagging(self): method test_supports_tagging_function (line 423) | def test_supports_tagging_function(self): FILE: src/ccapi-mcp-server/tests/test_context.py class TestContext (line 19) | class TestContext: method test_context_readonly_true (line 22) | def test_context_readonly_true(self): method test_context_readonly_false (line 29) | def test_context_readonly_false(self): method test_context_not_initialized (line 36) | def test_context_not_initialized(self): method test_context_multiple_initializations (line 47) | def test_context_multiple_initializations(self): FILE: src/ccapi-mcp-server/tests/test_errors.py class TestErrors (line 21) | class TestErrors: method test_handle_access_denied (line 24) | async def test_handle_access_denied(self): method test_handle_incomplete_signature (line 30) | async def test_handle_incomplete_signature(self): method test_handle_invalid_action (line 36) | async def test_handle_invalid_action(self): method test_handle_invalid_client_token (line 42) | async def test_handle_invalid_client_token(self): method test_handle_not_authorized (line 48) | async def test_handle_not_authorized(self): method test_handle_validation (line 54) | async def test_handle_validation(self): method test_handle_rnf (line 60) | async def test_handle_rnf(self): method test_handle_ua (line 66) | async def test_handle_ua(self): method test_handle_ip (line 72) | async def test_handle_ip(self): method test_handle_throttle (line 78) | async def test_handle_throttle(self): method test_handle_internal_failure (line 84) | async def test_handle_internal_failure(self): method test_handle_service_unavailable (line 90) | async def test_handle_service_unavailable(self): method test_handle_other (line 96) | async def test_handle_other(self): method test_handle_boto3_error (line 102) | async def test_handle_boto3_error(self): FILE: src/ccapi-mcp-server/tests/test_explanation.py class TestExplanation (line 18) | class TestExplanation: method test_format_value_string (line 21) | def test_format_value_string(self): method test_format_value_number (line 25) | def test_format_value_number(self): method test_format_value_boolean (line 29) | def test_format_value_boolean(self): method test_format_value_none (line 33) | def test_format_value_none(self): method test_format_value_list (line 38) | def test_format_value_list(self): method test_format_value_dict (line 43) | def test_format_value_dict(self): method test_format_value_long_string (line 48) | def test_format_value_long_string(self): method test_explain_dict_basic (line 55) | def test_explain_dict_basic(self): method test_explain_dict_with_tags (line 62) | def test_explain_dict_with_tags(self): method test_explain_dict_skip_private (line 70) | def test_explain_dict_skip_private(self): method test_explain_list_basic (line 77) | def test_explain_list_basic(self): method test_explain_list_summary (line 83) | def test_explain_list_summary(self): method test_explain_security_scan_passed (line 89) | def test_explain_security_scan_passed(self): method test_explain_security_scan_failed (line 99) | def test_explain_security_scan_failed(self): method test_generate_explanation_basic (line 109) | def test_generate_explanation_basic(self): method test_generate_explanation_different_operations (line 114) | def test_generate_explanation_different_operations(self): method test_explain_impl_with_content (line 122) | async def test_explain_impl_with_content(self): method test_explain_impl_with_generated_code_token (line 129) | async def test_explain_impl_with_generated_code_token(self): method test_explain_impl_invalid_token (line 140) | async def test_explain_impl_invalid_token(self): method test_generate_explanation_with_env_vars_disabled (line 146) | def test_generate_explanation_with_env_vars_disabled(self): method test_explain_dict_with_policy_statements (line 154) | def test_explain_dict_with_policy_statements(self): method test_explain_list_long_list (line 172) | def test_explain_list_long_list(self): method test_explain_impl_delete_operation (line 180) | async def test_explain_impl_delete_operation(self): method test_generate_explanation_string_content (line 187) | def test_generate_explanation_string_content(self): FILE: src/ccapi-mcp-server/tests/test_iac_generator.py function mock_cfn_client (line 24) | def mock_cfn_client(): function mock_get_aws_client (line 31) | def mock_get_aws_client(): function test_create_template_validation_error_no_name_or_id (line 38) | async def test_create_template_validation_error_no_name_or_id(): function test_create_template_validation_error_invalid_output_format (line 45) | async def test_create_template_validation_error_invalid_output_format(): function test_create_template_validation_error_invalid_deletion_policy (line 52) | async def test_create_template_validation_error_invalid_deletion_policy(): function test_create_template_validation_error_invalid_update_replace_policy (line 61) | async def test_create_template_validation_error_invalid_update_replace_p... function test_create_template_start_generation (line 70) | async def test_create_template_start_generation(mock_get_aws_client, moc... function test_create_template_check_status_in_progress (line 97) | async def test_create_template_check_status_in_progress(mock_get_aws_cli... function test_create_template_retrieve_template (line 115) | async def test_create_template_retrieve_template(mock_get_aws_client, mo... function test_create_template_retrieve_json_template (line 143) | async def test_create_template_retrieve_json_template(mock_get_aws_clien... function test_create_template_resource_validation_error (line 165) | async def test_create_template_resource_validation_error(mock_get_aws_cl... function test_create_template_api_error (line 179) | async def test_create_template_api_error(mock_get_aws_client, mock_cfn_c... function test_create_template_failed_status (line 199) | async def test_create_template_failed_status(mock_get_aws_client, mock_c... FILE: src/ccapi-mcp-server/tests/test_infrastructure_generation.py class TestInfrastructureGeneration (line 14) | class TestInfrastructureGeneration: method test_generate_infrastructure_code_impl_wrapper_success (line 21) | async def test_generate_infrastructure_code_impl_wrapper_success(self,... method test_generate_infrastructure_code_impl_wrapper_invalid_credentials (line 46) | async def test_generate_infrastructure_code_impl_wrapper_invalid_crede... method test_generate_infrastructure_code_impl_wrapper_with_identifier (line 61) | async def test_generate_infrastructure_code_impl_wrapper_with_identifi... method test_generate_infrastructure_code_impl_wrapper_with_patch_document (line 88) | async def test_generate_infrastructure_code_impl_wrapper_with_patch_do... method test_generate_infrastructure_code_impl_wrapper_invalid_credentials_data (line 113) | async def test_generate_infrastructure_code_impl_wrapper_invalid_crede... method test_generate_infrastructure_code_impl_wrapper_no_env_token (line 134) | async def test_generate_infrastructure_code_impl_wrapper_no_env_token(... method test_generate_infrastructure_code_impl_wrapper_missing_env_token (line 168) | async def test_generate_infrastructure_code_impl_wrapper_missing_env_t... method test_generate_infrastructure_code_impl_wrapper_with_env_data (line 202) | async def test_generate_infrastructure_code_impl_wrapper_with_env_data... FILE: src/ccapi-mcp-server/tests/test_infrastructure_generator.py class TestInfrastructureGenerator (line 9) | class TestInfrastructureGenerator: method test_generate_infrastructure_code_no_resource_type (line 13) | async def test_generate_infrastructure_code_no_resource_type(self): method test_generate_infrastructure_code_create_operation (line 19) | async def test_generate_infrastructure_code_create_operation(self): method test_generate_infrastructure_code_create_no_properties (line 43) | async def test_generate_infrastructure_code_create_no_properties(self): method test_generate_infrastructure_code_update_operation (line 56) | async def test_generate_infrastructure_code_update_operation(self): method test_generate_infrastructure_code_known_taggable_resource (line 87) | async def test_generate_infrastructure_code_known_taggable_resource(se... method test_infrastructure_generator_patch_edge_cases (line 107) | async def test_infrastructure_generator_patch_edge_cases(self): method test_infrastructure_generator_tag_merging (line 138) | async def test_infrastructure_generator_tag_merging(self): method test_infrastructure_generator_no_existing_resource (line 171) | async def test_infrastructure_generator_no_existing_resource(self): method test_infrastructure_generator_no_identifier_update (line 197) | async def test_infrastructure_generator_no_identifier_update(self): method test_infrastructure_generator_copy_operation (line 215) | async def test_infrastructure_generator_copy_operation(self): method test_infrastructure_generator_remove_operation (line 248) | async def test_infrastructure_generator_remove_operation(self): method test_infrastructure_generator_add_tags_operation (line 278) | async def test_infrastructure_generator_add_tags_operation(self): method test_infrastructure_generator_replace_tags_operation (line 314) | async def test_infrastructure_generator_replace_tags_operation(self): method test_infrastructure_generator_update_with_properties (line 352) | async def test_infrastructure_generator_update_with_properties(self): method test_infrastructure_generator_default_tags_disabled (line 388) | async def test_infrastructure_generator_default_tags_disabled(self): method test_infrastructure_generator_default_tags_enabled (line 414) | async def test_infrastructure_generator_default_tags_enabled(self): method test_infrastructure_generator_non_taggable_resource (line 438) | async def test_infrastructure_generator_non_taggable_resource(self): FILE: src/ccapi-mcp-server/tests/test_models.py class TestModels (line 21) | class TestModels: method test_create_resource_request_valid (line 24) | def test_create_resource_request_valid(self): method test_create_resource_request_missing_required (line 37) | def test_create_resource_request_missing_required(self): method test_update_resource_request_valid (line 50) | def test_update_resource_request_valid(self): method test_update_resource_request_with_patch_document (line 63) | def test_update_resource_request_with_patch_document(self): method test_delete_resource_request_valid (line 77) | def test_delete_resource_request_valid(self): method test_delete_resource_request_not_confirmed (line 89) | def test_delete_resource_request_not_confirmed(self): method test_get_resource_request_valid (line 101) | def test_get_resource_request_valid(self): method test_get_resource_request_with_security_analysis (line 113) | def test_get_resource_request_with_security_analysis(self): method test_generate_infrastructure_code_request_valid (line 123) | def test_generate_infrastructure_code_request_valid(self): method test_generate_infrastructure_code_request_with_properties (line 131) | def test_generate_infrastructure_code_request_with_properties(self): method test_explain_request_with_content (line 142) | def test_explain_request_with_content(self): method test_explain_request_with_generated_code_token (line 149) | def test_explain_request_with_generated_code_token(self): method test_explain_request_with_operation (line 155) | def test_explain_request_with_operation(self): method test_run_checkov_request_valid (line 161) | def test_run_checkov_request_valid(self): method test_run_checkov_request_with_framework (line 167) | def test_run_checkov_request_with_framework(self): method test_resource_operation_result_valid (line 172) | def test_resource_operation_result_valid(self): method test_resource_operation_result_with_error (line 185) | def test_resource_operation_result_with_error(self): method test_security_scan_result_valid (line 197) | def test_security_scan_result_valid(self): method test_security_scan_result_with_failed_checks (line 209) | def test_security_scan_result_with_failed_checks(self): FILE: src/ccapi-mcp-server/tests/test_resource_operations.py class TestResourceOperations (line 27) | class TestResourceOperations: method setup_method (line 30) | def setup_method(self): method test_check_readonly_mode_normal (line 36) | def test_check_readonly_mode_normal(self): method test_check_readonly_mode_readonly (line 42) | def test_check_readonly_mode_readonly(self): method test_check_security_scanning_enabled (line 49) | def test_check_security_scanning_enabled(self, mock_environ): method test_check_security_scanning_disabled (line 57) | def test_check_security_scanning_disabled(self, mock_environ): method test_validate_token_chain_valid (line 64) | def test_validate_token_chain_valid(self): method test_validate_token_chain_invalid_explained (line 73) | def test_validate_token_chain_invalid_explained(self): method test_validate_token_chain_invalid_security (line 82) | def test_validate_token_chain_invalid_security(self): method test_validate_token_chain_missing_tokens (line 91) | def test_validate_token_chain_missing_tokens(self): method test_create_resource_impl_success (line 100) | async def test_create_resource_impl_success(self, mock_environ, mock_c... method test_create_resource_impl_invalid_credentials (line 138) | async def test_create_resource_impl_invalid_credentials(self): method test_get_resource_impl_success (line 155) | async def test_get_resource_impl_success(self, mock_client): method test_get_resource_request_status_impl_success (line 177) | async def test_get_resource_request_status_impl_success(self, mock_cli... method test_get_resource_request_status_impl_empty_token (line 191) | async def test_get_resource_request_status_impl_empty_token(self): method test_update_resource_impl_success (line 199) | async def test_update_resource_impl_success(self, mock_environ, mock_c... method test_update_resource_impl_empty_patch (line 240) | async def test_update_resource_impl_empty_patch(self): method test_delete_resource_impl_success (line 257) | async def test_delete_resource_impl_success(self, mock_client): method test_delete_resource_impl_not_confirmed (line 296) | async def test_delete_resource_impl_not_confirmed(self): method test_delete_resource_impl_wrong_operation (line 311) | async def test_delete_resource_impl_wrong_operation(self): method test_get_resource_impl_without_workflow_store (line 339) | async def test_get_resource_impl_without_workflow_store(self, mock_cli... method test_get_resource_impl_api_error (line 363) | async def test_get_resource_impl_api_error(self, mock_client): method test_get_resource_impl_json_properties (line 379) | async def test_get_resource_impl_json_properties(self, mock_client): method test_get_resource_impl_dict_properties (line 400) | async def test_get_resource_impl_dict_properties(self, mock_client): method test_create_resource_impl_security_disabled_no_skip (line 421) | async def test_create_resource_impl_security_disabled_no_skip(self, mo... method test_create_resource_impl_security_enabled_no_token (line 449) | async def test_create_resource_impl_security_enabled_no_token(self, mo... method test_update_resource_impl_security_enabled_no_token (line 477) | async def test_update_resource_impl_security_enabled_no_token(self, mo... method test_update_resource_impl_skip_security (line 508) | async def test_update_resource_impl_skip_security(self, mock_client, m... method test_update_resource_impl_readonly_mode_error (line 549) | async def test_update_resource_impl_readonly_mode_error(self): method test_delete_resource_impl_readonly_mode_error (line 577) | async def test_delete_resource_impl_readonly_mode_error(self): method test_validate_token_chain_missing_explained (line 604) | def test_validate_token_chain_missing_explained(self): method test_validate_token_chain_missing_security (line 611) | def test_validate_token_chain_missing_security(self): method test_validate_token_chain_empty_tokens (line 618) | def test_validate_token_chain_empty_tokens(self): method test_create_resource_impl_with_security_token (line 630) | async def test_create_resource_impl_with_security_token(self, mock_cli... method test_update_resource_impl_with_security_enabled (line 672) | async def test_update_resource_impl_with_security_enabled(self, mock_c... method test_create_resource_impl_api_error (line 719) | async def test_create_resource_impl_api_error(self, mock_client): method test_update_resource_impl_api_error (line 749) | async def test_update_resource_impl_api_error(self, mock_client): method test_delete_resource_impl_api_error (line 782) | async def test_delete_resource_impl_api_error(self, mock_client): method test_get_resource_request_status_impl_api_error (line 812) | async def test_get_resource_request_status_impl_api_error(self, mock_c... method test_check_security_scanning_edge_cases (line 819) | def test_check_security_scanning_edge_cases(self): method test_check_readonly_mode_context (line 825) | def test_check_readonly_mode_context(self): method test_update_resource_impl_security_disabled_workflow (line 837) | async def test_update_resource_impl_security_disabled_workflow(self, m... method test_update_resource_impl_security_enabled_workflow (line 881) | async def test_update_resource_impl_security_enabled_workflow(self): method test_check_readonly_mode_with_context (line 910) | def test_check_readonly_mode_with_context(self): method test_create_resource_impl_invalid_credentials_line_87 (line 920) | async def test_create_resource_impl_invalid_credentials_line_87(self): method test_update_resource_impl_invalid_credentials_line_129 (line 944) | async def test_update_resource_impl_invalid_credentials_line_129(self): method test_delete_resource_impl_invalid_credentials_line_198 (line 962) | async def test_delete_resource_impl_invalid_credentials_line_198(self): method test_create_resource_impl_no_region_configured (line 986) | async def test_create_resource_impl_no_region_configured(self): method test_update_resource_impl_no_region_configured (line 1019) | async def test_update_resource_impl_no_region_configured(self): method test_delete_resource_impl_no_region_configured (line 1054) | async def test_delete_resource_impl_no_region_configured(self): method test_get_resource_impl_security_analysis_simple (line 1088) | async def test_get_resource_impl_security_analysis_simple(self, mock_c... FILE: src/ccapi-mcp-server/tests/test_schema_manager.py class TestSchemaManager (line 21) | class TestSchemaManager: method test_schema_manager_singleton (line 24) | def test_schema_manager_singleton(self): method test_schema_manager_basic_functions (line 32) | def test_schema_manager_basic_functions(self): method test_schema_manager_cache_functions (line 41) | def test_schema_manager_cache_functions(self): method test_get_schema_invalid_type (line 51) | async def test_get_schema_invalid_type(self): method test_schema_manager_metadata_loading (line 60) | def test_schema_manager_metadata_loading(self): method test_download_resource_schema_invalid_format (line 71) | async def test_download_resource_schema_invalid_format(self): method test_schema_manager_cache_dir_creation (line 80) | def test_schema_manager_cache_dir_creation(self): method test_get_schema_cached_recent (line 89) | async def test_get_schema_cached_recent(self): method test_download_resource_schema_success (line 110) | async def test_download_resource_schema_success(self, mock_client): method test_download_resource_schema_api_error (line 134) | async def test_download_resource_schema_api_error(self, mock_client): method test_load_metadata_corrupted_file (line 145) | def test_load_metadata_corrupted_file(self): method test_load_cached_schemas_error (line 159) | def test_load_cached_schemas_error(self): method test_get_schema_old_timestamp (line 176) | async def test_get_schema_old_timestamp(self): method test_get_schema_invalid_timestamp (line 203) | async def test_get_schema_invalid_timestamp(self): method test_load_cached_schemas_no_typename (line 221) | def test_load_cached_schemas_no_typename(self): method test_get_schema_corrupted_properties (line 245) | async def test_get_schema_corrupted_properties(self): method test_get_schema_no_metadata (line 264) | async def test_get_schema_no_metadata(self): method test_download_resource_schema_retry_success (line 286) | async def test_download_resource_schema_retry_success(self, mock_client): method test_download_resource_schema_empty_response (line 316) | async def test_download_resource_schema_empty_response(self, mock_clie... method test_download_resource_schema_empty_properties (line 331) | async def test_download_resource_schema_empty_properties(self, mock_cl... method test_download_resource_schema_known_taggable (line 349) | async def test_download_resource_schema_known_taggable(self, mock_clie... method test_schema_manager_module_init (line 374) | def test_schema_manager_module_init(self): method test_clear_corrupted_schemas (line 385) | def test_clear_corrupted_schemas(self): method test_clear_corrupted_s3_schema (line 415) | def test_clear_corrupted_s3_schema(self): method test_get_schema_with_invalid_timestamp_format (line 422) | async def test_get_schema_with_invalid_timestamp_format(self): method test_load_cached_schemas_with_json_error (line 448) | def test_load_cached_schemas_with_json_error(self): method test_load_cached_schemas_with_valid_schema (line 483) | def test_load_cached_schemas_with_valid_schema(self): method test_get_schema_no_metadata_cached (line 512) | async def test_get_schema_no_metadata_cached(self): method test_download_resource_schema_invalid_type_format (line 536) | async def test_download_resource_schema_invalid_type_format(self): method test_download_resource_schema_all_retries_fail (line 547) | async def test_download_resource_schema_all_retries_fail(self, mock_cl... FILE: src/ccapi-mcp-server/tests/test_security_scanning.py class TestSecurityScanning (line 15) | class TestSecurityScanning: method test_run_security_analysis_success (line 21) | async def test_run_security_analysis_success(self): method test_run_security_analysis_with_properties (line 28) | async def test_run_security_analysis_with_properties(self): method test_run_checkov_impl_not_installed (line 39) | async def test_run_checkov_impl_not_installed(self, mock_check): method test_run_checkov_impl_success (line 66) | async def test_run_checkov_impl_success(self, mock_temp, mock_run, moc... method test_run_checkov_impl_failed_checks (line 96) | async def test_run_checkov_impl_failed_checks(self, mock_temp, mock_ru... method test_run_checkov_impl_json_error (line 126) | async def test_run_checkov_impl_json_error(self, mock_temp, mock_run, ... method test_run_checkov_impl_empty_stdout (line 154) | async def test_run_checkov_impl_empty_stdout(self, mock_temp, mock_run... method test_run_checkov_impl_subprocess_error (line 180) | async def test_run_checkov_impl_subprocess_error(self, mock_run, mock_... method test_run_checkov_impl_invalid_token (line 201) | async def test_run_checkov_impl_invalid_token(self): method test_run_checkov_impl_needs_user_action (line 209) | async def test_run_checkov_impl_needs_user_action(self, mock_check): method test_run_checkov_impl_with_framework (line 236) | async def test_run_checkov_impl_with_framework(self, mock_temp, mock_r... FILE: src/ccapi-mcp-server/tests/test_server.py class TestTools (line 31) | class TestTools: method test_get_resource_schema_no_type (line 35) | async def test_get_resource_schema_no_type(self): method test_list_resources_no_type (line 43) | async def test_list_resources_no_type(self): method test_get_resource_no_type (line 49) | async def test_get_resource_no_type(self): method test_create_resource_no_type (line 57) | async def test_create_resource_no_type(self): method test_update_resource_no_type (line 68) | async def test_update_resource_no_type(self): method test_delete_resource_no_type (line 81) | async def test_delete_resource_no_type(self): method test_basic_imports (line 96) | async def test_basic_imports(self): method setup_method (line 102) | def setup_method(self): method test_get_aws_session_info_success (line 110) | async def test_get_aws_session_info_success(self, mock_check_creds): method test_check_environment_variables_success (line 133) | async def test_check_environment_variables_success(self, mock_check): method test_utility_functions_coverage (line 153) | def test_utility_functions_coverage(self): method test_uncovered_lines (line 249) | async def test_uncovered_lines(self): method test_missing_coverage_lines (line 385) | async def test_missing_coverage_lines(self): method test_remaining_coverage_gaps (line 631) | async def test_remaining_coverage_gaps(self): method test_final_coverage_push (line 867) | async def test_final_coverage_push(self): method test_final_95_percent_push (line 1063) | async def test_final_95_percent_push(self): FILE: src/ccapi-mcp-server/tests/test_session_management.py class TestSessionManagement (line 17) | class TestSessionManagement: method setup_method (line 20) | def setup_method(self): method test_check_aws_credentials_success (line 27) | def test_check_aws_credentials_success(self, mock_client): method test_check_aws_credentials_profile (line 55) | def test_check_aws_credentials_profile(self, mock_client): method test_check_aws_credentials_error (line 79) | def test_check_aws_credentials_error(self, mock_client): method test_check_environment_variables_impl_success (line 89) | async def test_check_environment_variables_impl_success(self, mock_che... method test_check_environment_variables_impl_invalid (line 107) | async def test_check_environment_variables_impl_invalid(self, mock_che... method test_get_aws_session_info_impl_success (line 125) | async def test_get_aws_session_info_impl_success(self, mock_check): method test_get_aws_session_info_impl_with_env_credentials (line 150) | async def test_get_aws_session_info_impl_with_env_credentials(self, mo... method test_get_aws_session_info_impl_invalid_token (line 182) | async def test_get_aws_session_info_impl_invalid_token(self): method test_get_aws_session_info_impl_not_configured (line 188) | async def test_get_aws_session_info_impl_not_configured(self): method test_get_aws_session_info_impl_invalid_credentials (line 202) | async def test_get_aws_session_info_impl_invalid_credentials(self, moc... method test_get_aws_profile_info_success (line 214) | def test_get_aws_profile_info_success(self, mock_client): method test_get_aws_profile_info_with_env_vars (line 237) | def test_get_aws_profile_info_with_env_vars(self, mock_client): method test_get_aws_profile_info_error (line 261) | def test_get_aws_profile_info_error(self, mock_client): FILE: src/ccapi-mcp-server/tests/test_validation.py class TestValidation (line 18) | class TestValidation: method test_validate_resource_type_valid (line 21) | def test_validate_resource_type_valid(self): method test_validate_resource_type_none (line 26) | def test_validate_resource_type_none(self): method test_validate_resource_type_empty (line 31) | def test_validate_resource_type_empty(self): method test_validate_resource_type_invalid_format (line 36) | def test_validate_resource_type_invalid_format(self): method test_validate_identifier_valid (line 42) | def test_validate_identifier_valid(self): method test_validate_identifier_none (line 47) | def test_validate_identifier_none(self): method test_validate_identifier_empty (line 52) | def test_validate_identifier_empty(self): method test_ensure_region_string_valid (line 57) | def test_ensure_region_string_valid(self): method test_ensure_region_string_none (line 62) | def test_ensure_region_string_none(self): method test_ensure_region_string_field_info (line 67) | def test_ensure_region_string_field_info(self): method test_validate_workflow_token_valid (line 73) | def test_validate_workflow_token_valid(self): method test_validate_workflow_token_missing (line 81) | def test_validate_workflow_token_missing(self): method test_validate_workflow_token_wrong_type (line 86) | def test_validate_workflow_token_wrong_type(self): method test_cleanup_workflow_tokens_basic (line 93) | def test_cleanup_workflow_tokens_basic(self): method test_cleanup_workflow_tokens_with_none (line 107) | def test_cleanup_workflow_tokens_with_none(self): method test_cleanup_workflow_tokens_missing_tokens (line 119) | def test_cleanup_workflow_tokens_missing_tokens(self): FILE: src/cdk-mcp-server/awslabs/cdk_mcp_server/core/resources.py class RulePack (line 32) | class RulePack(str, Enum): function get_all_cdk_nag_rules (line 42) | async def get_all_cdk_nag_rules(rule_pack: str) -> str: function get_cdk_nag_warnings (line 59) | async def get_cdk_nag_warnings(rule_pack: str) -> str: function get_cdk_nag_errors (line 76) | async def get_cdk_nag_errors(rule_pack: str) -> str: function get_lambda_powertools_guidance (line 93) | async def get_lambda_powertools_guidance(topic: str = '') -> str: function get_lambda_powertools_index (line 119) | async def get_lambda_powertools_index() -> str: function get_solutions_construct_pattern_resource (line 142) | async def get_solutions_construct_pattern_resource(pattern_name: str) ->... function get_genai_cdk_construct_section_resource (line 180) | async def get_genai_cdk_construct_section_resource( function get_genai_cdk_construct_nested_section_resource (line 211) | async def get_genai_cdk_construct_nested_section_resource( function get_available_sections_resource (line 253) | async def get_available_sections_resource(construct_type: str, construct... function get_genai_cdk_construct_resource (line 291) | async def get_genai_cdk_construct_resource(construct_type: str, construc... function get_genai_cdk_overview_resource (line 352) | async def get_genai_cdk_overview_resource(construct_type: str) -> str: FILE: src/cdk-mcp-server/awslabs/cdk_mcp_server/core/search_utils.py function normalize_term (line 25) | def normalize_term(term: str) -> str: function get_term_variations (line 49) | def get_term_variations(term: str) -> List[str]: function expand_search_terms (line 84) | def expand_search_terms(terms: List[str]) -> List[str]: function calculate_match_score (line 110) | def calculate_match_score( function search_items_with_terms (line 154) | def search_items_with_terms( FILE: src/cdk-mcp-server/awslabs/cdk_mcp_server/core/server.py function main (line 72) | def main(): FILE: src/cdk-mcp-server/awslabs/cdk_mcp_server/core/tools.py function cdk_guidance (line 47) | async def cdk_guidance( function explain_cdk_nag_rule (line 58) | async def explain_cdk_nag_rule( function check_cdk_nag_suppressions_tool (line 139) | async def check_cdk_nag_suppressions_tool( function save_fallback_script_to_file (line 166) | def save_fallback_script_to_file( function bedrock_schema_generator_from_file (line 230) | async def bedrock_schema_generator_from_file( function get_aws_solutions_construct_pattern (line 353) | async def get_aws_solutions_construct_pattern( function search_genai_cdk_constructs (line 406) | async def search_genai_cdk_constructs( function lambda_layer_documentation_provider (line 508) | async def lambda_layer_documentation_provider( FILE: src/cdk-mcp-server/awslabs/cdk_mcp_server/data/cdk_nag_parser.py function fetch_cdk_nag_content (line 28) | async def fetch_cdk_nag_content() -> str: function extract_rule_pack_section (line 39) | def extract_rule_pack_section(content: str, rule_pack: str) -> str: function extract_section_by_marker (line 69) | def extract_section_by_marker(section: str, marker: str) -> Tuple[bool, ... function extract_rule_info (line 98) | def extract_rule_info(content: str, rule_id: str) -> Optional[Dict[str, ... function format_rule_info (line 132) | def format_rule_info(rule_info: Optional[Dict[str, str]]) -> str: function get_rule_pack (line 155) | async def get_rule_pack(rule_pack: str) -> str: function get_warnings (line 174) | async def get_warnings(rule_pack: str) -> str: function get_errors (line 205) | async def get_errors(rule_pack: str) -> str: function get_rule (line 236) | async def get_rule(rule_id: str) -> str: function check_cdk_nag_suppressions (line 258) | def check_cdk_nag_suppressions( FILE: src/cdk-mcp-server/awslabs/cdk_mcp_server/data/construct_descriptions.py function get_construct_descriptions (line 20) | def get_construct_descriptions() -> Dict[str, str]: FILE: src/cdk-mcp-server/awslabs/cdk_mcp_server/data/genai_cdk_loader.py function fetch_readme (line 42) | async def fetch_readme( function extract_sections (line 111) | def extract_sections(content: str) -> Dict[str, str]: function get_section (line 148) | async def get_section( function list_sections (line 233) | async def list_sections(construct_type: str, construct_name: str) -> Dic... function get_construct_overview (line 286) | async def get_construct_overview(construct_type: str) -> Dict[str, Any]: function fetch_bedrock_subdirectories (line 298) | async def fetch_bedrock_subdirectories() -> List[Dict[str, Any]]: function fetch_repo_structure (line 381) | async def fetch_repo_structure() -> Dict[str, Any]: function list_available_constructs (line 480) | async def list_available_constructs(construct_type: Optional[str] = None... FILE: src/cdk-mcp-server/awslabs/cdk_mcp_server/data/lambda_layer_parser.py class LambdaLayerParser (line 28) | class LambdaLayerParser: method fetch_page (line 41) | async def fetch_page(cls, url: str) -> Optional[str]: method extract_code_examples (line 56) | def extract_code_examples(cls, html_section: Optional[str]) -> List[Di... method extract_directory_structure (line 92) | def extract_directory_structure(cls, html_section: Optional[str]) -> O... method find_layer_content (line 122) | def find_layer_content(cls, html: Optional[str]) -> Optional[str]: method fetch_lambda_layer_docs (line 211) | async def fetch_lambda_layer_docs(cls) -> Dict[str, Any]: FILE: src/cdk-mcp-server/awslabs/cdk_mcp_server/data/lambda_powertools_loader.py function get_topic_map (line 21) | def get_topic_map() -> Dict[str, str]: function get_lambda_powertools_section (line 35) | def get_lambda_powertools_section(topic: str = '') -> str: FILE: src/cdk-mcp-server/awslabs/cdk_mcp_server/data/schema_generator.py function generate_fallback_script (line 24) | def generate_fallback_script(lambda_code_path: str, output_path: str) ->... function fix_operation_ids (line 261) | def fix_operation_ids(openapi_schema: Dict[str, Any], result: Dict[str, ... function comment_out_problematic_code (line 294) | def comment_out_problematic_code( function generate_bedrock_schema_from_file (line 385) | def generate_bedrock_schema_from_file( FILE: src/cdk-mcp-server/awslabs/cdk_mcp_server/data/solutions_constructs_parser.py function fetch_pattern_list (line 77) | async def fetch_pattern_list() -> List[str]: function get_pattern_info (line 123) | async def get_pattern_info(pattern_name: str) -> Dict[str, Any]: function get_pattern_raw (line 208) | async def get_pattern_raw(pattern_name: str) -> Dict[str, Any]: function parse_readme_content (line 259) | def parse_readme_content(pattern_name: str, content: str) -> Dict[str, A... function extract_props_markdown (line 284) | def extract_props_markdown(content: str) -> str: function extract_services_from_pattern_name (line 309) | def extract_services_from_pattern_name(pattern_name: str) -> List[str]: function extract_description (line 359) | def extract_description(content: str) -> str: function extract_props (line 430) | def extract_props(content: str) -> Dict[str, Dict[str, Any]]: function extract_properties (line 581) | def extract_properties(content: str) -> Dict[str, Dict[str, Any]]: function extract_default_settings (line 627) | def extract_default_settings(content: str) -> List[str]: function extract_code_example (line 658) | def extract_code_example(content: str) -> str: function extract_use_cases (line 706) | def extract_use_cases(content: str) -> List[str]: function search_patterns (line 788) | async def search_patterns(services: List[str]) -> List[Dict[str, Any]]: function get_all_patterns_info (line 839) | async def get_all_patterns_info() -> List[Dict[str, Any]]: FILE: src/cdk-mcp-server/tests/core/test_resources.py function test_get_all_cdk_nag_rules (line 34) | async def test_get_all_cdk_nag_rules(): function test_get_cdk_nag_warnings (line 51) | async def test_get_cdk_nag_warnings(): function test_get_cdk_nag_errors (line 68) | async def test_get_cdk_nag_errors(): function test_get_lambda_powertools_guidance (line 85) | async def test_get_lambda_powertools_guidance(): function test_get_lambda_powertools_index (line 104) | async def test_get_lambda_powertools_index(): function test_get_solutions_construct_pattern_resource (line 117) | async def test_get_solutions_construct_pattern_resource(): function test_get_genai_cdk_construct_section_resource (line 135) | async def test_get_genai_cdk_construct_section_resource(): function test_get_genai_cdk_construct_nested_section_resource (line 155) | async def test_get_genai_cdk_construct_nested_section_resource(): function test_get_available_sections_resource (line 184) | async def test_get_available_sections_resource(): function test_get_genai_cdk_construct_resource (line 216) | async def test_get_genai_cdk_construct_resource(): function test_get_genai_cdk_overview_resource (line 227) | async def test_get_genai_cdk_overview_resource(): FILE: src/cdk-mcp-server/tests/core/test_resources_enhanced.py function test_get_solutions_construct_pattern_resource_error (line 30) | async def test_get_solutions_construct_pattern_resource_error(): function test_get_genai_cdk_construct_resource_knowledge_bases_with_section (line 58) | async def test_get_genai_cdk_construct_resource_knowledge_bases_with_sec... function test_get_genai_cdk_construct_resource_knowledge_bases_without_section (line 89) | async def test_get_genai_cdk_construct_resource_knowledge_bases_without_... function test_get_genai_cdk_construct_resource_agent_normalization (line 109) | async def test_get_genai_cdk_construct_resource_agent_normalization(): function test_get_genai_cdk_construct_resource_knowledge_base_keyword (line 134) | async def test_get_genai_cdk_construct_resource_knowledge_base_keyword(): function test_get_genai_cdk_construct_resource_all_errors (line 159) | async def test_get_genai_cdk_construct_resource_all_errors(): function test_get_genai_cdk_overview_resource_error (line 178) | async def test_get_genai_cdk_overview_resource_error(): function test_get_genai_cdk_construct_section_resource_not_found (line 197) | async def test_get_genai_cdk_construct_section_resource_not_found(): function test_get_genai_cdk_construct_nested_section_resource_all_errors (line 219) | async def test_get_genai_cdk_construct_nested_section_resource_all_error... function test_get_available_sections_resource_error (line 245) | async def test_get_available_sections_resource_error(): FILE: src/cdk-mcp-server/tests/core/test_search_utils.py function test_normalize_term (line 26) | def test_normalize_term(): function test_get_term_variations (line 44) | def test_get_term_variations(): function test_expand_search_terms (line 66) | def test_expand_search_terms(): function test_calculate_match_score_basic (line 92) | def test_calculate_match_score_basic(): function test_calculate_match_score_with_name_parts (line 116) | def test_calculate_match_score_with_name_parts(): function test_search_items_with_terms (line 143) | def test_search_items_with_terms(): function test_search_items_without_name_parts (line 185) | def test_search_items_without_name_parts(): FILE: src/cdk-mcp-server/tests/core/test_server.py function test_mcp_server_initialization (line 20) | def test_mcp_server_initialization(): function test_mcp_server_tool_registration (line 32) | async def test_mcp_server_tool_registration(): function test_main_with_default_args (line 56) | def test_main_with_default_args(mock_run): FILE: src/cdk-mcp-server/tests/core/test_tools.py function mock_context (line 29) | def mock_context(): function test_cdk_guidance (line 37) | async def test_cdk_guidance(mock_context): function test_explain_cdk_nag_rule (line 45) | async def test_explain_cdk_nag_rule(mock_context): function test_check_cdk_nag_suppressions_tool (line 59) | async def test_check_cdk_nag_suppressions_tool(mock_context): function test_bedrock_schema_generator_from_file_throws_error (line 69) | async def test_bedrock_schema_generator_from_file_throws_error(mock_cont... function test_get_aws_solutions_construct_pattern (line 80) | async def test_get_aws_solutions_construct_pattern(mock_context): function test_search_genai_cdk_constructs (line 98) | async def test_search_genai_cdk_constructs(mock_context): function test_lambda_layer_documentation_provider_generic (line 117) | async def test_lambda_layer_documentation_provider_generic(mock_context): function test_lambda_layer_documentation_provider_python (line 129) | async def test_lambda_layer_documentation_provider_python(mock_context): FILE: src/cdk-mcp-server/tests/data/test_cdk_nag_parser.py function test_fetch_cdk_nag_content (line 32) | async def test_fetch_cdk_nag_content(): function test_extract_rule_pack_section (line 61) | def test_extract_rule_pack_section(): function test_extract_section_by_marker (line 86) | def test_extract_section_by_marker(): function test_extract_rule_info (line 111) | def test_extract_rule_info(): function test_format_rule_info (line 133) | def test_format_rule_info(): function test_get_rule_pack (line 154) | async def test_get_rule_pack(): function test_get_warnings (line 182) | async def test_get_warnings(): function test_get_errors (line 211) | async def test_get_errors(): function test_get_rule (line 240) | async def test_get_rule(): function test_check_cdk_nag_suppressions (line 263) | def test_check_cdk_nag_suppressions(): FILE: src/cdk-mcp-server/tests/data/test_genai_cdk_loader.py function test_fetch_readme (line 31) | async def test_fetch_readme(): function test_fetch_readme_error (line 73) | async def test_fetch_readme_error(): function test_extract_sections (line 97) | async def test_extract_sections(): function test_list_sections_success (line 139) | async def test_list_sections_success(): function test_list_sections_error (line 191) | async def test_list_sections_error(): function test_get_section_success (line 216) | async def test_get_section_success(): function test_get_section_not_found (line 255) | async def test_get_section_not_found(): function test_fetch_repo_structure (line 284) | async def test_fetch_repo_structure(): function test_fetch_bedrock_subdirectories (line 333) | async def test_fetch_bedrock_subdirectories(): function test_list_available_constructs (line 390) | async def test_list_available_constructs(): function test_list_available_constructs_empty_result (line 439) | async def test_list_available_constructs_empty_result(): FILE: src/cdk-mcp-server/tests/data/test_lambda_powertools_loader.py function test_get_topic_map (line 22) | def test_get_topic_map(): function test_get_lambda_powertools_section_success (line 50) | def test_get_lambda_powertools_section_success(mock_file, mock_join, moc... function test_get_lambda_powertools_section_file_not_found (line 83) | def test_get_lambda_powertools_section_file_not_found(mock_file, mock_jo... function test_get_lambda_powertools_section_invalid_topic (line 99) | def test_get_lambda_powertools_section_invalid_topic(): FILE: src/cdk-mcp-server/tests/data/test_schema_generator.py function temp_lambda_file (line 77) | def temp_lambda_file(tmp_path): function temp_problematic_lambda_file (line 85) | def temp_problematic_lambda_file(tmp_path): function temp_output_path (line 93) | def temp_output_path(tmp_path): function test_comment_out_problematic_code (line 98) | def test_comment_out_problematic_code(): function test_generate_fallback_script (line 126) | def test_generate_fallback_script(): function test_generate_bedrock_schema_from_file_success (line 141) | def test_generate_bedrock_schema_from_file_success(temp_lambda_file, tem... function test_generate_bedrock_schema_from_file_with_problematic_imports (line 175) | def test_generate_bedrock_schema_from_file_with_problematic_imports( function test_generate_bedrock_schema_from_file_nonexistent (line 200) | def test_generate_bedrock_schema_from_file_nonexistent(): function test_generate_bedrock_schema_from_file_invalid_lambda (line 212) | def test_generate_bedrock_schema_from_file_invalid_lambda(tmp_path, temp... function test_fix_operation_ids (line 232) | def test_fix_operation_ids(): function test_comment_out_problematic_code_with_import_name (line 263) | def test_comment_out_problematic_code_with_import_name(): function test_comment_out_problematic_code_with_try_block (line 294) | def test_comment_out_problematic_code_with_try_block(): function test_generate_bedrock_schema_from_file_with_spec_error (line 330) | def test_generate_bedrock_schema_from_file_with_spec_error(tmp_path, tem... function test_generate_bedrock_schema_from_file_with_loader_error (line 377) | def test_generate_bedrock_schema_from_file_with_loader_error(tmp_path, t... function test_generate_bedrock_schema_from_file_with_simplified_error (line 428) | def test_generate_bedrock_schema_from_file_with_simplified_error(tmp_pat... FILE: src/cdk-mcp-server/tests/data/test_solutions_constructs_parser.py function test_fetch_pattern_list (line 315) | async def test_fetch_pattern_list(): function test_get_pattern_info (line 350) | async def test_get_pattern_info(): function test_get_pattern_info_with_adoc (line 368) | async def test_get_pattern_info_with_adoc(): function test_get_pattern_info_fallback_to_md (line 392) | async def test_get_pattern_info_fallback_to_md(): function test_get_pattern_info_not_found (line 441) | async def test_get_pattern_info_not_found(): function test_get_pattern_raw (line 456) | async def test_get_pattern_raw(): function test_get_pattern_raw_not_found (line 475) | async def test_get_pattern_raw_not_found(): function test_extract_services_from_pattern_name (line 489) | def test_extract_services_from_pattern_name(): function test_extract_description (line 501) | def test_extract_description(): function test_extract_description_from_overview_section (line 508) | def test_extract_description_from_overview_section(): function test_extract_description_from_adoc (line 515) | def test_extract_description_from_adoc(): function test_extract_description_from_adoc_with_multi_paragraph_overview (line 524) | def test_extract_description_from_adoc_with_multi_paragraph_overview(): function test_extract_description_from_adoc_with_overview_no_first_para (line 537) | def test_extract_description_from_adoc_with_overview_no_first_para(): function test_extract_description_from_adoc_with_title_and_paragraph (line 544) | def test_extract_description_from_adoc_with_title_and_paragraph(): function test_extract_description_from_adoc_with_description_section (line 558) | def test_extract_description_from_adoc_with_description_section(): function test_extract_description_from_adoc_with_title_match (line 567) | def test_extract_description_from_adoc_with_title_match(): function test_extract_description_from_adoc_with_title_paragraph_pattern (line 574) | def test_extract_description_from_adoc_with_title_paragraph_pattern(): function test_extract_description_adoc_title_paragraph_pattern_direct (line 582) | def test_extract_description_adoc_title_paragraph_pattern_direct(): function test_extract_description_title_fallback (line 618) | def test_extract_description_title_fallback(): function test_extract_props_markdown (line 638) | def test_extract_props_markdown(): function test_extract_props_markdown_not_found (line 651) | def test_extract_props_markdown_not_found(): function test_extract_props (line 657) | def test_extract_props(): function test_extract_properties (line 667) | def test_extract_properties(): function test_extract_default_settings (line 676) | def test_extract_default_settings(): function test_extract_code_example (line 684) | def test_extract_code_example(): function test_extract_code_example_not_found (line 692) | def test_extract_code_example_not_found(): function test_extract_use_cases (line 698) | def test_extract_use_cases(): function test_parse_readme_content (line 706) | def test_parse_readme_content(): function test_search_patterns (line 720) | async def test_search_patterns(): function test_search_patterns_error (line 749) | async def test_search_patterns_error(): function test_get_all_patterns_info (line 762) | async def test_get_all_patterns_info(): function test_get_all_patterns_info_with_error (line 794) | async def test_get_all_patterns_info_with_error(): function test_get_all_patterns_info_with_fetch_error (line 823) | async def test_get_all_patterns_info_with_fetch_error(): FILE: src/cfn-mcp-server/awslabs/cfn_mcp_server/aws_client.py function get_aws_client (line 29) | def get_aws_client(service_name, region_name=None): FILE: src/cfn-mcp-server/awslabs/cfn_mcp_server/cloud_control_utils.py function validate_patch (line 18) | def validate_patch(patch_document: list): function progress_event (line 39) | def progress_event(response_event, hooks_events) -> dict[str, str]: FILE: src/cfn-mcp-server/awslabs/cfn_mcp_server/context.py class Context (line 18) | class Context: method __init__ (line 23) | def __init__(self, readonly_mode: bool): method readonly_mode (line 28) | def readonly_mode(cls) -> bool: method initialize (line 35) | def initialize(cls, readonly_mode: bool): FILE: src/cfn-mcp-server/awslabs/cfn_mcp_server/errors.py function handle_aws_api_error (line 16) | def handle_aws_api_error(e: Exception) -> Exception: class ClientError (line 75) | class ClientError(Exception): method __init__ (line 78) | def __init__(self, message): class ServerError (line 86) | class ServerError(Exception): method __init__ (line 89) | def __init__(self, log): FILE: src/cfn-mcp-server/awslabs/cfn_mcp_server/iac_generator.py function create_template (line 23) | async def create_template( function _start_template_generation (line 81) | async def _start_template_generation( function _handle_existing_template (line 138) | async def _handle_existing_template( FILE: src/cfn-mcp-server/awslabs/cfn_mcp_server/schema_manager.py class SchemaManager (line 30) | class SchemaManager: method __init__ (line 33) | def __init__(self): method _load_metadata (line 49) | def _load_metadata(self) -> dict: method _load_cached_schemas (line 67) | def _load_cached_schemas(self): method get_schema (line 83) | async def get_schema(self, resource_type: str, region: str | None = No... method _download_resource_schema (line 112) | async def _download_resource_schema( function schema_manager (line 164) | def schema_manager() -> SchemaManager: FILE: src/cfn-mcp-server/awslabs/cfn_mcp_server/server.py function get_resource_schema_information (line 51) | async def get_resource_schema_information( function list_resources (line 76) | async def list_resources( function get_resource (line 111) | async def get_resource( function update_resource (line 154) | async def update_resource( function create_resource (line 220) | async def create_resource( function delete_resource (line 271) | async def delete_resource( function get_resource_request_status (line 323) | async def get_resource_request_status( function create_template (line 365) | async def create_template( function main (line 431) | def main(): FILE: src/cfn-mcp-server/tests/test_aws_client.py class TestClient (line 23) | class TestClient: method test_happy_path (line 28) | async def test_happy_path(self, mock_environ, mock_session): method test_happy_path_no_region (line 39) | async def test_happy_path_no_region(self, mock_environ, mock_session): method test_expired_token (line 51) | async def test_expired_token(self, mock_environ, mock_session): method test_no_providers (line 61) | async def test_no_providers(self, mock_environ, mock_session): method test_other_error (line 71) | async def test_other_error(self, mock_environ, mock_session): FILE: src/cfn-mcp-server/tests/test_cloud_control_utils.py class TestUtils (line 22) | class TestUtils: method test_empty_patch (line 25) | async def test_empty_patch(self): method test_patch_with_invalid_shape_1 (line 29) | async def test_patch_with_invalid_shape_1(self): method test_patch_with_invalid_shape_2 (line 34) | async def test_patch_with_invalid_shape_2(self): method test_patch_with_invalid_shape_3 (line 39) | async def test_patch_with_invalid_shape_3(self): method test_patch_with_invalid_shape_4 (line 44) | async def test_patch_with_invalid_shape_4(self): method test_happy_remove (line 49) | async def test_happy_remove(self): method test_patch_with_invalid_shape_5 (line 53) | async def test_patch_with_invalid_shape_5(self): method test_happy_add (line 58) | async def test_happy_add(self): method test_patch_with_invalid_shape_6 (line 62) | async def test_patch_with_invalid_shape_6(self): method test_progress_event (line 67) | async def test_progress_event(self): method test_progress_event_full (line 84) | async def test_progress_event_full(self): method test_progress_event_failed (line 113) | async def test_progress_event_failed(self): method test_progress_event_empty_list_chooses_status_message (line 142) | async def test_progress_event_empty_list_chooses_status_message(self): method test_progress_event_successful_hook_chooses_status_message (line 161) | async def test_progress_event_successful_hook_chooses_status_message(s... method test_progress_event_failed_hook_chooses_hook_message (line 182) | async def test_progress_event_failed_hook_chooses_hook_message(self): FILE: src/cfn-mcp-server/tests/test_errors.py class TestErrors (line 21) | class TestErrors: method test_handle_access_denied (line 24) | async def test_handle_access_denied(self): method test_handle_incomplete_signature (line 30) | async def test_handle_incomplete_signature(self): method test_handle_invalid_action (line 36) | async def test_handle_invalid_action(self): method test_handle_invalid_client_token (line 42) | async def test_handle_invalid_client_token(self): method test_handle_not_authorized (line 48) | async def test_handle_not_authorized(self): method test_handle_validation (line 54) | async def test_handle_validation(self): method test_handle_rnf (line 60) | async def test_handle_rnf(self): method test_handle_ua (line 66) | async def test_handle_ua(self): method test_handle_ip (line 72) | async def test_handle_ip(self): method test_handle_throttle (line 78) | async def test_handle_throttle(self): method test_handle_internal_failure (line 84) | async def test_handle_internal_failure(self): method test_handle_service_unavailable (line 90) | async def test_handle_service_unavailable(self): method test_handle_other (line 96) | async def test_handle_other(self): FILE: src/cfn-mcp-server/tests/test_iac_generator.py function mock_cfn_client (line 25) | def mock_cfn_client(): function mock_get_aws_client (line 32) | def mock_get_aws_client(): function test_create_template_validation_error_no_name_or_id (line 39) | async def test_create_template_validation_error_no_name_or_id(): function test_create_template_validation_error_invalid_output_format (line 46) | async def test_create_template_validation_error_invalid_output_format(): function test_create_template_validation_error_invalid_deletion_policy (line 53) | async def test_create_template_validation_error_invalid_deletion_policy(): function test_create_template_validation_error_invalid_update_replace_policy (line 62) | async def test_create_template_validation_error_invalid_update_replace_p... function test_create_template_start_generation (line 71) | async def test_create_template_start_generation(mock_get_aws_client, moc... function test_create_template_check_status_in_progress (line 98) | async def test_create_template_check_status_in_progress(mock_get_aws_cli... function test_create_template_retrieve_template (line 116) | async def test_create_template_retrieve_template(mock_get_aws_client, mo... function test_create_template_retrieve_json_template (line 144) | async def test_create_template_retrieve_json_template(mock_get_aws_clien... function test_create_template_save_to_file (line 166) | async def test_create_template_save_to_file(mock_get_aws_client, mock_cf... function test_create_template_resource_validation_error (line 192) | async def test_create_template_resource_validation_error(mock_get_aws_cl... function test_create_template_api_error (line 206) | async def test_create_template_api_error(mock_get_aws_client, mock_cfn_c... FILE: src/cfn-mcp-server/tests/test_init.py class TestInit (line 20) | class TestInit: method test_version (line 23) | def test_version(self): method test_module_reload (line 40) | def test_module_reload(self): FILE: src/cfn-mcp-server/tests/test_main.py class TestMain (line 21) | class TestMain: method test_main_default (line 26) | def test_main_default(self, mock_run): method test_main_emits_deprecation_warning (line 37) | def test_main_emits_deprecation_warning(self, mock_run): method test_module_execution (line 47) | def test_module_execution(self): FILE: src/cfn-mcp-server/tests/test_schema_manager.py class TestSchemaManager (line 24) | class TestSchemaManager: method test_download_schema (line 28) | async def test_download_schema(self, mock_get_aws_client): method test_load_schema (line 48) | async def test_load_schema(self, mock_get_aws_client): FILE: src/cfn-mcp-server/tests/test_server.py class TestReadonly (line 33) | class TestReadonly: method test_update_resource (line 38) | async def test_update_resource(self): method test_create_resource (line 47) | async def test_create_resource(self): method test_delete_resource (line 54) | async def test_delete_resource(self): class TestTools (line 63) | class TestTools: method test_get_resource_schema_no_type (line 68) | async def test_get_resource_schema_no_type(self): method test_get_resource_schema (line 74) | async def test_get_resource_schema(self, mock_schema_manager): method test_list_resources_no_type (line 91) | async def test_list_resources_no_type(self): method test_list_resources (line 97) | async def test_list_resources(self, mock_get_aws_client): method test_get_resource_no_type (line 119) | async def test_get_resource_no_type(self): method test_get_resource_no_identifier (line 124) | async def test_get_resource_no_identifier(self): method test_get_resource (line 132) | async def test_get_resource(self, mock_get_aws_client): method test_update_resource_no_type (line 154) | async def test_update_resource_no_type(self): method test_update_resource_no_identifier (line 159) | async def test_update_resource_no_identifier(self): method test_update_resource_no_patch (line 168) | async def test_update_resource_no_patch(self): method test_update_resource (line 178) | async def test_update_resource(self, mock_get_aws_client): method test_create_resource_no_type (line 207) | async def test_create_resource_no_type(self): method test_create_resource_no_properties (line 212) | async def test_create_resource_no_properties(self): method test_create_resource (line 220) | async def test_create_resource(self, mock_get_aws_client): method test_delete_resource_no_type (line 248) | async def test_delete_resource_no_type(self): method test_delete_resource_no_identifier (line 253) | async def test_delete_resource_no_identifier(self): method test_delete_resource (line 261) | async def test_delete_resource(self, mock_get_aws_client): method test_get_request_type_no_token (line 288) | async def test_get_request_type_no_token(self): method test_create_template (line 294) | async def test_create_template(self, mock_create_template_impl): FILE: src/cloudtrail-mcp-server/awslabs/cloudtrail_mcp_server/common.py function remove_null_values (line 22) | def remove_null_values(data: Dict[str, Any]) -> Dict[str, Any]: function parse_relative_time (line 34) | def parse_relative_time(time_str: str) -> datetime: function parse_time_input (line 82) | def parse_time_input(time_input: str) -> datetime: function validate_max_results (line 135) | def validate_max_results( FILE: src/cloudtrail-mcp-server/awslabs/cloudtrail_mcp_server/models.py class EventDataStore (line 22) | class EventDataStore(BaseModel): method serialize_datetime (line 45) | def serialize_datetime(self, value: Optional[datetime]) -> Optional[str]: class QueryResult (line 50) | class QueryResult(BaseModel): method model_dump (line 60) | def model_dump(self, **kwargs): class QueryStatus (line 66) | class QueryStatus(BaseModel): method model_dump (line 76) | def model_dump(self, **kwargs): FILE: src/cloudtrail-mcp-server/awslabs/cloudtrail_mcp_server/server.py function main (line 43) | def main(): FILE: src/cloudtrail-mcp-server/awslabs/cloudtrail_mcp_server/tools.py class CloudTrailTools (line 38) | class CloudTrailTools: method __init__ (line 41) | def __init__(self): method _get_cloudtrail_client (line 45) | def _get_cloudtrail_client(self, region: str): method register (line 62) | def register(self, mcp): method lookup_events (line 79) | async def lookup_events( method lake_query (line 225) | async def lake_query( method get_query_status (line 431) | async def get_query_status( method get_query_results (line 480) | async def get_query_results( method list_event_data_stores (line 562) | async def list_event_data_stores( FILE: src/cloudtrail-mcp-server/tests/conftest.py function tests_setup_and_teardown (line 9) | def tests_setup_and_teardown(): FILE: src/cloudtrail-mcp-server/tests/test_init.py class TestInit (line 21) | class TestInit: method test_version (line 24) | def test_version(self): method test_module_reload (line 41) | def test_module_reload(self): FILE: src/cloudtrail-mcp-server/tests/test_main.py class TestMain (line 21) | class TestMain: method test_main_default (line 26) | def test_main_default(self, mock_run): method test_module_execution (line 35) | def test_module_execution(self): FILE: src/cloudtrail-mcp-server/tests/test_models.py class TestEventDataStore (line 26) | class TestEventDataStore: method test_event_data_store_with_pascal_case_fields (line 29) | def test_event_data_store_with_pascal_case_fields(self): method test_event_data_store_with_snake_case_fields (line 59) | def test_event_data_store_with_snake_case_fields(self): method test_event_data_store_with_minimal_fields (line 89) | def test_event_data_store_with_minimal_fields(self): method test_event_data_store_with_advanced_event_selectors (line 109) | def test_event_data_store_with_advanced_event_selectors(self): method test_event_data_store_json_serialization (line 136) | def test_event_data_store_json_serialization(self): class TestQueryResult (line 152) | class TestQueryResult: method test_query_result_basic (line 155) | def test_query_result_basic(self): method test_query_result_with_statistics (line 166) | def test_query_result_with_statistics(self): method test_query_result_with_rows (line 186) | def test_query_result_with_rows(self): method test_query_result_with_pagination (line 205) | def test_query_result_with_pagination(self): method test_query_result_with_error (line 215) | def test_query_result_with_error(self): method test_query_result_complete_example (line 227) | def test_query_result_complete_example(self): class TestQueryStatus (line 260) | class TestQueryStatus: method test_query_status_basic (line 263) | def test_query_status_basic(self): method test_query_status_with_statistics (line 274) | def test_query_status_with_statistics(self): method test_query_status_finished_with_delivery (line 293) | def test_query_status_finished_with_delivery(self): method test_query_status_failed_with_error (line 321) | def test_query_status_failed_with_error(self): method test_query_status_cancelled (line 335) | def test_query_status_cancelled(self): method test_query_status_timed_out (line 354) | def test_query_status_timed_out(self): method test_query_status_delivery_in_progress (line 377) | def test_query_status_delivery_in_progress(self): class TestModelIntegration (line 392) | class TestModelIntegration: method test_models_with_none_values (line 395) | def test_models_with_none_values(self): method test_models_json_serialization (line 431) | def test_models_json_serialization(self): method test_model_field_aliases_consistency (line 461) | def test_model_field_aliases_consistency(self): method test_models_with_complex_data_types (line 473) | def test_models_with_complex_data_types(self): FILE: src/cloudtrail-mcp-server/tests/test_server.py function test_server_import (line 29) | def test_server_import(): function test_cloudtrail_tools_initialization (line 37) | def test_cloudtrail_tools_initialization(): class TestCommonUtilities (line 43) | class TestCommonUtilities: method test_parse_relative_time_valid_inputs (line 46) | def test_parse_relative_time_valid_inputs(self): method test_parse_relative_time_invalid_input (line 62) | def test_parse_relative_time_invalid_input(self): method test_parse_time_input_iso_format (line 67) | def test_parse_time_input_iso_format(self): method test_parse_time_input_relative_format (line 74) | def test_parse_time_input_relative_format(self): method test_validate_max_results (line 81) | def test_validate_max_results(self): method test_remove_null_values (line 93) | def test_remove_null_values(self): method test_parse_time_input_various_formats (line 127) | def test_parse_time_input_various_formats(self): method test_parse_time_input_invalid_format_with_comprehensive_error (line 141) | def test_parse_time_input_invalid_format_with_comprehensive_error(self): method test_parse_time_input_partially_invalid_iso_with_detailed_errors (line 152) | def test_parse_time_input_partially_invalid_iso_with_detailed_errors(s... method test_parse_time_input_edge_cases (line 163) | def test_parse_time_input_edge_cases(self): method test_parse_time_input_comprehensive_iso_formats (line 180) | def test_parse_time_input_comprehensive_iso_formats(self): method test_parse_relative_time_various_units (line 201) | def test_parse_relative_time_various_units(self): class TestCloudTrailToolsMocked (line 222) | class TestCloudTrailToolsMocked: method test_get_cloudtrail_client (line 226) | def test_get_cloudtrail_client(self, mock_session): FILE: src/cloudtrail-mcp-server/tests/test_tools.py class TestCloudTrailToolsInitialization (line 26) | class TestCloudTrailToolsInitialization: method test_initialization (line 29) | def test_initialization(self): method test_get_cloudtrail_client_without_profile (line 35) | def test_get_cloudtrail_client_without_profile(self, mock_session): method test_get_cloudtrail_client_with_profile (line 50) | def test_get_cloudtrail_client_with_profile(self, mock_session): method test_get_cloudtrail_client_error_handling (line 64) | def test_get_cloudtrail_client_error_handling(self, mock_session): class TestLookupEvents (line 74) | class TestLookupEvents: method tools (line 78) | def tools(self): method mock_context (line 83) | def mock_context(self): method sample_events (line 89) | def sample_events(self): method test_lookup_events_basic (line 128) | async def test_lookup_events_basic(self, mock_get_client, tools, mock_... method test_lookup_events_with_filters (line 155) | async def test_lookup_events_with_filters( method test_lookup_events_with_time_range (line 180) | async def test_lookup_events_with_time_range( method test_lookup_events_different_region (line 201) | async def test_lookup_events_different_region( method test_lookup_events_with_next_token (line 219) | async def test_lookup_events_with_next_token( method test_lookup_events_with_next_token_and_filters (line 248) | async def test_lookup_events_with_next_token_and_filters( method test_lookup_events_without_next_token_in_response (line 284) | async def test_lookup_events_without_next_token_in_response( method test_lookup_events_pagination_missing_start_time_error (line 306) | async def test_lookup_events_pagination_missing_start_time_error( method test_lookup_events_pagination_missing_end_time_error (line 325) | async def test_lookup_events_pagination_missing_end_time_error( method test_lookup_events_pagination_missing_both_times_error (line 344) | async def test_lookup_events_pagination_missing_both_times_error( method test_lookup_events_pagination_invalid_time_format_error (line 361) | async def test_lookup_events_pagination_invalid_time_format_error( method test_lookup_events_error_handling (line 381) | async def test_lookup_events_error_handling(self, mock_get_client, too... class TestLakeQuery (line 394) | class TestLakeQuery: method tools (line 398) | def tools(self): method mock_context (line 403) | def mock_context(self): method sample_query_result (line 408) | def sample_query_result(self): method sample_query_data (line 421) | def sample_query_data(self): method test_lake_query_basic (line 434) | async def test_lake_query_basic( method test_lake_query_different_region (line 486) | async def test_lake_query_different_region( method test_lake_query_running_status (line 531) | async def test_lake_query_running_status( method test_lake_query_failed_status (line 555) | async def test_lake_query_failed_status( method test_lake_query_wait_for_completion_false (line 579) | async def test_lake_query_wait_for_completion_false( method test_lake_query_error_handling (line 608) | async def test_lake_query_error_handling(self, mock_get_client, tools,... class TestGetQueryStatus (line 623) | class TestGetQueryStatus: method tools (line 627) | def tools(self): method mock_context (line 632) | def mock_context(self): method sample_query_status (line 637) | def sample_query_status(self): method test_get_query_status_basic (line 652) | async def test_get_query_status_basic( method test_get_query_status_failed (line 674) | async def test_get_query_status_failed(self, mock_get_client, tools, m... method test_get_query_status_different_region (line 694) | async def test_get_query_status_different_region( method test_get_query_status_error_handling (line 714) | async def test_get_query_status_error_handling(self, mock_get_client, ... class TestGetQueryResults (line 727) | class TestGetQueryResults: method tools (line 731) | def tools(self): method mock_context (line 736) | def mock_context(self): method sample_query_results (line 741) | def sample_query_results(self): method sample_query_status (line 753) | def sample_query_status(self): method test_get_query_results_basic (line 767) | async def test_get_query_results_basic( method test_get_query_results_with_max_results (line 795) | async def test_get_query_results_with_max_results( method test_get_query_results_with_next_token (line 818) | async def test_get_query_results_with_next_token( method test_get_query_results_last_page (line 847) | async def test_get_query_results_last_page( method test_get_query_results_empty_results (line 869) | async def test_get_query_results_empty_results( method test_get_query_results_different_region (line 886) | async def test_get_query_results_different_region( method test_get_query_results_max_results_boundary (line 908) | async def test_get_query_results_max_results_boundary( method test_get_query_results_failed_query (line 935) | async def test_get_query_results_failed_query( method test_get_query_results_error_handling (line 960) | async def test_get_query_results_error_handling(self, mock_get_client,... method test_get_query_results_describe_query_error (line 974) | async def test_get_query_results_describe_query_error( class TestListEventDataStores (line 990) | class TestListEventDataStores: method tools (line 994) | def tools(self): method mock_context (line 999) | def mock_context(self): method sample_event_data_stores (line 1004) | def sample_event_data_stores(self): method sample_event_data_store_details (line 1030) | def sample_event_data_store_details(self): method test_list_event_data_stores_basic (line 1045) | async def test_list_event_data_stores_basic( method test_list_event_data_stores_with_details (line 1068) | async def test_list_event_data_stores_with_details( method test_list_event_data_stores_without_details (line 1091) | async def test_list_event_data_stores_without_details( method test_list_event_data_stores_different_region (line 1108) | async def test_list_event_data_stores_different_region( method test_list_event_data_stores_empty_result (line 1126) | async def test_list_event_data_stores_empty_result(self, mock_get_clie... method test_list_event_data_stores_detail_error_handling (line 1138) | async def test_list_event_data_stores_detail_error_handling( method test_list_event_data_stores_error_handling (line 1155) | async def test_list_event_data_stores_error_handling( class TestToolRegistration (line 1170) | class TestToolRegistration: method test_register_tools (line 1173) | def test_register_tools(self): class TestEdgeCases (line 1198) | class TestEdgeCases: method tools (line 1202) | def tools(self): method mock_context (line 1207) | def mock_context(self): method test_lookup_events_with_all_attributes (line 1213) | async def test_lookup_events_with_all_attributes(self, mock_get_client... method test_lookup_events_max_results_boundary (line 1241) | async def test_lookup_events_max_results_boundary(self, mock_get_clien... method test_lake_query_timeout_scenario (line 1264) | async def test_lake_query_timeout_scenario( method test_query_status_with_delivery_info (line 1291) | async def test_query_status_with_delivery_info(self, mock_get_client, ... class TestModels (line 1310) | class TestModels: method test_query_result_model (line 1313) | def test_query_result_model(self): method test_query_status_model (line 1335) | def test_query_status_model(self): method test_event_data_store_model_with_aliases (line 1354) | def test_event_data_store_model_with_aliases(self): method test_event_data_store_model_with_snake_case (line 1377) | def test_event_data_store_model_with_snake_case(self): FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/audit_presentation_utils.py function extract_findings_summary (line 22) | def extract_findings_summary(audit_result: str) -> Tuple[List[Dict[str, ... function format_findings_summary (line 45) | def format_findings_summary(findings: List[Dict[str, Any]], audit_type: ... function create_targeted_audit_request (line 126) | def create_targeted_audit_request( function format_detailed_finding_analysis (line 198) | def format_detailed_finding_analysis(finding: Dict[str, Any], detailed_r... function format_pagination_info (line 234) | def format_pagination_info( FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/audit_utils.py function execute_audit_api (line 32) | async def execute_audit_api(input_obj: Dict[str, Any], region: str, bann... function _create_service_target (line 221) | def _create_service_target( function _filter_instrumented_services (line 239) | def _filter_instrumented_services(all_services: List[Any]) -> List[Dict[... function _fetch_instrumented_services_with_pagination (line 291) | def _fetch_instrumented_services_with_pagination( function parse_auditors (line 394) | def parse_auditors( function expand_service_wildcard_patterns (line 433) | def expand_service_wildcard_patterns( function expand_slo_wildcard_patterns (line 609) | def expand_slo_wildcard_patterns( function expand_service_operation_wildcard_patterns (line 714) | def expand_service_operation_wildcard_patterns( function _compile_wildcard_pattern (line 888) | def _compile_wildcard_pattern(pattern: Optional[str]) -> Optional[re.Pat... function _matches_wildcard_pattern (line 919) | def _matches_wildcard_pattern(text: Optional[str], compiled_pattern: Opt... FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/aws_clients.py function _initialize_aws_clients (line 29) | def _initialize_aws_clients(): FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/canary_utils.py function check_iam_exists_for_canary (line 34) | async def check_iam_exists_for_canary(canary: dict, iam_client) -> dict: function check_lambda_permissions (line 57) | async def check_lambda_permissions(canary: dict, iam_client) -> dict: function analyze_iam_role_and_policies (line 137) | async def analyze_iam_role_and_policies(canary: dict, iam_client, region... function analyze_har_file (line 184) | async def analyze_har_file(s3_client, bucket_name, har_files, is_failed_... function analyze_screenshots (line 351) | async def analyze_screenshots(s3_client, bucket_name, screenshots, is_fa... function analyze_log_files (line 408) | async def analyze_log_files(s3_client, bucket_name, logs, is_failed_run=... function check_resource_arns_correct (line 492) | def check_resource_arns_correct(canary: dict, iam_client) -> dict: function _matches_bucket_pattern (line 561) | def _matches_bucket_pattern(actual_bucket: str, pattern: str) -> bool: function analyze_canary_logs_with_time_window (line 573) | async def analyze_canary_logs_with_time_window( function extract_disk_memory_usage_metrics (line 673) | async def extract_disk_memory_usage_metrics(canary_name: str, region: st... function get_canary_code (line 763) | async def get_canary_code(canary: dict, region: str = 'us-east-1') -> dict: function get_canary_metrics_and_service_insights (line 893) | async def get_canary_metrics_and_service_insights(canary_name: str, regi... FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/change_tools.py function _filter_service_states_by_attributes (line 26) | def _filter_service_states_by_attributes( function _process_change_events (line 53) | def _process_change_events(events: List[Dict]) -> tuple[List[Dict], Dict... function _list_change_events (line 105) | async def _list_change_events( function _list_entity_events (line 234) | async def _list_entity_events( function _list_service_states (line 297) | async def _list_service_states( function list_change_events (line 352) | async def list_change_events( FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/enablement_tools.py function get_enablement_guide (line 21) | async def get_enablement_guide( FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/group_tools.py function _matches_group (line 54) | def _matches_group(service_groups: List[Dict], group_name: str) -> bool: function _discover_services_by_group (line 76) | async def _discover_services_by_group( function _format_no_services_found (line 150) | def _format_no_services_found(group_name: str, discovery_stats: Dict[str... function _build_group_header (line 170) | def _build_group_header( function _setup_group_tool (line 187) | async def _setup_group_tool( function list_group_services (line 219) | async def list_group_services( function audit_group_health (line 334) | async def audit_group_health( function get_group_dependencies (line 764) | async def get_group_dependencies( function get_group_changes (line 979) | async def get_group_changes( function list_grouping_attribute_definitions (line 1173) | async def list_grouping_attribute_definitions() -> str: FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/server.py function _filter_operation_targets (line 118) | def _filter_operation_targets(provided): function audit_services (line 159) | async def audit_services( function audit_slos (line 471) | async def audit_slos( function audit_service_operations (line 725) | async def audit_service_operations( function analyze_canary_failures (line 981) | async def analyze_canary_failures(canary_name: str, region: str = AWS_RE... function main (line 1507) | def main(): FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/service_audit_utils.py function _ci_get (line 22) | def _ci_get(d: dict, *names) -> Optional[Any]: function _need (line 34) | def _need(d: dict, *names): function coerce_service_target (line 42) | def coerce_service_target(t: dict) -> dict: function normalize_service_entity (line 87) | def normalize_service_entity(entity: dict) -> dict: function normalize_service_target (line 100) | def normalize_service_target(item: dict) -> dict: function normalize_service_targets (line 108) | def normalize_service_targets(raw: List[dict]) -> List[dict]: function validate_and_enrich_service_targets (line 138) | def validate_and_enrich_service_targets( FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/service_tools.py function list_monitored_services (line 25) | async def list_monitored_services() -> str: function get_service_detail (line 125) | async def get_service_detail( function query_service_metrics (line 255) | async def query_service_metrics( function list_service_operations (line 461) | async def list_service_operations( FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/sli_report_client.py class AWSConfig (line 30) | class AWSConfig: method __init__ (line 45) | def __init__( class SLOSummary (line 74) | class SLOSummary: class MetricDataResult (line 93) | class MetricDataResult: class SLIReport (line 105) | class SLIReport: method __init__ (line 112) | def __init__( method start_time (line 143) | def start_time(self) -> datetime: method end_time (line 148) | def end_time(self) -> datetime: method sli_status (line 153) | def sli_status(self) -> str: method total_slo_count (line 158) | def total_slo_count(self) -> int: method ok_slo_count (line 163) | def ok_slo_count(self) -> int: method breached_slo_count (line 168) | def breached_slo_count(self) -> int: method breached_slo_names (line 173) | def breached_slo_names(self) -> List[str]: class SLIReportClient (line 178) | class SLIReportClient: method __init__ (line 184) | def __init__(self, config: AWSConfig): method get_slo_summaries (line 200) | def get_slo_summaries(self) -> List[SLOSummary]: method create_metric_queries (line 231) | def create_metric_queries(self, slo_summaries: List[SLOSummary]) -> Li... method get_metric_data (line 250) | def get_metric_data( method get_sli_status (line 279) | def get_sli_status(self, num_breaching: int) -> str: method generate_sli_report (line 283) | def generate_sli_report(self) -> SLIReport: FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/slo_tools.py function get_slo (line 25) | async def get_slo( function list_slos (line 278) | async def list_slos( FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/trace_tools.py function get_trace_summaries_paginated (line 29) | def get_trace_summaries_paginated( function check_transaction_search_enabled (line 94) | def check_transaction_search_enabled(region: str = 'us-east-1') -> tuple... function search_transaction_spans (line 118) | async def search_transaction_spans( function query_sampled_traces (line 329) | async def query_sampled_traces( function list_slis (line 607) | async def list_slis( FILE: src/cloudwatch-applicationsignals-mcp-server/awslabs/cloudwatch_applicationsignals_mcp_server/utils.py function remove_null_values (line 41) | def remove_null_values(data: dict) -> dict: function parse_timestamp (line 53) | def parse_timestamp(timestamp_str: str, default_hours: int = 24) -> date... function calculate_name_similarity (line 83) | def calculate_name_similarity( function parse_time_range (line 201) | def parse_time_range( function fetch_metric_stats (line 224) | def fetch_metric_stats( function list_services_paginated (line 276) | def list_services_paginated( FILE: src/cloudwatch-applicationsignals-mcp-server/evals/__main__.py function _discover_tasks (line 48) | def _discover_tasks(task_dir: Path) -> tuple[List[Task], Dict[str, List[... function _report_task_results (line 106) | def _report_task_results(task: Task, result: TaskResult, verbose: bool =... function main (line 124) | async def main(): FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/captor.py class Captor (line 38) | class Captor(ABC): method capture (line 43) | def capture( class GitDiffCaptor (line 56) | class GitDiffCaptor(Captor): method __init__ (line 59) | def __init__( method capture (line 76) | def capture( class ToolCallsCaptor (line 103) | class ToolCallsCaptor(Captor): method capture (line 106) | def capture( class ConversationCaptor (line 127) | class ConversationCaptor(Captor): method capture (line 130) | def capture( class FinalResponseCaptor (line 140) | class FinalResponseCaptor(Captor): method capture (line 143) | def capture( class ToolResultsCaptor (line 159) | class ToolResultsCaptor(Captor): method capture (line 162) | def capture( FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/conversation_runner.py function convert_mcp_tools_to_bedrock (line 43) | def convert_mcp_tools_to_bedrock(mcp_tools) -> List[Dict[str, Any]]: function execute_tool (line 68) | async def execute_tool( function run_conversation (line 165) | async def run_conversation( FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/eval_mcp_server_wrapper.py function load_mock_config (line 38) | def load_mock_config() -> dict: function apply_mocks (line 62) | def apply_mocks(mock_config: dict): function run_server (line 82) | def run_server(server_path: str, server_cwd: Optional[str] = None): function main (line 126) | def main(): FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/eval_runner.py class EvalRunner (line 31) | class EvalRunner: method __init__ (line 34) | def __init__(self, tasks: List[Task]): method run_all (line 42) | async def run_all( method run_task (line 62) | async def run_task( method _execute_captors (line 139) | async def _execute_captors( method _execute_validators (line 157) | async def _execute_validators( FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/file_tools.py function get_file_tools (line 30) | def get_file_tools() -> List[Dict[str, Any]]: FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/llm_provider.py class LLMProvider (line 25) | class LLMProvider(ABC): method converse (line 33) | def converse( class BedrockLLMProvider (line 54) | class BedrockLLMProvider(LLMProvider): method __init__ (line 57) | def __init__( method converse (line 89) | def converse( FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/mcp_client.py function connect_to_mcp_server (line 32) | async def connect_to_mcp_server( FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/mcp_dependency_mocking_handler.py class UnmockedMethodError (line 37) | class UnmockedMethodError(Exception): method __init__ (line 47) | def __init__(self, service_name: str, method_name: str, available_meth... class McpDependencyMockingHandler (line 65) | class McpDependencyMockingHandler(ABC): method get_library_name (line 73) | def get_library_name(self) -> str: method patch (line 82) | def patch(self, mock_config: Dict[str, Any]) -> None: method unpatch (line 91) | def unpatch(self) -> None: method resolve_method_mock_config (line 95) | def resolve_method_mock_config(self, arg_response_pair: Dict[str, Any]... method resolve_method_mock_configs (line 133) | def resolve_method_mock_configs( method _create_parameter_aware_mock (line 161) | def _create_parameter_aware_mock(self, operation: str, matchers: list)... class Boto3DependencyMockingHandler (line 196) | class Boto3DependencyMockingHandler(McpDependencyMockingHandler): method __init__ (line 202) | def __init__(self): method get_library_name (line 207) | def get_library_name(self) -> str: method patch (line 211) | def patch(self, mock_config: Dict[str, Any]) -> None: method unpatch (line 232) | def unpatch(self) -> None: method _create_mock_client (line 241) | def _create_mock_client(self, service_name: str, **kwargs): class McpDependencyMockingHandlerRegistry (line 268) | class McpDependencyMockingHandlerRegistry: method __init__ (line 274) | def __init__(self): method _register_builtin_handlers (line 279) | def _register_builtin_handlers(self): method register (line 283) | def register(self, handler: McpDependencyMockingHandler): method get_handler (line 292) | def get_handler(self, library_name: str) -> Optional[McpDependencyMock... method list_supported_libraries (line 303) | def list_supported_libraries(self) -> list[str]: method patch_all (line 311) | def patch_all(self, mock_config: Dict[str, Any]) -> None: method unpatch_all (line 327) | def unpatch_all(self) -> None: function get_registry (line 337) | def get_registry() -> McpDependencyMockingHandlerRegistry: FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/metrics_tracker.py class MetricsTracker (line 25) | class MetricsTracker: method __init__ (line 28) | def __init__(self): method start_task (line 36) | def start_task(self): method end_task (line 40) | def end_task(self): method record_turn_count (line 44) | def record_turn_count(self, turn_count: int): method record_tool_call (line 52) | def record_tool_call( method success_rate (line 73) | def success_rate(self) -> float: method tool_call_count (line 80) | def tool_call_count(self) -> int: method unique_tools_count (line 85) | def unique_tools_count(self) -> int: method task_duration (line 90) | def task_duration(self) -> float: method tool_breakdown (line 97) | def tool_breakdown(self) -> Dict[str, Dict[str, int]]: method file_operation_count (line 112) | def file_operation_count(self) -> int: method file_read_count (line 117) | def file_read_count(self) -> int: method file_write_count (line 124) | def file_write_count(self) -> int: method _get_file_operation_calls (line 130) | def _get_file_operation_calls(self) -> List[Dict[str, Any]]: method _compare_expected_tools (line 138) | def _compare_expected_tools(self, expected_tools: List[str]) -> Dict[s... method get_metrics_report (line 162) | def get_metrics_report(self, expected_tools: Optional[List[str]] = Non... FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/mock_config_path_normalizer.py class MockConfigPathNormalizer (line 33) | class MockConfigPathNormalizer: method is_fixture_file_reference (line 44) | def is_fixture_file_reference(value: Any) -> bool: method resolve_mock_config (line 58) | def resolve_mock_config(mock_config: Dict[str, Any], fixtures_dir: Pat... method has_fixture_references (line 76) | def has_fixture_references(mock_config: Dict[str, Any]) -> bool: method _resolve_fixture_paths (line 99) | def _resolve_fixture_paths(mock_config: Dict[str, Any], fixtures_dir: ... method _resolve_request_response_pair (line 117) | def _resolve_request_response_pair(pair: Dict[str, Any], fixtures_dir:... FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/process_executor.py class ProcessResult (line 24) | class ProcessResult: class ProcessExecutor (line 32) | class ProcessExecutor(ABC): method run (line 36) | def run( class SubprocessExecutor (line 46) | class SubprocessExecutor(ProcessExecutor): method run (line 49) | def run( FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/task.py class Task (line 28) | class Task(ABC): method get_prompt (line 71) | def get_prompt(self, working_directory: Path) -> str: method get_captors (line 86) | def get_captors(self, working_directory: Path) -> List[Captor]: method get_validators (line 102) | def get_validators(self, working_directory: Path) -> List[Validator]: method resolved_mock_config (line 129) | def resolved_mock_config(self) -> Optional[dict]: method get_working_directory (line 151) | def get_working_directory(self) -> Optional[Path]: method get_server_file (line 156) | def get_server_file(self) -> Path: method get_server_root_directory (line 161) | def get_server_root_directory(self) -> Path: method setup (line 165) | def setup(self, working_directory: Path) -> None: method cleanup (line 178) | def cleanup(self, working_directory: Path) -> None: method __str__ (line 191) | def __str__(self) -> str: FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/task_result.py class TaskResult (line 23) | class TaskResult: method from_execution (line 45) | def from_execution( method from_error (line 81) | def from_error(cls, task_id: str, error: str) -> 'TaskResult': method get_captured_data_str (line 97) | def get_captured_data_str(self) -> str: method __str__ (line 123) | def __str__(self) -> str: FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/validation_prompts.py class ValidationPromptType (line 88) | class ValidationPromptType(Enum): method format (line 101) | def format(self, rubric_items: str, captured_data: str, num_criteria: ... FILE: src/cloudwatch-applicationsignals-mcp-server/evals/core/validator.py class CriterionResult (line 37) | class CriterionResult(TypedDict): class ValidationResult (line 45) | class ValidationResult(TypedDict, total=False): class Validator (line 66) | class Validator(ABC): method get_name (line 70) | def get_name(self) -> str: method validate (line 78) | async def validate( class LLMJudgeValidator (line 89) | class LLMJudgeValidator(Validator): method __init__ (line 92) | def __init__( method get_name (line 114) | def get_name(self) -> str: method validate (line 118) | async def validate( method _format_captured_data (line 160) | def _format_captured_data(self, captured_data: Dict[str, Any]) -> str: method _parse_llm_response (line 185) | def _parse_llm_response(self, response_text: str, rubric: List[str]) -... class ToolCallValidator (line 239) | class ToolCallValidator(Validator): method __init__ (line 242) | def __init__(self, expected_tool_calls: List[List[str]], ignore_file_t... method get_name (line 253) | def get_name(self) -> str: method validate (line 257) | async def validate( class BuildValidator (line 319) | class BuildValidator(Validator): method __init__ (line 322) | def __init__( method get_name (line 339) | def get_name(self) -> str: method validate (line 343) | async def validate( FILE: src/cloudwatch-applicationsignals-mcp-server/evals/tasks/applicationsignals/base.py class ApplicationSignalsTask (line 29) | class ApplicationSignalsTask(Task): method get_server_root_directory (line 35) | def get_server_root_directory(self) -> Path: method get_server_file (line 42) | def get_server_file(self) -> Path: FILE: src/cloudwatch-applicationsignals-mcp-server/evals/tasks/applicationsignals/get_enablement_guide/enablement_tasks.py class EnablementTask (line 47) | class EnablementTask(ApplicationSignalsTask): method __init__ (line 57) | def __init__( method get_working_directory (line 104) | def get_working_directory(self): method get_prompt (line 112) | def get_prompt(self, working_directory: Path) -> str: method rubric (line 133) | def rubric(self) -> list[str]: method get_captors (line 137) | def get_captors(self, working_directory: Path) -> list[Captor]: method get_validators (line 154) | def get_validators(self, working_directory: Path) -> list[Validator]: method cleanup (line 187) | def cleanup(self, working_directory: Path): FILE: src/cloudwatch-applicationsignals-mcp-server/evals/tasks/applicationsignals/investigations/investigation_tasks.py class InvestigationTask (line 41) | class InvestigationTask(ApplicationSignalsTask): method __init__ (line 44) | def __init__( method get_working_directory (line 63) | def get_working_directory(self) -> Optional[Path]: method get_prompt (line 69) | def get_prompt(self, working_directory: Path) -> str: method get_captors (line 76) | def get_captors(self, working_directory: Path) -> list[Captor]: method get_validators (line 80) | def get_validators(self, working_directory: Path) -> list[Validator]: method setup (line 95) | def setup(self, working_directory: Path): method cleanup (line 109) | def cleanup(self, working_directory: Path): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_audit_presentation_utils.py class TestExtractFindingsSummary (line 27) | class TestExtractFindingsSummary: method test_extract_findings_from_valid_json (line 30) | def test_extract_findings_from_valid_json(self): method test_extract_findings_no_json (line 50) | def test_extract_findings_no_json(self): method test_extract_findings_invalid_json (line 59) | def test_extract_findings_invalid_json(self): method test_extract_findings_no_audit_findings_key (line 68) | def test_extract_findings_no_audit_findings_key(self): method test_extract_findings_empty_findings (line 77) | def test_extract_findings_empty_findings(self): class TestFormatFindingsSummary (line 87) | class TestFormatFindingsSummary: method test_format_no_findings (line 90) | def test_format_no_findings(self): method test_format_single_critical_finding (line 97) | def test_format_single_critical_finding(self): method test_format_mixed_severity_findings (line 110) | def test_format_mixed_severity_findings(self): method test_format_findings_without_description (line 127) | def test_format_findings_without_description(self): method test_format_findings_case_insensitive_severity (line 136) | def test_format_findings_case_insensitive_severity(self): method test_format_findings_default_severity (line 148) | def test_format_findings_default_severity(self): class TestCreateTargetedAuditRequest (line 157) | class TestCreateTargetedAuditRequest: method test_create_service_audit_request (line 160) | def test_create_service_audit_request(self): method test_create_slo_audit_request (line 183) | def test_create_slo_audit_request(self): method test_create_operation_audit_request (line 198) | def test_create_operation_audit_request(self): method test_create_audit_request_invalid_index (line 232) | def test_create_audit_request_invalid_index(self): method test_create_audit_request_no_matching_target (line 243) | def test_create_audit_request_no_matching_target(self): method test_create_audit_request_operation_service_name_match (line 259) | def test_create_audit_request_operation_service_name_match(self): class TestFormatDetailedFindingAnalysis (line 287) | class TestFormatDetailedFindingAnalysis: method test_format_detailed_analysis_complete (line 290) | def test_format_detailed_analysis_complete(self): method test_format_detailed_analysis_minimal (line 314) | def test_format_detailed_analysis_minimal(self): method test_format_detailed_analysis_warning_severity (line 328) | def test_format_detailed_analysis_warning_severity(self): method test_format_detailed_analysis_info_severity (line 337) | def test_format_detailed_analysis_info_severity(self): method test_format_detailed_analysis_unknown_severity (line 346) | def test_format_detailed_analysis_unknown_severity(self): method test_format_detailed_analysis_empty_description (line 355) | def test_format_detailed_analysis_empty_description(self): class TestFormatPaginationInfo (line 365) | class TestFormatPaginationInfo: method test_format_pagination_info_no_wildcards (line 368) | def test_format_pagination_info_no_wildcards(self): method test_format_pagination_info_empty_names (line 383) | def test_format_pagination_info_empty_names(self): method test_format_pagination_info_with_next_token (line 398) | def test_format_pagination_info_with_next_token(self): method test_format_pagination_info_no_next_token (line 423) | def test_format_pagination_info_no_next_token(self): method test_format_pagination_info_slos (line 443) | def test_format_pagination_info_slos(self): method test_format_pagination_info_operations (line 462) | def test_format_pagination_info_operations(self): method test_format_pagination_info_empty_string_token (line 479) | def test_format_pagination_info_empty_string_token(self): method test_format_pagination_info_special_characters_in_names (line 496) | def test_format_pagination_info_special_characters_in_names(self): method test_format_pagination_info_long_service_names (line 518) | def test_format_pagination_info_long_service_names(self): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_audit_services_filtering.py function mock_applicationsignals_client (line 23) | def mock_applicationsignals_client(): function mock_execute_audit_api (line 30) | def mock_execute_audit_api(): class TestAuditServicesFiltering (line 39) | class TestAuditServicesFiltering: method test_audit_services_with_filtering_stats (line 43) | async def test_audit_services_with_filtering_stats( method test_audit_services_no_filtering_when_no_wildcards (line 116) | async def test_audit_services_no_filtering_when_no_wildcards( method test_audit_services_wildcard_expansion_with_filtering (line 156) | async def test_audit_services_wildcard_expansion_with_filtering( method test_audit_services_no_services_after_filtering (line 244) | async def test_audit_services_no_services_after_filtering( method test_audit_services_shorthand_format_with_wildcards (line 281) | async def test_audit_services_shorthand_format_with_wildcards( method test_audit_services_multiple_wildcard_targets (line 347) | async def test_audit_services_multiple_wildcard_targets( method test_audit_services_filtering_stats_zero_filtered (line 432) | async def test_audit_services_filtering_stats_zero_filtered( method test_audit_services_wildcard_detection_data_service_name (line 516) | async def test_audit_services_wildcard_detection_data_service_name( method test_audit_services_wildcard_detection_shorthand_service (line 576) | async def test_audit_services_wildcard_detection_shorthand_service( method test_audit_services_no_wildcard_detection_empty_service_name (line 634) | async def test_audit_services_no_wildcard_detection_empty_service_name( method test_audit_services_batching_with_filtering_stats (line 654) | async def test_audit_services_batching_with_filtering_stats( FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_audit_utils.py class TestExecuteAuditApi (line 33) | class TestExecuteAuditApi: method mock_applicationsignals_client (line 37) | def mock_applicationsignals_client(self): method sample_input_obj (line 45) | def sample_input_obj(self): method test_execute_audit_api_success_single_batch (line 60) | async def test_execute_audit_api_success_single_batch( method test_execute_audit_api_multiple_batches (line 80) | async def test_execute_audit_api_multiple_batches(self, mock_applicati... method test_execute_audit_api_no_findings (line 108) | async def test_execute_audit_api_no_findings( method test_execute_audit_api_error_handling (line 123) | async def test_execute_audit_api_error_handling( method test_execute_audit_api_log_path_handling (line 136) | async def test_execute_audit_api_log_path_handling( method test_execute_audit_api_batch_errors_aggregation (line 151) | async def test_execute_audit_api_batch_errors_aggregation( method test_execute_audit_api_log_path_exception (line 180) | async def test_execute_audit_api_log_path_exception( class TestParseAuditors (line 209) | class TestParseAuditors: method test_parse_auditors_none_default (line 212) | def test_parse_auditors_none_default(self): method test_parse_auditors_none_root_cause_prompt (line 217) | def test_parse_auditors_none_root_cause_prompt(self): method test_parse_auditors_all_string (line 223) | def test_parse_auditors_all_string(self): method test_parse_auditors_comma_separated (line 228) | def test_parse_auditors_comma_separated(self): method test_parse_auditors_with_spaces (line 233) | def test_parse_auditors_with_spaces(self): method test_parse_auditors_invalid_auditor (line 238) | def test_parse_auditors_invalid_auditor(self): method test_parse_auditors_pydantic_field_object (line 243) | def test_parse_auditors_pydantic_field_object(self): method test_parse_auditors_empty_string (line 252) | def test_parse_auditors_empty_string(self): method test_parse_auditors_valid_auditors (line 257) | def test_parse_auditors_valid_auditors(self): class TestFetchInstrumentedServicesWithPagination (line 275) | class TestFetchInstrumentedServicesWithPagination: method mock_applicationsignals_client (line 279) | def mock_applicationsignals_client(self): method test_fetch_instrumented_services_basic_functionality (line 283) | def test_fetch_instrumented_services_basic_functionality(self, mock_ap... method test_fetch_instrumented_services_empty_response (line 321) | def test_fetch_instrumented_services_empty_response(self, mock_applica... method test_fetch_instrumented_services_all_filtered_out (line 338) | def test_fetch_instrumented_services_all_filtered_out(self, mock_appli... method test_fetch_instrumented_services_pagination_continuation (line 376) | def test_fetch_instrumented_services_pagination_continuation( method test_fetch_instrumented_services_pagination_with_next_token_stops (line 427) | def test_fetch_instrumented_services_pagination_with_next_token_stops( method test_fetch_instrumented_services_exhausts_pagination (line 461) | def test_fetch_instrumented_services_exhausts_pagination(self, mock_ap... method test_fetch_instrumented_services_with_input_next_token (line 508) | def test_fetch_instrumented_services_with_input_next_token( method test_fetch_instrumented_services_max_results_parameter (line 537) | def test_fetch_instrumented_services_max_results_parameter( method test_fetch_instrumented_services_time_parameters (line 566) | def test_fetch_instrumented_services_time_parameters(self, mock_applic... method test_fetch_instrumented_services_statistics_accuracy_across_batches (line 583) | def test_fetch_instrumented_services_statistics_accuracy_across_batches( method test_fetch_instrumented_services_logging (line 656) | def test_fetch_instrumented_services_logging( class TestFilterInstrumentedServices (line 711) | class TestFilterInstrumentedServices: method test_filter_instrumented_services_all_instrumented (line 714) | def test_filter_instrumented_services_all_instrumented(self): method test_filter_instrumented_services_mixed_instrumentation (line 742) | def test_filter_instrumented_services_mixed_instrumentation(self): method test_filter_instrumented_services_no_instrumentation_type (line 776) | def test_filter_instrumented_services_no_instrumentation_type(self): method test_filter_instrumented_services_empty_attribute_maps (line 807) | def test_filter_instrumented_services_empty_attribute_maps(self): method test_filter_instrumented_services_invalid_service_name (line 836) | def test_filter_instrumented_services_invalid_service_name(self): method test_filter_instrumented_services_invalid_service_type (line 878) | def test_filter_instrumented_services_invalid_service_type(self): method test_filter_instrumented_services_multiple_attribute_maps (line 913) | def test_filter_instrumented_services_multiple_attribute_maps(self): method test_filter_instrumented_services_non_dict_attribute_map (line 948) | def test_filter_instrumented_services_non_dict_attribute_map(self): method test_filter_instrumented_services_empty_input (line 970) | def test_filter_instrumented_services_empty_input(self): method test_filter_instrumented_services_missing_key_attributes (line 975) | def test_filter_instrumented_services_missing_key_attributes(self): method test_filter_instrumented_services_logging (line 1003) | def test_filter_instrumented_services_logging(self, mock_logger): method test_filter_instrumented_services_case_sensitivity (line 1046) | def test_filter_instrumented_services_case_sensitivity(self): method test_filter_instrumented_services_aws_native_filtering (line 1091) | def test_filter_instrumented_services_aws_native_filtering(self): method test_filter_instrumented_services_break_on_first_uninstrumented (line 1118) | def test_filter_instrumented_services_break_on_first_uninstrumented(se... method test_filter_instrumented_services_real_world_scenario (line 1140) | def test_filter_instrumented_services_real_world_scenario(self): class TestExpandServiceWildcardPatterns (line 1212) | class TestExpandServiceWildcardPatterns: method mock_applicationsignals_client (line 1216) | def mock_applicationsignals_client(self): method test_expand_service_wildcard_all_services (line 1246) | def test_expand_service_wildcard_all_services(self, mock_applicationsi... method test_expand_service_wildcard_pattern_match (line 1275) | def test_expand_service_wildcard_pattern_match(self, mock_applications... method test_expand_service_wildcard_compiled_pattern (line 1303) | def test_expand_service_wildcard_compiled_pattern(self, mock_applicati... method test_expand_service_wildcard_multiple_wildcards (line 1351) | def test_expand_service_wildcard_multiple_wildcards(self, mock_applica... method test_expand_service_no_wildcard (line 1407) | def test_expand_service_no_wildcard(self, mock_applicationsignals_clie... method test_expand_service_shorthand_format (line 1438) | def test_expand_service_shorthand_format(self, mock_applicationsignals... method test_expand_service_api_error (line 1463) | def test_expand_service_api_error(self, mock_applicationsignals_client): method test_expand_service_non_service_targets (line 1477) | def test_expand_service_non_service_targets(self, mock_applicationsign... method test_expand_service_fuzzy_matching (line 1501) | def test_expand_service_fuzzy_matching(self, mock_similarity, mock_app... method test_expand_service_wildcard_with_pagination (line 1529) | def test_expand_service_wildcard_with_pagination(self, mock_applicatio... method test_expand_service_wildcard_with_next_token_input (line 1561) | def test_expand_service_wildcard_with_next_token_input(self, mock_appl... method test_expand_service_wildcard_max_results_parameter (line 1582) | def test_expand_service_wildcard_max_results_parameter(self, mock_appl... method test_expand_service_wildcard_service_names_collection (line 1599) | def test_expand_service_wildcard_service_names_collection( method test_expand_service_wildcard_filters_unknown_services (line 1642) | def test_expand_service_wildcard_filters_unknown_services( method test_expand_service_wildcard_auto_continue_to_next_batch (line 1691) | def test_expand_service_wildcard_auto_continue_to_next_batch( method test_expand_service_wildcard_no_instrumented_services_anywhere (line 1753) | def test_expand_service_wildcard_no_instrumented_services_anywhere( method test_expand_service_wildcard_filtering_stats_across_batches (line 1815) | def test_expand_service_wildcard_filtering_stats_across_batches( method test_expand_service_wildcard_pagination_logging (line 1899) | def test_expand_service_wildcard_pagination_logging( class TestExpandSloWildcardPatterns (line 1966) | class TestExpandSloWildcardPatterns: method mock_applicationsignals_client (line 1970) | def mock_applicationsignals_client(self): method test_expand_slo_wildcard_all_slos (line 1991) | def test_expand_slo_wildcard_all_slos(self, mock_applicationsignals_cl... method test_expand_slo_wildcard_pattern_match (line 2007) | def test_expand_slo_wildcard_pattern_match(self, mock_applicationsigna... method test_expand_slo_wildcard_compiled_pattern (line 2023) | def test_expand_slo_wildcard_compiled_pattern(self, mock_applicationsi... method test_expand_slo_wildcard_multiple_wildcards (line 2054) | def test_expand_slo_wildcard_multiple_wildcards(self, mock_application... method test_expand_slo_no_wildcard (line 2085) | def test_expand_slo_no_wildcard(self, mock_applicationsignals_client): method test_expand_slo_invalid_format_string (line 2098) | def test_expand_slo_invalid_format_string(self, mock_applicationsignal... method test_expand_slo_invalid_format_other_type (line 2105) | def test_expand_slo_invalid_format_other_type(self, mock_applicationsi... method test_expand_slo_api_error (line 2119) | def test_expand_slo_api_error(self, mock_applicationsignals_client): method test_expand_slo_wildcard_with_pagination (line 2130) | def test_expand_slo_wildcard_with_pagination(self, mock_applicationsig... method test_expand_slo_wildcard_with_next_token_input (line 2155) | def test_expand_slo_wildcard_with_next_token_input(self, mock_applicat... method test_expand_slo_wildcard_max_results_parameter (line 2174) | def test_expand_slo_wildcard_max_results_parameter(self, mock_applicat... method test_expand_slo_wildcard_slo_names_collection (line 2187) | def test_expand_slo_wildcard_slo_names_collection(self, mock_applicati... method test_expand_slo_wildcard_include_linked_accounts_parameter (line 2217) | def test_expand_slo_wildcard_include_linked_accounts_parameter( method test_expand_slo_wildcard_empty_slo_names_collection (line 2232) | def test_expand_slo_wildcard_empty_slo_names_collection(self, mock_app... class TestExpandServiceOperationWildcardPatterns (line 2272) | class TestExpandServiceOperationWildcardPatterns: method mock_applicationsignals_client (line 2276) | def mock_applicationsignals_client(self): method test_expand_service_operation_wildcard_all (line 2304) | def test_expand_service_operation_wildcard_all(self, mock_applications... method test_expand_service_operation_specific_operation (line 2335) | def test_expand_service_operation_specific_operation(self, mock_applic... method test_expand_service_operation_compiled_pattern (line 2364) | def test_expand_service_operation_compiled_pattern(self, mock_applicat... method test_expand_service_operation_multiple_wildcards (line 2406) | def test_expand_service_operation_multiple_wildcards(self, mock_applic... method test_expand_service_operation_metric_type_filter (line 2448) | def test_expand_service_operation_metric_type_filter(self, mock_applic... method test_expand_service_operation_no_wildcard (line 2477) | def test_expand_service_operation_no_wildcard(self, mock_applicationsi... method test_expand_service_operation_api_error (line 2509) | def test_expand_service_operation_api_error(self, mock_applicationsign... method test_expand_service_operation_operations_api_error (line 2536) | def test_expand_service_operation_operations_api_error(self, mock_appl... method test_expand_service_operation_non_service_operation_targets (line 2570) | def test_expand_service_operation_non_service_operation_targets( method test_expand_service_operation_fault_to_availability_conversion (line 2590) | def test_expand_service_operation_fault_to_availability_conversion( method test_expand_service_operation_wildcard_with_pagination (line 2642) | def test_expand_service_operation_wildcard_with_pagination( method test_expand_service_operation_wildcard_with_next_token_input (line 2688) | def test_expand_service_operation_wildcard_with_next_token_input( method test_expand_service_operation_wildcard_max_results_parameter (line 2724) | def test_expand_service_operation_wildcard_max_results_parameter( method test_expand_service_operation_wildcard_service_names_collection (line 2754) | def test_expand_service_operation_wildcard_service_names_collection( method test_expand_service_operation_wildcard_filters_unknown_services (line 2808) | def test_expand_service_operation_wildcard_filters_unknown_services( method test_expand_service_operation_wildcard_exact_service_match (line 2874) | def test_expand_service_operation_wildcard_exact_service_match( method test_expand_service_operation_wildcard_exact_operation_match (line 2909) | def test_expand_service_operation_wildcard_exact_operation_match( method test_expand_service_operation_wildcard_no_matching_operations (line 2944) | def test_expand_service_operation_wildcard_no_matching_operations( method test_expand_service_operation_wildcard_no_matching_metric_type (line 2989) | def test_expand_service_operation_wildcard_no_matching_metric_type( method test_expand_service_operation_wildcard_time_parameters_passed (line 3039) | def test_expand_service_operation_wildcard_time_parameters_passed( class TestCompileAndMatchesWildcardPattern (line 3076) | class TestCompileAndMatchesWildcardPattern: method test_exact_matches_no_wildcards (line 3079) | def test_exact_matches_no_wildcards(self): method test_case_insensitive_matching (line 3092) | def test_case_insensitive_matching(self): method test_single_wildcard_matches_all (line 3125) | def test_single_wildcard_matches_all(self): method test_prefix_wildcards (line 3133) | def test_prefix_wildcards(self): method test_suffix_wildcards (line 3142) | def test_suffix_wildcards(self): method test_both_ends_wildcards (line 3151) | def test_both_ends_wildcards(self): method test_middle_wildcards (line 3162) | def test_middle_wildcards(self): method test_multiple_wildcards (line 3177) | def test_multiple_wildcards(self): method test_complex_patterns (line 3193) | def test_complex_patterns(self): method test_special_regex_characters_escaped (line 3216) | def test_special_regex_characters_escaped(self): method test_operation_name_patterns (line 3238) | def test_operation_name_patterns(self): method test_service_name_patterns (line 3266) | def test_service_name_patterns(self): method test_empty_and_none_inputs (line 3292) | def test_empty_and_none_inputs(self): method test_multiple_consecutive_wildcards (line 3313) | def test_multiple_consecutive_wildcards(self): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_aws_profile.py function test_aws_profile_branch_coverage (line 9) | def test_aws_profile_branch_coverage(): function test_aws_client_initialization_flow (line 30) | def test_aws_client_initialization_flow(): function test_server_initialization_with_aws_profile_coverage (line 78) | def test_server_initialization_with_aws_profile_coverage(): function test_initialize_aws_clients_with_profile (line 111) | def test_initialize_aws_clients_with_profile(): function test_initialize_aws_clients_with_mcp_source (line 164) | def test_initialize_aws_clients_with_mcp_source(): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_batch_audit.py function mock_aws_clients (line 23) | def mock_aws_clients(): class TestAuditServices (line 113) | class TestAuditServices: method test_next_token_rejected_without_wildcards (line 121) | async def test_next_token_rejected_without_wildcards(self, mock_aws_cl... method test_pagination_with_wildcards (line 138) | async def test_pagination_with_wildcards(self, mock_aws_clients): method test_pagination_last_batch (line 212) | async def test_pagination_last_batch(self, mock_aws_clients): method test_no_services_found_with_wildcard (line 272) | async def test_no_services_found_with_wildcard(self, mock_aws_clients): method test_zero_max_services (line 292) | async def test_zero_max_services(self, mock_aws_clients): method test_negative_max_services (line 326) | async def test_negative_max_services(self, mock_aws_clients): method test_custom_max_services_parameter (line 360) | async def test_custom_max_services_parameter(self, mock_aws_clients): method test_complete_pagination_workflow (line 394) | async def test_complete_pagination_workflow(self, mock_aws_clients): method test_time_parameter_preservation (line 497) | async def test_time_parameter_preservation(self, mock_aws_clients): class TestAuditSlos (line 562) | class TestAuditSlos: method test_next_token_rejected_without_wildcards (line 570) | async def test_next_token_rejected_without_wildcards(self, mock_aws_cl... method test_pagination_with_wildcards (line 585) | async def test_pagination_with_wildcards(self, mock_aws_clients): method test_expansion_failure (line 632) | async def test_expansion_failure(self, mock_aws_clients): method test_successful_execution_with_batching (line 647) | async def test_successful_execution_with_batching(self, mock_aws_clien... method test_successful_execution_without_batching (line 704) | async def test_successful_execution_without_batching(self, mock_aws_cl... class TestAuditServiceOperations (line 761) | class TestAuditServiceOperations: method test_next_token_rejected_without_wildcards (line 769) | async def test_next_token_rejected_without_wildcards(self, mock_aws_cl... method test_pagination_with_wildcards (line 788) | async def test_pagination_with_wildcards(self, mock_aws_clients): method test_no_targets_after_expansion (line 854) | async def test_no_targets_after_expansion(self, mock_aws_clients): method test_successful_execution_with_batching (line 876) | async def test_successful_execution_with_batching(self, mock_aws_clien... method test_successful_execution_without_wildcards (line 952) | async def test_successful_execution_without_wildcards(self, mock_aws_c... FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_canary_utils.py function mock_canary_clients (line 26) | def mock_canary_clients(): function test_check_iam_exists_for_canary (line 45) | async def test_check_iam_exists_for_canary(mock_canary_clients, canary_c... function test_check_lambda_permissions (line 84) | async def test_check_lambda_permissions( function test_analyze_iam_role_and_policies_comprehensive (line 99) | async def test_analyze_iam_role_and_policies_comprehensive(mock_canary_c... function test_check_resource_arns_correct (line 135) | def test_check_resource_arns_correct(mock_canary_clients, s3_location, e... function test_matches_bucket_pattern (line 161) | def test_matches_bucket_pattern(actual_bucket, pattern, expected): function test_analyze_har_file (line 180) | async def test_analyze_har_file(mock_canary_clients, har_files, har_cont... function test_analyze_har_file_with_failures_and_timing (line 194) | async def test_analyze_har_file_with_failures_and_timing(mock_canary_cli... function test_analyze_screenshots (line 228) | async def test_analyze_screenshots(mock_canary_clients, screenshots, exp... function test_analyze_log_files (line 249) | async def test_analyze_log_files(mock_canary_clients, logs, log_content,... function test_extract_disk_memory_usage_metrics (line 269) | async def test_extract_disk_memory_usage_metrics(): function test_analyze_canary_logs_with_time_window (line 304) | async def test_analyze_canary_logs_with_time_window(): function test_get_canary_code (line 329) | async def test_get_canary_code(): function test_get_canary_metrics_and_service_insights (line 358) | async def test_get_canary_metrics_and_service_insights(): function test_analyze_canary_failures_integration (line 373) | async def test_analyze_canary_failures_integration(): function test_check_lambda_permissions_custom_policies (line 419) | async def test_check_lambda_permissions_custom_policies(): function test_check_lambda_permissions_policy_errors (line 452) | async def test_check_lambda_permissions_policy_errors(): function test_analyze_har_file_html_complete_json (line 468) | async def test_analyze_har_file_html_complete_json(): function test_analyze_har_file_html_incomplete_json (line 488) | async def test_analyze_har_file_html_incomplete_json(): function test_analyze_har_file_timing_breakdown (line 503) | async def test_analyze_har_file_timing_breakdown(): function test_check_resource_arns_correct_policy_errors (line 538) | async def test_check_resource_arns_correct_policy_errors(): function test_check_resource_arns_correct_s3_mismatch (line 557) | async def test_check_resource_arns_correct_s3_mismatch(): function test_analyze_canary_logs_no_engine_arn (line 583) | async def test_analyze_canary_logs_no_engine_arn(): function test_analyze_canary_logs_resource_not_found (line 595) | async def test_analyze_canary_logs_resource_not_found(): function test_extract_disk_memory_usage_no_engine_configs (line 614) | async def test_extract_disk_memory_usage_no_engine_configs(): function test_extract_disk_memory_usage_with_engine_configs (line 627) | async def test_extract_disk_memory_usage_with_engine_configs(): function test_get_canary_code_with_engine_configs (line 653) | async def test_get_canary_code_with_engine_configs(): function test_check_iam_exists_access_denied (line 681) | async def test_check_iam_exists_access_denied(): function test_check_lambda_permissions_no_role (line 697) | async def test_check_lambda_permissions_no_role(): function test_analyze_log_files_gzipped_content (line 711) | async def test_analyze_log_files_gzipped_content(): function test_analyze_har_file_gzipped_content (line 730) | async def test_analyze_har_file_gzipped_content(): function test_extract_disk_memory_usage_query_timeout (line 748) | async def test_extract_disk_memory_usage_query_timeout(): function test_get_canary_code_with_layers (line 771) | async def test_get_canary_code_with_layers(): function test_analyze_iam_role_missing_execution (line 803) | async def test_analyze_iam_role_missing_execution(): function test_analyze_iam_role_custom_execution (line 834) | async def test_analyze_iam_role_custom_execution(): function test_analyze_iam_role_with_error (line 865) | async def test_analyze_iam_role_with_error(): function test_analyze_har_file_html_no_var (line 891) | async def test_analyze_har_file_html_no_var(): function test_analyze_log_files_read_error (line 906) | async def test_analyze_log_files_read_error(): function test_check_resource_arns_correct_with_s3_prefix (line 918) | async def test_check_resource_arns_correct_with_s3_prefix(): function test_get_canary_code_source_location_arn (line 934) | async def test_get_canary_code_source_location_arn(): function test_get_canary_code_custom_layers (line 982) | async def test_get_canary_code_custom_layers(): function test_get_canary_code_function_code_fallback (line 1028) | async def test_get_canary_code_function_code_fallback(): function test_get_canary_code_extraction_error (line 1070) | async def test_get_canary_code_extraction_error(): function test_extract_disk_memory_usage_invalid_results (line 1097) | async def test_extract_disk_memory_usage_invalid_results(): function test_coverage_check_lambda_permissions_string_actions (line 1123) | async def test_coverage_check_lambda_permissions_string_actions(): function test_coverage_check_resource_arns_policy_exception (line 1144) | async def test_coverage_check_resource_arns_policy_exception(): function test_coverage_check_resource_arns_string_resources (line 1163) | async def test_coverage_check_resource_arns_string_resources(): function test_coverage_analyze_canary_logs_string_failure_time (line 1189) | async def test_coverage_analyze_canary_logs_string_failure_time(): function test_coverage_analyze_canary_logs_other_client_error (line 1206) | async def test_coverage_analyze_canary_logs_other_client_error(): function test_coverage_extract_disk_memory_usage_query_running (line 1226) | async def test_coverage_extract_disk_memory_usage_query_running(): function test_coverage_get_canary_code_layer_exception (line 1249) | async def test_coverage_get_canary_code_layer_exception(): function test_coverage_get_canary_code_source_location_exception (line 1276) | async def test_coverage_get_canary_code_source_location_exception(): function test_coverage_analyze_iam_role_no_exists (line 1306) | async def test_coverage_analyze_iam_role_no_exists(): function test_coverage_analyze_iam_role_with_vpc (line 1335) | async def test_coverage_analyze_iam_role_with_vpc(): function test_check_resource_arns_correct_no_execution_role (line 1362) | def test_check_resource_arns_correct_no_execution_role(): function test_check_resource_arns_correct_iam_exception (line 1373) | def test_check_resource_arns_correct_iam_exception(): function test_analyze_canary_logs_with_time_window_exception (line 1389) | async def test_analyze_canary_logs_with_time_window_exception(): function test_extract_disk_memory_usage_metrics_exception (line 1405) | async def test_extract_disk_memory_usage_metrics_exception(): function test_extract_disk_memory_usage_metrics_telemetry_exception (line 1419) | async def test_extract_disk_memory_usage_metrics_telemetry_exception(): function test_check_iam_exists_for_canary_no_such_entity (line 1447) | async def test_check_iam_exists_for_canary_no_such_entity(): function test_check_iam_exists_for_canary_other_client_error (line 1462) | async def test_check_iam_exists_for_canary_other_client_error(): function test_check_lambda_permissions_exception (line 1477) | async def test_check_lambda_permissions_exception(): function test_get_canary_code_exception (line 1492) | async def test_get_canary_code_exception(): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_change_tools.py function mock_aws_clients (line 29) | def mock_aws_clients(): class TestListChangeEventsBasic (line 52) | class TestListChangeEventsBasic: method test_basic_functionality_comprehensive_history_true (line 56) | async def test_basic_functionality_comprehensive_history_true(self, mo... method test_basic_functionality_comprehensive_history_false (line 106) | async def test_basic_functionality_comprehensive_history_false(self, m... class TestListChangeEventsValidation (line 156) | class TestListChangeEventsValidation: method test_time_validation_start_after_end (line 160) | async def test_time_validation_start_after_end(self): method test_service_key_attributes_required_for_comprehensive_history (line 172) | async def test_service_key_attributes_required_for_comprehensive_histo... method test_max_results_validation_and_clamping (line 187) | async def test_max_results_validation_and_clamping(self, mock_aws_clie... method test_invalid_timestamp_format_handling (line 215) | async def test_invalid_timestamp_format_handling(self): method test_missing_required_service_key_attributes_type (line 225) | async def test_missing_required_service_key_attributes_type(self): method test_missing_required_service_key_attributes_name (line 243) | async def test_missing_required_service_key_attributes_name(self): method test_missing_required_service_key_attributes_environment (line 261) | async def test_missing_required_service_key_attributes_environment(self): method test_missing_multiple_required_service_key_attributes (line 279) | async def test_missing_multiple_required_service_key_attributes(self): method test_empty_service_key_attributes_dict (line 296) | async def test_empty_service_key_attributes_dict(self): method test_service_key_attributes_with_extra_fields_filtered (line 312) | async def test_service_key_attributes_with_extra_fields_filtered(self,... method test_max_results_boundary_minimum (line 350) | async def test_max_results_boundary_minimum(self, mock_aws_clients): method test_max_results_boundary_zero_clamped (line 376) | async def test_max_results_boundary_zero_clamped(self, mock_aws_clients): method test_max_results_boundary_negative_clamped (line 402) | async def test_max_results_boundary_negative_clamped(self, mock_aws_cl... class TestListChangeEventsErrorHandling (line 428) | class TestListChangeEventsErrorHandling: method test_no_credentials_error (line 432) | async def test_no_credentials_error(self, mock_aws_clients): method test_validation_exception_error (line 453) | async def test_validation_exception_error(self, mock_aws_clients): method test_throttling_exception_error (line 484) | async def test_throttling_exception_error(self, mock_aws_clients): method test_generic_client_error (line 515) | async def test_generic_client_error(self, mock_aws_clients): method test_generic_exception_handling (line 546) | async def test_generic_exception_handling(self, mock_aws_clients): class TestListChangeEventsPagination (line 567) | class TestListChangeEventsPagination: method test_pagination_with_next_token (line 571) | async def test_pagination_with_next_token(self, mock_aws_clients): method test_pagination_stops_at_max_results (line 637) | async def test_pagination_stops_at_max_results(self, mock_aws_clients): class TestListChangeEventsEdgeCases (line 677) | class TestListChangeEventsEdgeCases: method test_empty_response (line 681) | async def test_empty_response(self, mock_aws_clients): method test_timestamp_handling_numeric_values (line 705) | async def test_timestamp_handling_numeric_values(self, mock_aws_clients): method test_service_key_attributes_filtering (line 743) | async def test_service_key_attributes_filtering(self, mock_aws_clients): method test_events_by_type_aggregation (line 776) | async def test_events_by_type_aggregation(self, mock_aws_clients): method test_response_structure_completeness (line 833) | async def test_response_structure_completeness(self, mock_aws_clients): method test_seconds_since_event_calculation (line 864) | async def test_seconds_since_event_calculation(self, mock_aws_clients): class TestListChangeEventsServiceStates (line 925) | class TestListChangeEventsServiceStates: method test_list_service_states_basic (line 929) | async def test_list_service_states_basic(self, mock_aws_clients): method test_list_service_states_with_service_filtering (line 976) | async def test_list_service_states_with_service_filtering(self, mock_a... method test_list_service_states_multiple_services_multiple_events (line 1000) | async def test_list_service_states_multiple_services_multiple_events(s... method test_list_service_states_pagination (line 1073) | async def test_list_service_states_pagination(self, mock_aws_clients): method test_list_service_states_seconds_since_event (line 1132) | async def test_list_service_states_seconds_since_event(self, mock_aws_... class TestListChangeEventsRegionHandling (line 1186) | class TestListChangeEventsRegionHandling: method test_region_parameter_passed_through (line 1190) | async def test_region_parameter_passed_through(self, mock_aws_clients): class TestListChangeEventsTimestampFormats (line 1213) | class TestListChangeEventsTimestampFormats: method test_unix_timestamp_input (line 1217) | async def test_unix_timestamp_input(self, mock_aws_clients): method test_iso_timestamp_variations (line 1238) | async def test_iso_timestamp_variations(self, mock_aws_clients): class TestListChangeEventsIntegration (line 1268) | class TestListChangeEventsIntegration: method test_server_integration_list_entity_events (line 1272) | async def test_server_integration_list_entity_events(self, mock_aws_cl... method test_server_integration_list_service_states (line 1320) | async def test_server_integration_list_service_states(self, mock_aws_c... method test_server_integration_parameter_validation (line 1368) | async def test_server_integration_parameter_validation(self): method test_server_integration_error_handling (line 1385) | async def test_server_integration_error_handling(self, mock_aws_clients): method test_server_integration_large_response_handling (line 1423) | async def test_server_integration_large_response_handling(self, mock_a... method test_server_integration_real_world_scenario (line 1496) | async def test_server_integration_real_world_scenario(self, mock_aws_c... class TestListChangeEventsToolFunctionality (line 1590) | class TestListChangeEventsToolFunctionality: method test_integration_both_api_paths (line 1594) | async def test_integration_both_api_paths(self, mock_aws_clients): method test_integration_error_recovery_workflow (line 1675) | async def test_integration_error_recovery_workflow(self, mock_aws_clie... method test_integration_cross_tool_data_format (line 1741) | async def test_integration_cross_tool_data_format(self, mock_aws_clien... class TestListChangeEventsWorkflowIntegration (line 1802) | class TestListChangeEventsWorkflowIntegration: method test_incident_investigation_workflow (line 1806) | async def test_incident_investigation_workflow(self, mock_aws_clients): method test_multi_service_correlation_workflow (line 1877) | async def test_multi_service_correlation_workflow(self, mock_aws_clien... method test_performance_regression_correlation (line 1945) | async def test_performance_regression_correlation(self, mock_aws_clien... FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_enablement_tools.py class TestGetEnablementGuide (line 15) | class TestGetEnablementGuide: method test_successful_guide_fetch (line 19) | async def test_successful_guide_fetch(self, tmp_path, monkeypatch): method test_all_valid_platforms (line 33) | async def test_all_valid_platforms(self): method test_all_valid_languages (line 52) | async def test_all_valid_languages(self): method test_relative_path_rejected (line 71) | async def test_relative_path_rejected(self): method test_relative_app_directory_rejected (line 84) | async def test_relative_app_directory_rejected(self): method test_absolute_path_handling (line 97) | async def test_absolute_path_handling(self): method test_unsupported_language_ruby (line 111) | async def test_unsupported_language_ruby(self): method test_unsupported_platform_k8s (line 125) | async def test_unsupported_platform_k8s(self): method test_case_insensitive_platform (line 139) | async def test_case_insensitive_platform(self): method test_case_insensitive_language (line 156) | async def test_case_insensitive_language(self): method test_whitespace_trimming (line 173) | async def test_whitespace_trimming(self): method test_both_paths_relative (line 190) | async def test_both_paths_relative(self): method test_file_read_error (line 204) | async def test_file_read_error(self): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_group_tools.py function _make_service (line 21) | def _make_service(name, environment='production', service_type='Service'... function _make_group (line 34) | def _make_group(group_name, group_value, source='TAG', identifier=None): function mock_aws_clients (line 45) | def mock_aws_clients(): class TestListGroupServices (line 79) | class TestListGroupServices: method test_success_exact_match (line 83) | async def test_success_exact_match(self, mock_aws_clients): method test_success_wildcard_match (line 102) | async def test_success_wildcard_match(self, mock_aws_clients): method test_success_match_by_group_name (line 120) | async def test_success_match_by_group_name(self, mock_aws_clients): method test_no_services_found (line 136) | async def test_no_services_found(self, mock_aws_clients): method test_pagination (line 150) | async def test_pagination(self, mock_aws_clients): method test_case_insensitive_match (line 173) | async def test_case_insensitive_match(self, mock_aws_clients): method test_invalid_time_range (line 187) | async def test_invalid_time_range(self, mock_aws_clients): method test_displays_group_details (line 198) | async def test_displays_group_details(self, mock_aws_clients): method test_platform_and_environment_distribution (line 212) | async def test_platform_and_environment_distribution(self, mock_aws_cl... method test_general_exception (line 256) | async def test_general_exception(self, mock_aws_clients): class TestAuditGroupHealth (line 272) | class TestAuditGroupHealth: method test_all_healthy_with_sli (line 276) | async def test_all_healthy_with_sli(self, mock_aws_clients): method test_critical_slo_breach (line 303) | async def test_critical_slo_breach(self, mock_aws_clients): method test_metrics_fallback_healthy (line 331) | async def test_metrics_fallback_healthy(self, mock_aws_clients): method test_metrics_fallback_critical_fault_rate (line 370) | async def test_metrics_fallback_critical_fault_rate(self, mock_aws_cli... method test_metrics_fallback_error_rate_critical (line 414) | async def test_metrics_fallback_error_rate_critical(self, mock_aws_cli... method test_metrics_fallback_latency (line 458) | async def test_metrics_fallback_latency(self, mock_aws_clients): method test_metrics_fallback_latency_critical (line 499) | async def test_metrics_fallback_latency_critical(self, mock_aws_clients): method test_mixed_health_statuses (line 545) | async def test_mixed_health_statuses(self, mock_aws_clients): method test_no_services_found (line 583) | async def test_no_services_found(self, mock_aws_clients): method test_invalid_time_range (line 594) | async def test_invalid_time_range(self, mock_aws_clients): method test_custom_thresholds (line 605) | async def test_custom_thresholds(self, mock_aws_clients): method test_sli_exception_falls_back_to_metrics (line 648) | async def test_sli_exception_falls_back_to_metrics(self, mock_aws_clie... method test_metrics_get_service_failure (line 672) | async def test_metrics_get_service_failure(self, mock_aws_clients): method test_general_exception (line 696) | async def test_general_exception(self, mock_aws_clients): class TestGetGroupDependencies (line 712) | class TestGetGroupDependencies: method test_intra_group_dependencies (line 716) | async def test_intra_group_dependencies(self, mock_aws_clients): method test_cross_group_dependencies (line 746) | async def test_cross_group_dependencies(self, mock_aws_clients): method test_external_aws_dependencies (line 794) | async def test_external_aws_dependencies(self, mock_aws_clients): method test_aws_service_type_external (line 830) | async def test_aws_service_type_external(self, mock_aws_clients): method test_cross_group_get_service_failure (line 856) | async def test_cross_group_get_service_failure(self, mock_aws_clients): method test_no_dependencies (line 894) | async def test_no_dependencies(self, mock_aws_clients): method test_no_services_found (line 913) | async def test_no_services_found(self, mock_aws_clients): method test_invalid_time_range (line 924) | async def test_invalid_time_range(self, mock_aws_clients): method test_dependency_api_client_error_skipped (line 935) | async def test_dependency_api_client_error_skipped(self, mock_aws_clie... method test_summary_counts (line 962) | async def test_summary_counts(self, mock_aws_clients): method test_general_exception (line 1007) | async def test_general_exception(self, mock_aws_clients): class TestGetGroupChanges (line 1023) | class TestGetGroupChanges: method test_deployments_and_config_changes (line 1027) | async def test_deployments_and_config_changes(self, mock_aws_clients): method test_no_changes (line 1073) | async def test_no_changes(self, mock_aws_clients): method test_filters_to_group_services_only (line 1096) | async def test_filters_to_group_services_only(self, mock_aws_clients): method test_changes_by_service_section (line 1136) | async def test_changes_by_service_section(self, mock_aws_clients): method test_pagination (line 1181) | async def test_pagination(self, mock_aws_clients): method test_service_states_api_error (line 1228) | async def test_service_states_api_error(self, mock_aws_clients): method test_no_services_found (line 1250) | async def test_no_services_found(self, mock_aws_clients): method test_invalid_time_range (line 1261) | async def test_invalid_time_range(self, mock_aws_clients): method test_tips_shown_when_changes_exist (line 1272) | async def test_tips_shown_when_changes_exist(self, mock_aws_clients): method test_general_exception (line 1300) | async def test_general_exception(self, mock_aws_clients): class TestListGroupingAttributeDefinitions (line 1316) | class TestListGroupingAttributeDefinitions: method test_success_with_definitions (line 1320) | async def test_success_with_definitions(self, mock_aws_clients): method test_success_no_definitions (line 1354) | async def test_success_no_definitions(self, mock_aws_clients): method test_pagination (line 1369) | async def test_pagination(self, mock_aws_clients): method test_definition_without_optional_fields (line 1403) | async def test_definition_without_optional_fields(self, mock_aws_clien... method test_tips_with_results (line 1426) | async def test_tips_with_results(self, mock_aws_clients): method test_client_error_access_denied (line 1445) | async def test_client_error_access_denied(self, mock_aws_clients): method test_client_error_validation (line 1464) | async def test_client_error_validation(self, mock_aws_clients): method test_general_exception (line 1483) | async def test_general_exception(self, mock_aws_clients): method test_multiple_source_keys_formatting (line 1494) | async def test_multiple_source_keys_formatting(self, mock_aws_clients): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_initialization.py function test_aws_client_initialization_error (line 8) | def test_aws_client_initialization_error(): function test_synthetics_endpoint_logging (line 25) | def test_synthetics_endpoint_logging(): function test_module_as_main (line 45) | def test_module_as_main(): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_server.py function mock_aws_clients (line 26) | def mock_aws_clients(): function mock_mcp (line 127) | def mock_mcp(): function test_list_monitored_services_success (line 134) | async def test_list_monitored_services_success(mock_aws_clients): function test_list_monitored_services_empty (line 158) | async def test_list_monitored_services_empty(mock_aws_clients): function test_get_service_detail_success (line 170) | async def test_get_service_detail_success(mock_aws_clients): function test_get_service_detail_not_found (line 207) | async def test_get_service_detail_not_found(mock_aws_clients): function test_query_service_metrics_success (line 219) | async def test_query_service_metrics_success(mock_aws_clients): function test_query_service_metrics_list_available (line 268) | async def test_query_service_metrics_list_available(mock_aws_clients): function test_get_slo_success (line 310) | async def test_get_slo_success(mock_aws_clients): function test_get_slo_not_found (line 366) | async def test_get_slo_not_found(mock_aws_clients): function test_search_transaction_spans_success (line 378) | async def test_search_transaction_spans_success(mock_aws_clients): function test_search_transaction_spans_not_enabled (line 415) | async def test_search_transaction_spans_not_enabled(mock_aws_clients): function test_list_slis_success (line 436) | async def test_list_slis_success(mock_aws_clients): function test_query_sampled_traces_success (line 510) | async def test_query_sampled_traces_success(mock_aws_clients): function test_query_sampled_traces_time_window_too_large (line 556) | async def test_query_sampled_traces_time_window_too_large(mock_aws_clien... function test_get_trace_summaries_paginated (line 569) | def test_get_trace_summaries_paginated(): function test_get_trace_summaries_paginated_with_error (line 590) | def test_get_trace_summaries_paginated_with_error(): function test_check_transaction_search_enabled (line 605) | def test_check_transaction_search_enabled(mock_aws_clients): function test_check_transaction_search_enabled_not_active (line 619) | def test_check_transaction_search_enabled_not_active(mock_aws_clients): function test_check_transaction_search_enabled_error (line 633) | def test_check_transaction_search_enabled_error(mock_aws_clients): function test_remove_null_values (line 646) | def test_remove_null_values(): function test_list_monitored_services_client_error (line 673) | async def test_list_monitored_services_client_error(mock_aws_clients): function test_list_monitored_services_general_exception (line 691) | async def test_list_monitored_services_general_exception(mock_aws_clients): function test_get_service_detail_client_error (line 703) | async def test_get_service_detail_client_error(mock_aws_clients): function test_get_service_detail_general_exception (line 728) | async def test_get_service_detail_general_exception(mock_aws_clients): function test_query_service_metrics_no_datapoints (line 747) | async def test_query_service_metrics_no_datapoints(mock_aws_clients): function test_search_transaction_spans_timeout (line 785) | async def test_search_transaction_spans_timeout(mock_aws_clients): function test_main_normal_execution (line 825) | def test_main_normal_execution(mock_mcp): function test_main_keyboard_interrupt (line 831) | def test_main_keyboard_interrupt(mock_mcp): function test_main_general_exception (line 839) | def test_main_general_exception(mock_mcp): function test_get_slo_period_based (line 848) | async def test_get_slo_period_based(mock_aws_clients): function test_list_slis_with_error_in_sli_client (line 888) | async def test_list_slis_with_error_in_sli_client(mock_aws_clients): function test_query_service_metrics_service_not_found (line 944) | async def test_query_service_metrics_service_not_found(mock_aws_clients): function test_query_service_metrics_no_metrics (line 962) | async def test_query_service_metrics_no_metrics(mock_aws_clients): function test_query_service_metrics_metric_not_found (line 987) | async def test_query_service_metrics_metric_not_found(mock_aws_clients): function test_query_service_metrics_client_error (line 1023) | async def test_query_service_metrics_client_error(mock_aws_clients): function test_search_transaction_spans_failed_query (line 1047) | async def test_search_transaction_spans_failed_query(mock_aws_clients): function test_get_slo_client_error (line 1073) | async def test_get_slo_client_error(mock_aws_clients): function test_search_transaction_spans_empty_log_group (line 1093) | async def test_search_transaction_spans_empty_log_group(mock_aws_clients): function test_list_slis_no_services (line 1122) | async def test_list_slis_no_services(mock_aws_clients): function test_get_slo_with_calendar_interval (line 1134) | async def test_get_slo_with_calendar_interval(mock_aws_clients): function test_query_service_metrics_different_periods (line 1162) | async def test_query_service_metrics_different_periods(mock_aws_clients): function test_query_service_metrics_general_exception (line 1216) | async def test_query_service_metrics_general_exception(mock_aws_clients): function test_search_transaction_spans_general_exception (line 1234) | async def test_search_transaction_spans_general_exception(mock_aws_clien... function test_list_monitored_services_with_attributes_branch (line 1256) | async def test_list_monitored_services_with_attributes_branch(mock_aws_c... function test_get_trace_summaries_paginated_with_limit (line 1275) | async def test_get_trace_summaries_paginated_with_limit(mock_aws_clients): function test_get_slo_with_period_based_sli_full_details (line 1306) | async def test_get_slo_with_period_based_sli_full_details(mock_aws_clien... function test_get_slo_with_request_based_sli_full_details (line 1397) | async def test_get_slo_with_request_based_sli_full_details(mock_aws_clie... function test_get_slo_general_exception (line 1473) | async def test_get_slo_general_exception(mock_aws_clients): function test_search_transaction_spans_with_none_log_group (line 1485) | async def test_search_transaction_spans_with_none_log_group(mock_aws_cli... function test_search_transaction_spans_complete_with_statistics (line 1514) | async def test_search_transaction_spans_complete_with_statistics(mock_aw... function test_search_transaction_spans_code_level_attributes_detected (line 1557) | async def test_search_transaction_spans_code_level_attributes_detected(m... function test_search_transaction_spans_code_level_attributes_requested_but_not_found (line 1601) | async def test_search_transaction_spans_code_level_attributes_requested_... function test_search_transaction_spans_code_level_attributes_not_requested (line 1647) | async def test_search_transaction_spans_code_level_attributes_not_reques... function test_search_transaction_spans_code_level_attributes_without_prefix (line 1684) | async def test_search_transaction_spans_code_level_attributes_without_pr... function test_search_transaction_spans_code_level_attributes_mixed_results (line 1722) | async def test_search_transaction_spans_code_level_attributes_mixed_resu... function test_list_slis_general_exception (line 1768) | async def test_list_slis_general_exception(mock_aws_clients): function test_query_sampled_traces_with_defaults (line 1780) | async def test_query_sampled_traces_with_defaults(mock_aws_clients): function test_query_sampled_traces_with_annotations (line 1833) | async def test_query_sampled_traces_with_annotations(mock_aws_clients): function test_query_sampled_traces_with_fault_causes (line 1876) | async def test_query_sampled_traces_with_fault_causes(mock_aws_clients): function test_query_sampled_traces_general_exception (line 1909) | async def test_query_sampled_traces_general_exception(mock_aws_clients): function test_query_sampled_traces_datetime_conversion (line 1926) | async def test_query_sampled_traces_datetime_conversion(mock_aws_clients): function test_query_sampled_traces_deduplication (line 1959) | async def test_query_sampled_traces_deduplication(mock_aws_clients): function test_main_success (line 2109) | def test_main_success(mock_aws_clients): function test_main_exception (line 2116) | def test_main_exception(mock_aws_clients): function test_main_entry_point (line 2127) | def test_main_entry_point(mock_aws_clients): function test_analyze_canary_failures_no_runs (line 2148) | async def test_analyze_canary_failures_no_runs(mock_aws_clients): function test_analyze_canary_failures_healthy_canary (line 2163) | async def test_analyze_canary_failures_healthy_canary(mock_aws_clients): function test_analyze_canary_failures_telemetry_unavailable (line 2192) | async def test_analyze_canary_failures_telemetry_unavailable(mock_aws_cl... function test_analyze_canary_failures_with_failures (line 2220) | async def test_analyze_canary_failures_with_failures(mock_aws_clients): function test_analyze_canary_failures_iam_analysis (line 2289) | async def test_analyze_canary_failures_iam_analysis(mock_aws_clients): function test_analyze_canary_failures_enospc_error (line 2338) | async def test_analyze_canary_failures_enospc_error(mock_aws_clients): function test_analyze_canary_failures_protocol_error (line 2375) | async def test_analyze_canary_failures_protocol_error(mock_aws_clients): function test_analyze_canary_failures_navigation_timeout_with_har (line 2411) | async def test_analyze_canary_failures_navigation_timeout_with_har(mock_... function test_analyze_canary_failures_s3_exception (line 2467) | async def test_analyze_canary_failures_s3_exception(mock_aws_clients): function test_analyze_canary_failures_visual_variation (line 2513) | async def test_analyze_canary_failures_visual_variation(mock_aws_clients): function test_analyze_canary_failures_get_canary_code_exception (line 2547) | async def test_analyze_canary_failures_get_canary_code_exception(mock_aw... function test_analyze_canary_failures_iam_analysis_exception (line 2580) | async def test_analyze_canary_failures_iam_analysis_exception(mock_aws_c... function test_analyze_canary_failures_disk_usage_exception (line 2613) | async def test_analyze_canary_failures_disk_usage_exception(mock_aws_cli... function test_analyze_canary_failures_memory_usage_exception (line 2649) | async def test_analyze_canary_failures_memory_usage_exception(mock_aws_c... function test_analyze_canary_failures_har_timeout_exception (line 2687) | async def test_analyze_canary_failures_har_timeout_exception(mock_aws_cl... function test_analyze_canary_failures_success_artifacts_exception (line 2730) | async def test_analyze_canary_failures_success_artifacts_exception(mock_... function test_analyze_canary_failures_no_failure_timestamp (line 2788) | async def test_analyze_canary_failures_no_failure_timestamp(mock_aws_cli... function test_analyze_canary_failures_log_analysis_failure (line 2816) | async def test_analyze_canary_failures_log_analysis_failure(mock_aws_cli... function test_analyze_canary_failures_main_exception (line 2851) | async def test_analyze_canary_failures_main_exception(mock_aws_clients): function test_analyze_canary_failures_no_har_files_navigation_timeout (line 2864) | async def test_analyze_canary_failures_no_har_files_navigation_timeout(m... function test_analyze_canary_failures_artifact_location_without_s3_prefix (line 2893) | async def test_analyze_canary_failures_artifact_location_without_s3_pref... function test_analyze_canary_failures_empty_base_path (line 2940) | async def test_analyze_canary_failures_empty_base_path(mock_aws_clients): function test_analyze_canary_failures_multiple_failure_causes (line 2987) | async def test_analyze_canary_failures_multiple_failure_causes(mock_aws_... function test_analyze_canary_failures_no_failure_time_fallback (line 3027) | async def test_analyze_canary_failures_no_failure_time_fallback(mock_aws... function test_filter_operation_targets_fault_to_availability (line 3073) | def test_filter_operation_targets_fault_to_availability(): function test_filter_operation_targets_non_fault_unchanged (line 3096) | def test_filter_operation_targets_non_fault_unchanged(): function test_filter_operation_targets_multiple_fault_conversions (line 3130) | def test_filter_operation_targets_multiple_fault_conversions(): function test_filter_operation_targets_with_wildcards (line 3175) | def test_filter_operation_targets_with_wildcards(): function test_filter_operation_targets_ignores_non_service_operation (line 3198) | def test_filter_operation_targets_ignores_non_service_operation(): function test_filter_operation_targets_empty_metric_type (line 3226) | def test_filter_operation_targets_empty_metric_type(): function test_filter_operation_targets_missing_metric_type (line 3249) | def test_filter_operation_targets_missing_metric_type(): function test_filter_operation_targets_case_sensitive (line 3273) | def test_filter_operation_targets_case_sensitive(): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_server_audit_functions.py function mock_aws_clients (line 13) | def mock_aws_clients(): function test_audit_services_invalid_json (line 41) | async def test_audit_services_invalid_json(mock_aws_clients): function test_audit_services_invalid_time_range (line 54) | async def test_audit_services_invalid_time_range(mock_aws_clients): function test_audit_slos_invalid_json (line 71) | async def test_audit_slos_invalid_json(mock_aws_clients): function test_audit_slos_not_array (line 84) | async def test_audit_slos_not_array(mock_aws_clients): function test_audit_slos_empty_array (line 97) | async def test_audit_slos_empty_array(mock_aws_clients): function test_audit_slos_invalid_time_range (line 110) | async def test_audit_slos_invalid_time_range(mock_aws_clients): function test_audit_service_operations_invalid_json (line 125) | async def test_audit_service_operations_invalid_json(mock_aws_clients): function test_audit_service_operations_not_array (line 138) | async def test_audit_service_operations_not_array(mock_aws_clients): function test_audit_service_operations_empty_array (line 151) | async def test_audit_service_operations_empty_array(mock_aws_clients): function test_main_entry_point (line 163) | def test_main_entry_point(): function test_audit_services_wildcard_expansion_error (line 192) | async def test_audit_services_wildcard_expansion_error(mock_aws_clients): function test_filter_operation_targets (line 214) | def test_filter_operation_targets(): function test_filter_operation_targets_no_wildcards (line 287) | def test_filter_operation_targets_no_wildcards(): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_server_audit_tools.py function mock_aws_clients (line 13) | def mock_aws_clients(): function test_audit_services_invalid_json (line 84) | async def test_audit_services_invalid_json(mock_aws_clients): function test_audit_services_invalid_time_range (line 92) | async def test_audit_services_invalid_time_range(mock_aws_clients): function test_audit_slos_wildcard_expansion_error (line 108) | async def test_audit_slos_wildcard_expansion_error(mock_aws_clients): function test_audit_slos_invalid_json (line 123) | async def test_audit_slos_invalid_json(mock_aws_clients): function test_audit_slos_not_array (line 131) | async def test_audit_slos_not_array(mock_aws_clients): function test_audit_slos_empty_array (line 139) | async def test_audit_slos_empty_array(mock_aws_clients): function test_audit_service_operations_invalid_json (line 147) | async def test_audit_service_operations_invalid_json(mock_aws_clients): function test_audit_service_operations_not_array (line 155) | async def test_audit_service_operations_not_array(mock_aws_clients): function test_audit_service_operations_empty_array (line 163) | async def test_audit_service_operations_empty_array(mock_aws_clients): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_service_audit_utils.py class TestCiGet (line 30) | class TestCiGet: method test_ci_get_exact_match (line 33) | def test_ci_get_exact_match(self): method test_ci_get_case_insensitive_match (line 39) | def test_ci_get_case_insensitive_match(self): method test_ci_get_multiple_names (line 45) | def test_ci_get_multiple_names(self): method test_ci_get_not_found (line 51) | def test_ci_get_not_found(self): method test_ci_get_empty_dict (line 57) | def test_ci_get_empty_dict(self): class TestNeed (line 63) | class TestNeed: method test_need_found (line 66) | def test_need_found(self): method test_need_not_found (line 72) | def test_need_not_found(self): method test_need_multiple_names (line 78) | def test_need_multiple_names(self): class TestCoerceServiceTarget (line 85) | class TestCoerceServiceTarget: method test_coerce_shorthand_service_string (line 88) | def test_coerce_shorthand_service_string(self): method test_coerce_data_service_string (line 99) | def test_coerce_data_service_string(self): method test_coerce_service_dict (line 110) | def test_coerce_service_dict(self): method test_coerce_with_aws_account_id (line 126) | def test_coerce_with_aws_account_id(self): method test_coerce_case_insensitive_type (line 146) | def test_coerce_case_insensitive_type(self): method test_coerce_target_type_field (line 157) | def test_coerce_target_type_field(self): method test_coerce_data_name_fallback (line 168) | def test_coerce_data_name_fallback(self): method test_coerce_non_service_type (line 179) | def test_coerce_non_service_type(self): method test_coerce_missing_service (line 185) | def test_coerce_missing_service(self): class TestNormalizeServiceEntity (line 192) | class TestNormalizeServiceEntity: method test_normalize_basic_entity (line 195) | def test_normalize_basic_entity(self): method test_normalize_with_aws_account_id (line 203) | def test_normalize_with_aws_account_id(self): method test_normalize_case_insensitive (line 216) | def test_normalize_case_insensitive(self): method test_normalize_missing_name (line 224) | def test_normalize_missing_name(self): method test_normalize_no_environment (line 230) | def test_normalize_no_environment(self): class TestNormalizeServiceTarget (line 239) | class TestNormalizeServiceTarget: method test_normalize_target_with_service_dict (line 242) | def test_normalize_target_with_service_dict(self): method test_normalize_target_missing_data (line 258) | def test_normalize_target_missing_data(self): class TestNormalizeServiceTargets (line 265) | class TestNormalizeServiceTargets: method test_normalize_valid_targets (line 268) | def test_normalize_valid_targets(self): method test_normalize_not_list (line 283) | def test_normalize_not_list(self): method test_normalize_empty_list (line 288) | def test_normalize_empty_list(self): method test_normalize_non_dict_item (line 293) | def test_normalize_non_dict_item(self): method test_normalize_invalid_service_target (line 298) | def test_normalize_invalid_service_target(self): method test_normalize_non_service_type (line 304) | def test_normalize_non_service_type(self): class TestValidateAndEnrichServiceTargets (line 311) | class TestValidateAndEnrichServiceTargets: method mock_applicationsignals_client (line 315) | def mock_applicationsignals_client(self): method test_validate_with_environment (line 331) | def test_validate_with_environment(self, mock_applicationsignals_client): method test_validate_enrich_missing_environment (line 348) | def test_validate_enrich_missing_environment(self, mock_applicationsig... method test_validate_wildcard_pattern_error (line 360) | def test_validate_wildcard_pattern_error(self, mock_applicationsignals... method test_validate_service_not_found (line 369) | def test_validate_service_not_found(self, mock_applicationsignals_clie... method test_validate_service_no_environment (line 380) | def test_validate_service_no_environment(self, mock_applicationsignals... method test_validate_api_error (line 401) | def test_validate_api_error(self, mock_applicationsignals_client): method test_validate_missing_environment_no_name (line 412) | def test_validate_missing_environment_no_name(self, mock_applicationsi... method test_validate_non_service_target_warning (line 432) | def test_validate_non_service_target_warning( FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_service_tools_operations.py function mock_aws_clients (line 10) | def mock_aws_clients(): function test_list_service_operations_success_with_get_operations (line 40) | async def test_list_service_operations_success_with_get_operations(mock_... function test_list_service_operations_success_with_other_operations (line 109) | async def test_list_service_operations_success_with_other_operations(moc... function test_list_service_operations_no_operations_found (line 172) | async def test_list_service_operations_no_operations_found(mock_aws_clie... function test_list_service_operations_service_not_found (line 212) | async def test_list_service_operations_service_not_found(mock_aws_clients): function test_list_service_operations_hours_limit_enforcement (line 228) | async def test_list_service_operations_hours_limit_enforcement(mock_aws_... function test_list_service_operations_mixed_operation_types (line 273) | async def test_list_service_operations_mixed_operation_types(mock_aws_cl... function test_list_service_operations_operations_without_metrics (line 342) | async def test_list_service_operations_operations_without_metrics(mock_a... function test_list_service_operations_client_error (line 395) | async def test_list_service_operations_client_error(mock_aws_clients): function test_list_service_operations_general_exception (line 413) | async def test_list_service_operations_general_exception(mock_aws_clients): function test_list_service_operations_operations_api_client_error (line 425) | async def test_list_service_operations_operations_api_client_error(mock_... function test_list_service_operations_duplicate_metric_types (line 462) | async def test_list_service_operations_duplicate_metric_types(mock_aws_c... function test_list_service_operations_unknown_operation_name (line 516) | async def test_list_service_operations_unknown_operation_name(mock_aws_c... function test_list_service_operations_unknown_metric_types (line 566) | async def test_list_service_operations_unknown_metric_types(mock_aws_cli... FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_sli_report_client.py class TestAWSConfig (line 16) | class TestAWSConfig: method test_init_defaults (line 19) | def test_init_defaults(self): method test_init_custom_values (line 26) | def test_init_custom_values(self): method test_period_max_limit (line 33) | def test_period_max_limit(self): method test_key_attributes (line 38) | def test_key_attributes(self): method test_key_attributes_direct_call (line 44) | def test_key_attributes_direct_call(self): class TestSLOSummary (line 62) | class TestSLOSummary: method test_slo_summary_creation (line 65) | def test_slo_summary_creation(self): class TestMetricDataResult (line 83) | class TestMetricDataResult: method test_metric_data_result_creation (line 86) | def test_metric_data_result_creation(self): class TestSLIReport (line 97) | class TestSLIReport: method test_sli_report_creation (line 100) | def test_sli_report_creation(self): class TestSLIReportClient (line 130) | class TestSLIReportClient: method mock_aws_clients (line 134) | def mock_aws_clients(self): method test_init_success (line 149) | def test_init_success(self, mock_aws_clients): method test_init_failure (line 158) | def test_init_failure(self, mock_aws_clients): method test_get_slo_summaries_success (line 169) | def test_get_slo_summaries_success(self, mock_aws_clients): method test_get_slo_summaries_client_error (line 205) | def test_get_slo_summaries_client_error(self, mock_aws_clients): method test_get_slo_summaries_general_error (line 222) | def test_get_slo_summaries_general_error(self, mock_aws_clients): method test_create_metric_queries (line 236) | def test_create_metric_queries(self, mock_aws_clients): method test_get_metric_data_success (line 268) | def test_get_metric_data_success(self, mock_aws_clients): method test_get_metric_data_client_error (line 292) | def test_get_metric_data_client_error(self, mock_aws_clients): method test_get_metric_data_general_error (line 309) | def test_get_metric_data_general_error(self, mock_aws_clients): method test_get_sli_status (line 321) | def test_get_sli_status(self, mock_aws_clients): method test_generate_sli_report_no_slos (line 330) | def test_generate_sli_report_no_slos(self, mock_aws_clients): method test_generate_sli_report_with_breaches (line 349) | def test_generate_sli_report_with_breaches(self, mock_aws_clients): method test_generate_sli_report_all_healthy (line 395) | def test_generate_sli_report_all_healthy(self, mock_aws_clients): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_slo_tools.py function mock_aws_clients (line 11) | def mock_aws_clients(): function test_get_slo_success_period_based (line 35) | async def test_get_slo_success_period_based(mock_aws_clients): function test_get_slo_success_request_based (line 136) | async def test_get_slo_success_request_based(mock_aws_clients): function test_get_slo_not_found (line 223) | async def test_get_slo_not_found(mock_aws_clients): function test_get_slo_client_error (line 237) | async def test_get_slo_client_error(mock_aws_clients): function test_get_slo_general_exception (line 257) | async def test_get_slo_general_exception(mock_aws_clients): function test_list_slos_success (line 269) | async def test_list_slos_success(mock_aws_clients): function test_list_slos_with_key_attributes_filter (line 319) | async def test_list_slos_with_key_attributes_filter(mock_aws_clients): function test_list_slos_no_slos_found (line 360) | async def test_list_slos_no_slos_found(mock_aws_clients): function test_list_slos_with_pagination (line 374) | async def test_list_slos_with_pagination(mock_aws_clients): function test_list_slos_invalid_json_key_attributes (line 401) | async def test_list_slos_invalid_json_key_attributes(mock_aws_clients): function test_list_slos_max_results_validation (line 409) | async def test_list_slos_max_results_validation(mock_aws_clients): function test_list_slos_client_error (line 433) | async def test_list_slos_client_error(mock_aws_clients): function test_list_slos_general_exception (line 453) | async def test_list_slos_general_exception(mock_aws_clients): function test_list_slos_minimal_slo_data (line 465) | async def test_list_slos_minimal_slo_data(mock_aws_clients): function test_get_slo_minimal_slo_data (line 491) | async def test_get_slo_minimal_slo_data(mock_aws_clients): function test_get_slo_with_empty_metric_queries (line 516) | async def test_get_slo_with_empty_metric_queries(mock_aws_clients): FILE: src/cloudwatch-applicationsignals-mcp-server/tests/test_utils.py class TestRemoveNullValues (line 25) | class TestRemoveNullValues: method test_remove_null_values_basic (line 28) | def test_remove_null_values_basic(self): method test_remove_null_values_empty_dict (line 36) | def test_remove_null_values_empty_dict(self): method test_remove_null_values_no_nulls (line 41) | def test_remove_null_values_no_nulls(self): method test_remove_null_values_all_nulls (line 47) | def test_remove_null_values_all_nulls(self): method test_remove_null_values_preserves_other_falsy (line 53) | def test_remove_null_values_preserves_other_falsy(self): class TestParseTimestamp (line 63) | class TestParseTimestamp: method test_parse_timestamp_unix_seconds (line 66) | def test_parse_timestamp_unix_seconds(self): method test_parse_timestamp_iso_format_with_z (line 74) | def test_parse_timestamp_iso_format_with_z(self): method test_parse_timestamp_iso_format_with_offset (line 82) | def test_parse_timestamp_iso_format_with_offset(self): method test_parse_timestamp_standard_format (line 90) | def test_parse_timestamp_standard_format(self): method test_parse_timestamp_non_string_input (line 98) | def test_parse_timestamp_non_string_input(self): method test_parse_timestamp_invalid_format_uses_default (line 106) | def test_parse_timestamp_invalid_format_uses_default(self): method test_parse_timestamp_empty_string_uses_default (line 116) | def test_parse_timestamp_empty_string_uses_default(self): method test_parse_timestamp_none_uses_default (line 125) | def test_parse_timestamp_none_uses_default(self): method test_parse_timestamp_default_hours_parameter (line 134) | def test_parse_timestamp_default_hours_parameter(self): class TestCalculateNameSimilarity (line 144) | class TestCalculateNameSimilarity: method test_exact_match (line 147) | def test_exact_match(self): method test_case_insensitive_exact_match (line 152) | def test_case_insensitive_exact_match(self): method test_normalized_match (line 157) | def test_normalized_match(self): method test_normalized_match_with_dots (line 162) | def test_normalized_match_with_dots(self): method test_empty_strings (line 167) | def test_empty_strings(self): method test_word_based_matching (line 173) | def test_word_based_matching(self): method test_partial_word_matching (line 178) | def test_partial_word_matching(self): method test_substring_matching_target_in_candidate (line 183) | def test_substring_matching_target_in_candidate(self): method test_substring_matching_candidate_in_target (line 188) | def test_substring_matching_candidate_in_target(self): method test_slo_key_terms_matching (line 193) | def test_slo_key_terms_matching(self): method test_service_key_terms_matching (line 200) | def test_service_key_terms_matching(self): method test_length_difference_penalty (line 207) | def test_length_difference_penalty(self): method test_moderate_length_difference_penalty (line 216) | def test_moderate_length_difference_penalty(self): method test_no_common_words (line 225) | def test_no_common_words(self): method test_high_word_coverage_bonus (line 230) | def test_high_word_coverage_bonus(self): method test_moderate_word_coverage_bonus (line 235) | def test_moderate_word_coverage_bonus(self): method test_whitespace_handling (line 240) | def test_whitespace_handling(self): method test_multiple_key_terms_slo (line 245) | def test_multiple_key_terms_slo(self): method test_multiple_key_terms_service (line 254) | def test_multiple_key_terms_service(self): method test_score_capped_at_100 (line 261) | def test_score_capped_at_100(self): method test_score_minimum_zero (line 267) | def test_score_minimum_zero(self): method test_complex_similarity_scenario (line 275) | def test_complex_similarity_scenario(self): method test_different_name_types (line 285) | def test_different_name_types(self): FILE: src/cloudwatch-mcp-server/awslabs/cloudwatch_mcp_server/aws_common.py function get_aws_client (line 23) | def get_aws_client( FILE: src/cloudwatch-mcp-server/awslabs/cloudwatch_mcp_server/cloudwatch_alarms/models.py class MetricAlarmSummary (line 22) | class MetricAlarmSummary(BaseModel): class CompositeAlarmSummary (line 42) | class CompositeAlarmSummary(BaseModel): class ActiveAlarmsResponse (line 56) | class ActiveAlarmsResponse(BaseModel): class AlarmHistoryItem (line 71) | class AlarmHistoryItem(BaseModel): class AlarmDetails (line 92) | class AlarmDetails(BaseModel): class TimeRangeSuggestion (line 122) | class TimeRangeSuggestion(BaseModel): class AlarmHistoryResponse (line 130) | class AlarmHistoryResponse(BaseModel): class CompositeAlarmComponentResponse (line 146) | class CompositeAlarmComponentResponse(BaseModel): FILE: src/cloudwatch-mcp-server/awslabs/cloudwatch_mcp_server/cloudwatch_alarms/tools.py class CloudWatchAlarmsTools (line 36) | class CloudWatchAlarmsTools: method __init__ (line 39) | def __init__(self): method register (line 43) | def register(self, mcp): method get_active_alarms (line 51) | async def get_active_alarms( method get_alarm_history (line 179) | async def get_alarm_history( method _transform_metric_alarm (line 355) | def _transform_metric_alarm(self, alarm: Dict[str, Any]) -> MetricAlar... method _transform_composite_alarm (line 375) | def _transform_composite_alarm(self, alarm: Dict[str, Any]) -> Composi... method _get_alarm_details (line 386) | async def _get_alarm_details(self, cloudwatch_client, alarm_name: str)... method _transform_history_item (line 463) | def _transform_history_item(self, item: Dict[str, Any]) -> AlarmHistor... method _generate_time_range_suggestions (line 526) | def _generate_time_range_suggestions( method _handle_composite_alarm (line 612) | async def _handle_composite_alarm( method _parse_alarm_rule (line 664) | def _parse_alarm_rule(self, alarm_rule: str) -> List[str]: FILE: src/cloudwatch-mcp-server/awslabs/cloudwatch_mcp_server/cloudwatch_logs/models.py class LogGroupMetadata (line 21) | class LogGroupMetadata(BaseModel): method convert_to_iso8601 (line 49) | def convert_to_iso8601(cls, v): class SavedLogsInsightsQuery (line 56) | class SavedLogsInsightsQuery(BaseModel): method extract_prefixes (line 73) | def extract_prefixes(cls, values): class LogsMetadata (line 91) | class LogsMetadata(BaseModel): class LogAnomalyDetector (line 102) | class LogAnomalyDetector(BaseModel): class LogAnomaly (line 112) | class LogAnomaly(BaseModel): method convert_to_iso8601 (line 136) | def convert_to_iso8601(cls, v): method convert_histogram_to_iso8601 (line 144) | def convert_histogram_to_iso8601(cls, v): method convert_log_samples_to_iso8601 (line 150) | def convert_log_samples_to_iso8601(cls, v): class LogAnomalyResults (line 163) | class LogAnomalyResults(BaseModel): class LogsAnalysisResult (line 174) | class LogsAnalysisResult(BaseModel): class LogsQueryCancelResult (line 188) | class LogsQueryCancelResult(BaseModel): FILE: src/cloudwatch-mcp-server/awslabs/cloudwatch_mcp_server/cloudwatch_logs/tools.py class CloudWatchLogsTools (line 42) | class CloudWatchLogsTools: method __init__ (line 45) | def __init__(self): method _validate_log_group_parameters (line 49) | def _validate_log_group_parameters( method _convert_time_to_timestamp (line 66) | def _convert_time_to_timestamp(self, time_str: str) -> int: method _build_logs_query_params (line 77) | def _build_logs_query_params( method _process_query_results (line 108) | def _process_query_results(self, response: Dict, query_id: str = '') -... method _poll_for_query_completion (line 128) | async def _poll_for_query_completion( method register (line 188) | def register(self, mcp): method describe_log_groups (line 205) | async def describe_log_groups( method analyze_log_group (line 343) | async def analyze_log_group( method execute_log_insights_query (line 498) | async def execute_log_insights_query( method get_logs_insight_query_results (line 613) | async def get_logs_insight_query_results( method cancel_logs_insight_query (line 675) | async def cancel_logs_insight_query( FILE: src/cloudwatch-mcp-server/awslabs/cloudwatch_mcp_server/cloudwatch_metrics/cloudformation_template_generator.py class CloudFormationTemplateGenerator (line 24) | class CloudFormationTemplateGenerator: method generate_metric_alarm_template (line 27) | def generate_metric_alarm_template(self, alarm_data: Dict[str, Any]) -... method _is_anomaly_detection_alarm (line 99) | def _is_anomaly_detection_alarm(self, alarm_data: Dict[str, Any]) -> b... method _format_anomaly_detection_alarm_data (line 102) | def _format_anomaly_detection_alarm_data(self, alarm_data: Dict[str, A... method _generate_resource_key (line 133) | def _generate_resource_key(self, metric_name: str, namespace: str, dim... method _sanitize_resource_name (line 149) | def _sanitize_resource_name(self, name: str) -> str: FILE: src/cloudwatch-mcp-server/awslabs/cloudwatch_mcp_server/cloudwatch_metrics/metric_analyzer.py class MetricAnalyzer (line 33) | class MetricAnalyzer: method __init__ (line 36) | def __init__(self): method analyze_metric_data (line 40) | def analyze_metric_data(self, metric_data: MetricData) -> Dict[str, Any]: method _compute_seasonality_and_trend (line 92) | def _compute_seasonality_and_trend( method _compute_publishing_period (line 115) | def _compute_publishing_period(self, timestamps_ms: list[int]) -> Opti... method _get_closest_cloudwatch_period (line 130) | def _get_closest_cloudwatch_period(self, period_seconds: float) -> float: method _compute_density_ratio (line 145) | def _compute_density_ratio( method _compute_statistics (line 166) | def _compute_statistics(self, values: list[float]) -> Dict[str, Any]: FILE: src/cloudwatch-mcp-server/awslabs/cloudwatch_mcp_server/cloudwatch_metrics/metric_data_decomposer.py class MetricDataDecomposer (line 31) | class MetricDataDecomposer: method detect_seasonality_and_trend (line 37) | def detect_seasonality_and_trend( method _interpolate_to_regular_grid (line 60) | def _interpolate_to_regular_grid( method _detect_strongest_seasonality (line 79) | def _detect_strongest_seasonality( method _calculate_seasonal_strength (line 135) | def _calculate_seasonal_strength( method _compute_trend (line 183) | def _compute_trend(self, values: np.ndarray) -> Trend: FILE: src/cloudwatch-mcp-server/awslabs/cloudwatch_mcp_server/cloudwatch_metrics/models.py class Trend (line 29) | class Trend(str, Enum): class Seasonality (line 41) | class Seasonality(Enum): method from_seconds (line 52) | def from_seconds(cls, seconds: Union[float, int]) -> 'Seasonality': class DecompositionResult (line 63) | class DecompositionResult(BaseModel): class SortOrder (line 70) | class SortOrder(str, Enum): class Dimension (line 77) | class Dimension(BaseModel): class MetricDataPoint (line 84) | class MetricDataPoint(BaseModel): class MetricDataResult (line 91) | class MetricDataResult(BaseModel): class GetMetricDataResponse (line 105) | class GetMetricDataResponse(BaseModel): class MetricMetadataIndexKey (line 116) | class MetricMetadataIndexKey: method __init__ (line 119) | def __init__(self, namespace: str, metric_name: str): method __hash__ (line 129) | def __hash__(self) -> int: method __eq__ (line 133) | def __eq__(self, other) -> bool: method __repr__ (line 139) | def __repr__(self) -> str: class MetricMetadata (line 144) | class MetricMetadata(BaseModel): class AlarmRecommendationThreshold (line 154) | class AlarmRecommendationThreshold(BaseModel): class StaticAlarmThreshold (line 160) | class StaticAlarmThreshold(AlarmRecommendationThreshold): class AnomalyDetectionAlarmThreshold (line 166) | class AnomalyDetectionAlarmThreshold(AlarmRecommendationThreshold): method validate_sensitivity (line 177) | def validate_sensitivity(cls, v): class AlarmRecommendationDimension (line 185) | class AlarmRecommendationDimension(BaseModel): class AlarmRecommendation (line 194) | class AlarmRecommendation(BaseModel): method serialize_model (line 228) | def serialize_model(self): class MetricData (line 247) | class MetricData(BaseModel): method validate_metric_data (line 257) | def validate_metric_data(self): class AlarmRecommendationResult (line 266) | class AlarmRecommendationResult(BaseModel): FILE: src/cloudwatch-mcp-server/awslabs/cloudwatch_mcp_server/cloudwatch_metrics/tools.py class CloudWatchMetricsTools (line 51) | class CloudWatchMetricsTools: method __init__ (line 54) | def __init__(self): method _load_and_index_metadata (line 64) | def _load_and_index_metadata(self) -> Dict[MetricMetadataIndexKey, Any]: method _lookup_metadata (line 115) | def _lookup_metadata(self, namespace: str, metric_name: str) -> Dict[s... method register (line 128) | def register(self, mcp): method get_metric_data (line 142) | async def get_metric_data( method _prepare_time_parameters (line 379) | def _prepare_time_parameters(self, start_time, end_time, target_datapo... method _build_metrics_insights_query (line 414) | def _build_metrics_insights_query( method _build_standard_metric_query (line 486) | def _build_standard_metric_query(self, namespace, metric_name, dimensi... method _process_metric_data_response (line 511) | def _process_metric_data_response(self, response): method _map_to_metrics_insights_statistic (line 542) | def _map_to_metrics_insights_statistic(self, statistic): method _validate_metrics_insights_statistic (line 556) | def _validate_metrics_insights_statistic(self, statistic): method _map_to_cloudwatch_statistic (line 564) | def _map_to_cloudwatch_statistic(self, statistic): method _build_schema_string (line 576) | def _build_schema_string(self, namespace, schema_dimension_keys): method _build_where_clause (line 586) | def _build_where_clause(self, dimensions): method get_metric_metadata (line 594) | async def get_metric_metadata( method get_recommended_metric_alarms (line 665) | async def get_recommended_metric_alarms( method _alarm_matches_dimensions (line 837) | def _alarm_matches_dimensions( method _create_alarm_threshold (line 873) | def _create_alarm_threshold( method _parse_alarm_recommendation (line 897) | def _parse_alarm_recommendation(self, alarm_data: Dict[str, Any]) -> A... method _create_anomaly_detector_data (line 935) | def _create_anomaly_detector_data( method _create_anomaly_detector_recommendation (line 972) | def _create_anomaly_detector_recommendation( method _parse_metric_dimensions (line 998) | def _parse_metric_dimensions(self, alarm_data: Dict[str, Any]) -> List... method _parse_metric_data_response (line 1017) | def _parse_metric_data_response( method analyze_metric (line 1037) | async def analyze_metric( FILE: src/cloudwatch-mcp-server/awslabs/cloudwatch_mcp_server/common.py function remove_null_values (line 20) | def remove_null_values(d: Dict): function filter_by_prefixes (line 25) | def filter_by_prefixes(strings: Set[str], prefixes: Set[str]) -> Set[str]: function epoch_ms_to_utc_iso (line 30) | def epoch_ms_to_utc_iso(ms: int) -> str: function clean_up_pattern (line 41) | def clean_up_pattern(pattern_result: List[Dict[str, str]]): FILE: src/cloudwatch-mcp-server/awslabs/cloudwatch_mcp_server/server.py function main (line 49) | def main(): FILE: src/cloudwatch-mcp-server/tests/cloudwatch_alarms/test_active_alarms.py function mock_context (line 25) | def mock_context(): class TestGetActiveAlarms (line 34) | class TestGetActiveAlarms: method test_max_items_validation_valid (line 38) | async def test_max_items_validation_valid(self, mock_context): method test_max_items_validation_invalid (line 57) | async def test_max_items_validation_invalid(self, mock_context): method test_no_max_items_works_correctly (line 73) | async def test_no_max_items_works_correctly(self, mock_context): method test_paginator_usage (line 116) | async def test_paginator_usage(self, mock_context): method test_describe_alarms_parameters (line 158) | def test_describe_alarms_parameters(self): method test_alarm_tools_registration (line 176) | def test_alarm_tools_registration(self): method test_empty_alarms_response (line 205) | async def test_empty_alarms_response(self, mock_context): method test_mixed_alarm_types_response (line 224) | async def test_mixed_alarm_types_response(self, mock_context): method test_has_more_results_logic (line 268) | async def test_has_more_results_logic(self, mock_context): method test_boto3_client_error_handling (line 329) | async def test_boto3_client_error_handling(self, mock_context): method test_describe_alarms_api_error (line 340) | async def test_describe_alarms_api_error(self, mock_context): method test_alarm_transformation_with_missing_fields (line 358) | async def test_alarm_transformation_with_missing_fields(self, mock_con... method test_pagination_across_multiple_pages (line 403) | async def test_pagination_across_multiple_pages(self, mock_context): method test_dimension_transformation (line 455) | async def test_dimension_transformation(self, mock_context): method test_transform_metric_alarm_direct (line 495) | def test_transform_metric_alarm_direct(self): method test_transform_composite_alarm_direct (line 524) | def test_transform_composite_alarm_direct(self): FILE: src/cloudwatch-mcp-server/tests/cloudwatch_alarms/test_alarm_history.py function mock_context (line 32) | def mock_context(): function sample_alarm_history_response (line 42) | def sample_alarm_history_response(): function sample_metric_alarm (line 77) | def sample_metric_alarm(): function sample_composite_alarm (line 95) | def sample_composite_alarm(): class TestGetAlarmHistory (line 105) | class TestGetAlarmHistory: method test_get_alarm_history_basic_functionality (line 109) | async def test_get_alarm_history_basic_functionality( method test_get_alarm_history_with_custom_parameters (line 146) | async def test_get_alarm_history_with_custom_parameters( method test_composite_alarm_handling (line 183) | async def test_composite_alarm_handling(self, mock_context, sample_com... method test_transform_history_item_with_state_update (line 211) | def test_transform_history_item_with_state_update(self): method test_transform_history_item_with_invalid_json (line 239) | def test_transform_history_item_with_invalid_json(self): method test_generate_time_range_suggestions (line 262) | def test_generate_time_range_suggestions(self): method test_generate_time_range_suggestions_with_flapping (line 308) | def test_generate_time_range_suggestions_with_flapping(self): method test_parse_alarm_rule (line 357) | def test_parse_alarm_rule(self): method test_error_handling (line 379) | async def test_error_handling(self, mock_context): method test_alarm_tools_registration_includes_history (line 399) | def test_alarm_tools_registration_includes_history(self): class TestAlarmHistoryEdgeCases (line 419) | class TestAlarmHistoryEdgeCases: method test_empty_history_response (line 422) | def test_empty_history_response(self): method test_history_item_with_missing_fields (line 434) | def test_history_item_with_missing_fields(self): method test_alarm_details_not_found (line 452) | def test_alarm_details_not_found(self): FILE: src/cloudwatch-mcp-server/tests/cloudwatch_alarms/test_alarm_history_integration.py function mock_context (line 29) | def mock_context(): function realistic_alarm_history_response (line 39) | def realistic_alarm_history_response(): function realistic_metric_alarm (line 122) | def realistic_metric_alarm(): function realistic_composite_alarm (line 148) | def realistic_composite_alarm(): class TestAlarmHistoryIntegration (line 162) | class TestAlarmHistoryIntegration: method test_end_to_end_metric_alarm_history (line 166) | async def test_end_to_end_metric_alarm_history( method test_end_to_end_composite_alarm_with_components (line 251) | async def test_end_to_end_composite_alarm_with_components( method test_pagination_handling (line 341) | async def test_pagination_handling( method test_different_history_item_types (line 383) | async def test_different_history_item_types(self, mock_context, realis... method test_error_scenarios_integration (line 455) | async def test_error_scenarios_integration(self, mock_context): method test_time_range_edge_cases (line 478) | async def test_time_range_edge_cases(self, mock_context, realistic_met... method test_complex_alarm_rule_parsing (line 516) | def test_complex_alarm_rule_parsing(self): method test_performance_with_large_history (line 542) | async def test_performance_with_large_history(self, mock_context, real... method test_default_time_range_behavior (line 604) | async def test_default_time_range_behavior(self, mock_context, realist... FILE: src/cloudwatch-mcp-server/tests/cloudwatch_alarms/test_alarms_error_handling.py function mock_context (line 30) | def mock_context(): class TestParameterValidation (line 39) | class TestParameterValidation: method test_max_items_none_handling (line 43) | async def test_max_items_none_handling(self, mock_context): method test_max_items_invalid_type_handling (line 66) | async def test_max_items_invalid_type_handling(self, mock_context): method test_alarm_history_parameter_defaults (line 82) | async def test_alarm_history_parameter_defaults(self, mock_context): method test_alarm_history_invalid_parameter_types (line 109) | async def test_alarm_history_invalid_parameter_types(self, mock_context): class TestErrorHandling (line 136) | class TestErrorHandling: method test_transform_history_item_error_handling (line 139) | def test_transform_history_item_error_handling(self): method test_transform_history_item_json_parse_error (line 170) | def test_transform_history_item_json_parse_error(self): method test_transform_history_item_general_exception (line 197) | def test_transform_history_item_general_exception(self): method test_generate_time_range_suggestions_error_handling (line 223) | def test_generate_time_range_suggestions_error_handling(self): method test_get_alarm_details_api_error (line 265) | async def test_get_alarm_details_api_error(self): method test_handle_composite_alarm_error (line 287) | async def test_handle_composite_alarm_error(self): method test_handle_composite_alarm_general_error (line 327) | async def test_handle_composite_alarm_general_error(self): method test_parse_alarm_rule_error_handling (line 357) | def test_parse_alarm_rule_error_handling(self): class TestEdgeCases (line 374) | class TestEdgeCases: method test_empty_alarm_rule_parsing (line 377) | def test_empty_alarm_rule_parsing(self): method test_alarm_rule_with_no_matches (line 388) | def test_alarm_rule_with_no_matches(self): method test_alarm_rule_with_empty_alarm_names (line 396) | def test_alarm_rule_with_empty_alarm_names(self): method test_transform_metric_alarm_with_missing_threshold (line 409) | def test_transform_metric_alarm_with_missing_threshold(self): method test_transform_composite_alarm_with_minimal_data (line 428) | def test_transform_composite_alarm_with_minimal_data(self): method test_get_alarm_details_with_both_metric_and_composite_empty (line 443) | async def test_get_alarm_details_with_both_metric_and_composite_empty(... method test_generate_time_range_suggestions_no_alarm_transitions (line 459) | def test_generate_time_range_suggestions_no_alarm_transitions(self): method test_generate_time_range_suggestions_with_default_periods (line 488) | def test_generate_time_range_suggestions_with_default_periods(self): FILE: src/cloudwatch-mcp-server/tests/cloudwatch_logs/test_logs_error_handling.py function mock_context (line 24) | async def mock_context(): class TestParameterValidation (line 33) | class TestParameterValidation: method test_validate_log_group_parameters_both_provided (line 36) | def test_validate_log_group_parameters_both_provided(self): method test_validate_log_group_parameters_neither_provided (line 49) | def test_validate_log_group_parameters_neither_provided(self): method test_validate_log_group_parameters_valid_cases (line 62) | def test_validate_log_group_parameters_valid_cases(self): method test_convert_time_to_timestamp (line 73) | def test_convert_time_to_timestamp(self): method test_build_logs_query_params (line 83) | def test_build_logs_query_params(self): method test_process_query_results (line 104) | def test_process_query_results(self): class TestErrorHandling (line 130) | class TestErrorHandling: method test_describe_log_groups_api_error (line 134) | async def test_describe_log_groups_api_error(self, mock_context): method test_analyze_log_group_api_error (line 150) | async def test_analyze_log_group_api_error(self, mock_context): method test_execute_log_insights_query_api_error (line 173) | async def test_execute_log_insights_query_api_error(self, mock_context): method test_get_logs_insight_query_results_api_error (line 201) | async def test_get_logs_insight_query_results_api_error(self, mock_con... method test_cancel_logs_insight_query_api_error (line 222) | async def test_cancel_logs_insight_query_api_error(self, mock_context): method test_poll_for_query_completion_timeout (line 238) | async def test_poll_for_query_completion_timeout(self, mock_context): method test_poll_for_query_completion_failed_status (line 256) | async def test_poll_for_query_completion_failed_status(self, mock_cont... method test_poll_for_query_completion_cancelled_status (line 274) | async def test_poll_for_query_completion_cancelled_status(self, mock_c... method test_poll_for_query_completion_unexpected_status (line 292) | async def test_poll_for_query_completion_unexpected_status(self, mock_... method test_poll_for_query_completion_polling_exception (line 311) | async def test_poll_for_query_completion_polling_exception(self, mock_... class TestEdgeCases (line 336) | class TestEdgeCases: method test_process_query_results_missing_fields (line 339) | def test_process_query_results_missing_fields(self): method test_aws_profile_initialization (line 356) | def test_aws_profile_initialization(self): method test_boto3_client_error_handling (line 372) | async def test_boto3_client_error_handling(self, mock_context): method test_tools_registration (line 381) | def test_tools_registration(self): method test_build_logs_query_params_with_none_values (line 402) | def test_build_logs_query_params_with_none_values(self): class TestRegionHandling (line 421) | class TestRegionHandling: method test_execute_log_insights_query_region_parameter (line 425) | async def test_execute_log_insights_query_region_parameter(self, mock_... method test_get_logs_insight_query_results_region_parameter (line 458) | async def test_get_logs_insight_query_results_region_parameter(self, m... method test_cancel_logs_insight_query_region_parameter (line 484) | async def test_cancel_logs_insight_query_region_parameter(self, mock_c... method test_describe_log_groups_region_parameter (line 506) | async def test_describe_log_groups_region_parameter(self, mock_context): FILE: src/cloudwatch-mcp-server/tests/cloudwatch_logs/test_logs_models.py class TestLogGroupMetadata (line 23) | class TestLogGroupMetadata: method test_convert_to_iso8601_returns_string_unchanged (line 26) | def test_convert_to_iso8601_returns_string_unchanged(self): class TestLogAnomaly (line 44) | class TestLogAnomaly: method test_timestamp_fields_return_string_unchanged (line 47) | def test_timestamp_fields_return_string_unchanged(self): FILE: src/cloudwatch-mcp-server/tests/cloudwatch_logs/test_logs_server.py function ctx (line 31) | async def ctx(): function logs_client (line 37) | async def logs_client(): function cloudwatch_tools (line 59) | async def cloudwatch_tools(logs_client): class TestDescribeLogGroups (line 68) | class TestDescribeLogGroups: method test_basic_describe (line 71) | async def test_basic_describe(self, ctx, cloudwatch_tools, logs_client): method test_max_items_limit (line 105) | async def test_max_items_limit(self, ctx, cloudwatch_tools, logs_client): method test_saved_query_with_prefix (line 138) | async def test_saved_query_with_prefix(self, ctx, cloudwatch_tools, lo... method test_exception_handling (line 171) | async def test_exception_handling(self, ctx, cloudwatch_tools, logs_cl... class TestExecuteLogInsightsQuery (line 188) | class TestExecuteLogInsightsQuery: method test_successful_query (line 191) | async def test_successful_query(self, ctx, cloudwatch_tools, logs_clie... method test_query_timeout (line 230) | async def test_query_timeout(self, ctx, cloudwatch_tools, logs_client): method test_invalid_parameters (line 258) | async def test_invalid_parameters(self, ctx, cloudwatch_tools): class TestGetQueryResults (line 278) | class TestGetQueryResults: method test_get_results (line 281) | async def test_get_results(self, ctx, cloudwatch_tools, logs_client): class TestCancelQuery (line 310) | class TestCancelQuery: method test_cancel_query (line 313) | async def test_cancel_query(self, ctx, cloudwatch_tools, logs_client): class TestAnalyzeLogGroup (line 327) | class TestAnalyzeLogGroup: method test_analyze_log_group (line 330) | async def test_analyze_log_group(self, ctx, cloudwatch_tools, logs_cli... method test_analyze_log_group_region_parameter (line 392) | async def test_analyze_log_group_region_parameter(self, ctx, cloudwatc... FILE: src/cloudwatch-mcp-server/tests/cloudwatch_metrics/test_analyze_metric.py class TestAnalyzeMetric (line 15) | class TestAnalyzeMetric: method cloudwatch_metrics_tools (line 19) | def cloudwatch_metrics_tools(self): method ctx (line 25) | def ctx(self): method test_analyze_metric_no_data (line 32) | async def test_analyze_metric_no_data(self, ctx, cloudwatch_metrics_to... method test_analyze_metric_with_data (line 53) | async def test_analyze_metric_with_data(self, ctx, cloudwatch_metrics_... method test_analyze_metric_aws_error (line 87) | async def test_analyze_metric_aws_error(self, ctx, cloudwatch_metrics_... method test_analyze_metric_custom_period (line 104) | async def test_analyze_metric_custom_period(self, ctx, cloudwatch_metr... method test_analyze_metric_empty_response (line 127) | async def test_analyze_metric_empty_response(self, ctx, cloudwatch_met... method test_analyze_metric_mismatched_timestamps_values (line 143) | async def test_analyze_metric_mismatched_timestamps_values( method test_analyze_metric_with_nan_values (line 177) | async def test_analyze_metric_with_nan_values(self, cloudwatch_metrics... method test_analyze_metric_get_metric_data_returns_empty (line 206) | async def test_analyze_metric_get_metric_data_returns_empty( FILE: src/cloudwatch-mcp-server/tests/cloudwatch_metrics/test_cloudformation_template_generator.py class MockThreshold (line 10) | class MockThreshold: method __init__ (line 13) | def __init__(self, sensitivity=2): class TestCloudFormationTemplateGenerator (line 18) | class TestCloudFormationTemplateGenerator: method generator (line 22) | def generator(self): method test_format_alarm_data_with_anomaly_threshold (line 26) | def test_format_alarm_data_with_anomaly_threshold(self, generator): method test_format_alarm_data_defaults (line 39) | def test_format_alarm_data_defaults(self, generator): method test_generate_metric_alarm_template_non_anomaly_returns_empty (line 52) | def test_generate_metric_alarm_template_non_anomaly_returns_empty(self... method test_is_anomaly_detection_alarm (line 62) | def test_is_anomaly_detection_alarm(self, generator): method test_special_characters_in_metric_names_are_escaped (line 70) | def test_special_characters_in_metric_names_are_escaped(self, generator): method test_alarm_name_not_required (line 118) | def test_alarm_name_not_required(self, generator): method test_missing_metric_name_raises_error (line 138) | def test_missing_metric_name_raises_error(self, generator): method test_missing_namespace_raises_error (line 149) | def test_missing_namespace_raises_error(self, generator): method test_empty_metric_name_raises_error (line 160) | def test_empty_metric_name_raises_error(self, generator): method test_dimensions_optional (line 172) | def test_dimensions_optional(self, generator): method test_sanitize_resource_name_empty_string (line 187) | def test_sanitize_resource_name_empty_string(self, generator): method test_sanitize_resource_name_starts_with_number (line 193) | def test_sanitize_resource_name_starts_with_number(self, generator): method test_sanitize_resource_name_long_string (line 199) | def test_sanitize_resource_name_long_string(self, generator): FILE: src/cloudwatch-mcp-server/tests/cloudwatch_metrics/test_decomposer_trend.py class TestDecomposerTrend (line 14) | class TestDecomposerTrend: method decomposer (line 18) | def decomposer(self): method test_perfect_sine_wave_no_trend (line 22) | def test_perfect_sine_wave_no_trend(self, decomposer): method test_sine_wave_with_positive_trend (line 43) | def test_sine_wave_with_positive_trend(self, decomposer): method test_sine_wave_with_negative_trend (line 64) | def test_sine_wave_with_negative_trend(self, decomposer): method test_non_seasonal_positive_trend (line 85) | def test_non_seasonal_positive_trend(self, decomposer): method test_non_seasonal_negative_trend (line 105) | def test_non_seasonal_negative_trend(self, decomposer): method test_non_seasonal_flat_line (line 125) | def test_non_seasonal_flat_line(self, decomposer): method test_seasonal_strength_zero_cycles (line 145) | def test_seasonal_strength_zero_cycles(self, decomposer): method test_compute_trend_with_nan_values (line 155) | def test_compute_trend_with_nan_values(self, decomposer): method test_compute_trend_with_inf_values (line 164) | def test_compute_trend_with_inf_values(self, decomposer): method test_compute_trend_insufficient_data (line 173) | def test_compute_trend_insufficient_data(self, decomposer): method test_compute_trend_exception_handling (line 181) | def test_compute_trend_exception_handling(self, decomposer): method test_compute_trend_only_two_valid_points (line 190) | def test_compute_trend_only_two_valid_points(self, decomposer): method test_compute_trend_negative_slope (line 199) | def test_compute_trend_negative_slope(self, decomposer): method test_compute_trend_with_statsmodels_exception (line 207) | def test_compute_trend_with_statsmodels_exception(self, decomposer): method test_calculate_seasonal_strength_edge_case (line 217) | def test_calculate_seasonal_strength_edge_case(self, decomposer): method test_calculate_seasonal_strength_negative_period (line 228) | def test_calculate_seasonal_strength_negative_period(self, decomposer): method test_calculate_seasonal_strength_exactly_one_cycle (line 238) | def test_calculate_seasonal_strength_exactly_one_cycle(self, decomposer): method test_compute_trend_ols_exception (line 250) | def test_compute_trend_ols_exception(self, decomposer): FILE: src/cloudwatch-mcp-server/tests/cloudwatch_metrics/test_metric_analyzer.py class TestMetricAnalyzer (line 18) | class TestMetricAnalyzer: method analyzer (line 28) | def analyzer(self): method create_timestamps_and_values (line 33) | def create_timestamps_and_values( method _analyze_with_metric_data (line 52) | def _analyze_with_metric_data(self, analyzer, timestamps, values, peri... method sine_wave_pattern (line 59) | def sine_wave_pattern( method linear_trend_pattern (line 65) | def linear_trend_pattern(self, index: int, base_value: float, slope: f... method create_mock_metric_response (line 69) | def create_mock_metric_response(self, timestamps: List[int], values: L... method test_analyze_empty_data (line 88) | def test_analyze_empty_data(self, analyzer): method test_analyze_mismatched_data (line 94) | def test_analyze_mismatched_data(self, analyzer): method test_analyze_single_point (line 100) | def test_analyze_single_point(self, analyzer): method test_analyze_with_nan_values (line 108) | def test_analyze_with_nan_values(self, analyzer): method test_analyze_with_all_invalid_values (line 119) | def test_analyze_with_all_invalid_values(self, analyzer): method test_compute_publishing_period_insufficient_data (line 130) | def test_compute_publishing_period_insufficient_data(self, analyzer): method test_compute_publishing_period_regular_intervals (line 140) | def test_compute_publishing_period_regular_intervals(self, analyzer): method test_compute_publishing_period_irregular_intervals (line 150) | def test_compute_publishing_period_irregular_intervals(self, analyzer): method test_compute_publishing_period_truly_irregular (line 167) | def test_compute_publishing_period_truly_irregular(self, analyzer): method test_compute_statistics_empty_data (line 179) | def test_compute_statistics_empty_data(self, analyzer): method test_compute_statistics_valid_data (line 189) | def test_compute_statistics_valid_data(self, analyzer): method test_compute_statistics_zero_mean (line 201) | def test_compute_statistics_zero_mean(self, analyzer): method test_compute_statistics_constant_values (line 212) | def test_compute_statistics_constant_values(self, analyzer): method test_analyze_with_seasonal_pattern (line 225) | def test_analyze_with_seasonal_pattern(self, analyzer): method test_analyze_with_trend_pattern (line 245) | def test_analyze_with_trend_pattern(self, analyzer): method test_analyze_flat_data (line 256) | def test_analyze_flat_data(self, analyzer): method test_analyze_insufficient_seasonal_data (line 267) | def test_analyze_insufficient_seasonal_data(self, analyzer): method test_analyze_direct (line 277) | def test_analyze_direct(self, analyzer): method test_compute_seasonality_exception_handling (line 288) | def test_compute_seasonality_exception_handling(self, analyzer): method test_compute_publishing_period_exception_handling (line 298) | def test_compute_publishing_period_exception_handling(self, analyzer): method test_compute_density_ratio_exception_handling (line 305) | def test_compute_density_ratio_exception_handling(self, analyzer): method test_compute_statistics_exception_handling (line 314) | def test_compute_statistics_exception_handling(self, analyzer): method test_compute_density_ratio_exception_handling_sum_error (line 324) | def test_compute_density_ratio_exception_handling_sum_error(self, anal... method test_compute_publishing_period_exception_handling_counter_error (line 336) | def test_compute_publishing_period_exception_handling_counter_error(se... method test_compute_seasonality_exception_handling_detector_error (line 348) | def test_compute_seasonality_exception_handling_detector_error(self, a... method test_compute_statistics_exception_handling_numpy_error (line 364) | def test_compute_statistics_exception_handling_numpy_error(self, analy... method test_analyze_metric_data_exception_returns_empty_with_message (line 378) | def test_analyze_metric_data_exception_returns_empty_with_message(self... FILE: src/cloudwatch-mcp-server/tests/cloudwatch_metrics/test_metrics_error_handling.py function mock_context (line 31) | async def mock_context(): class TestMetadataLoadingErrors (line 40) | class TestMetadataLoadingErrors: method test_metadata_file_not_found (line 43) | def test_metadata_file_not_found(self): method test_metadata_file_read_error (line 56) | def test_metadata_file_read_error(self): method test_metadata_json_parse_error (line 70) | def test_metadata_json_parse_error(self): method test_metadata_entry_processing_error (line 84) | def test_metadata_entry_processing_error(self): method test_metadata_entry_key_error (line 113) | def test_metadata_entry_key_error(self): class TestParameterValidation (line 136) | class TestParameterValidation: method test_get_metric_data_group_by_dimension_not_in_schema (line 140) | async def test_get_metric_data_group_by_dimension_not_in_schema(self, ... method test_get_metric_data_sort_order_without_order_by_statistic (line 163) | async def test_get_metric_data_sort_order_without_order_by_statistic(s... method test_invalid_metrics_insights_statistic (line 185) | def test_invalid_metrics_insights_statistic(self): method test_map_to_metrics_insights_statistic_invalid (line 195) | def test_map_to_metrics_insights_statistic_invalid(self): class TestErrorHandling (line 204) | class TestErrorHandling: method test_get_metric_data_api_error (line 208) | async def test_get_metric_data_api_error(self, mock_context): method test_get_metric_metadata_api_error (line 231) | async def test_get_metric_metadata_api_error(self, mock_context): method test_get_recommended_metric_alarms_api_error (line 249) | async def test_get_recommended_metric_alarms_api_error(self, mock_cont... method test_get_recommended_metric_alarms_parse_error (line 270) | async def test_get_recommended_metric_alarms_parse_error(self, mock_co... method test_parse_alarm_recommendation_missing_fields (line 318) | async def test_parse_alarm_recommendation_missing_fields(self, mock_co... method test_alarm_matches_dimensions_edge_cases (line 347) | def test_alarm_matches_dimensions_edge_cases(self): method test_analyze_metric_analyzer_error (line 385) | async def test_analyze_metric_analyzer_error(self, mock_context): method test_get_recommended_alarms_analysis_fallback_error (line 407) | async def test_get_recommended_alarms_analysis_fallback_error(self, mo... class TestEdgeCases (line 429) | class TestEdgeCases: method test_boto3_client_error_handling (line 433) | async def test_boto3_client_error_handling(self, mock_context): method test_default_region_usage (line 447) | def test_default_region_usage(self): method test_tools_registration (line 462) | def test_tools_registration(self): method test_process_metric_data_response_edge_cases (line 482) | def test_process_metric_data_response_edge_cases(self): method test_build_where_clause_edge_cases (line 511) | def test_build_where_clause_edge_cases(self): method test_build_schema_string_edge_cases (line 533) | def test_build_schema_string_edge_cases(self): method test_statistic_mappings (line 550) | def test_statistic_mappings(self): method test_period_calculation_edge_cases (line 571) | def test_period_calculation_edge_cases(self): FILE: src/cloudwatch-mcp-server/tests/cloudwatch_metrics/test_metrics_models.py class TestDimension (line 32) | class TestDimension: method test_dimension_creation (line 35) | def test_dimension_creation(self): method test_dimension_validation (line 41) | def test_dimension_validation(self): class TestMetricDataPoint (line 51) | class TestMetricDataPoint: method test_metric_data_point_creation (line 54) | def test_metric_data_point_creation(self): method test_metric_data_point_validation (line 62) | def test_metric_data_point_validation(self): class TestMetricDataResult (line 74) | class TestMetricDataResult: method test_metric_data_result_creation (line 77) | def test_metric_data_result_creation(self): method test_metric_data_result_default_values (line 98) | def test_metric_data_result_default_values(self): class TestGetMetricDataResponse (line 106) | class TestGetMetricDataResponse: method test_get_metric_data_response_creation (line 109) | def test_get_metric_data_response_creation(self): method test_get_metric_data_response_default_values (line 124) | def test_get_metric_data_response_default_values(self): method test_get_metric_data_response_with_multiple_results (line 131) | def test_get_metric_data_response_with_multiple_results(self): class TestMetricMetadataIndexKey (line 154) | class TestMetricMetadataIndexKey: method test_key_creation (line 157) | def test_key_creation(self): method test_key_hashing (line 164) | def test_key_hashing(self): method test_key_equality (line 176) | def test_key_equality(self): method test_key_as_dict_key (line 191) | def test_key_as_dict_key(self): method test_key_repr (line 208) | def test_key_repr(self): class TestMetricMetadata (line 218) | class TestMetricMetadata: method test_metric_metadata_creation (line 221) | def test_metric_metadata_creation(self): method test_metric_metadata_validation (line 233) | def test_metric_metadata_validation(self): class TestDimensionValidation (line 243) | class TestDimensionValidation: method test_dimension_creation (line 246) | def test_dimension_creation(self): method test_dimension_validation (line 253) | def test_dimension_validation(self): class TestAlarmRecommendationDimension (line 260) | class TestAlarmRecommendationDimension: method test_alarm_recommendation_dimension_creation_with_value (line 263) | def test_alarm_recommendation_dimension_creation_with_value(self): method test_alarm_recommendation_dimension_creation_without_value (line 270) | def test_alarm_recommendation_dimension_creation_without_value(self): class TestAlarmRecommendation (line 278) | class TestAlarmRecommendation: method test_alarm_recommendation_creation (line 281) | def test_alarm_recommendation_creation(self): method test_alarm_recommendation_with_minimal_fields (line 317) | def test_alarm_recommendation_with_minimal_fields(self): method test_alarm_recommendation_serialization (line 337) | def test_alarm_recommendation_serialization(self): method test_alarm_recommendation_serialization_without_template (line 358) | def test_alarm_recommendation_serialization_without_template(self): class TestAnomalyDetectionAlarmThreshold (line 378) | class TestAnomalyDetectionAlarmThreshold: method test_sensitivity_validation_invalid_zero (line 381) | def test_sensitivity_validation_invalid_zero(self): method test_sensitivity_validation_invalid_negative (line 392) | def test_sensitivity_validation_invalid_negative(self): method test_sensitivity_validation_invalid_over_100 (line 403) | def test_sensitivity_validation_invalid_over_100(self): class TestMetricData (line 415) | class TestMetricData: method test_metric_data_valid (line 418) | def test_metric_data_valid(self): method test_metric_data_mismatched_lengths (line 430) | def test_metric_data_mismatched_lengths(self): method test_metric_data_invalid_period (line 437) | def test_metric_data_invalid_period(self): FILE: src/cloudwatch-mcp-server/tests/cloudwatch_metrics/test_metrics_server.py function ctx (line 33) | async def ctx(): function aws_credentials (line 39) | async def aws_credentials(): function cloudwatch_client (line 47) | async def cloudwatch_client(aws_credentials): function cloudwatch_metrics_tools (line 56) | async def cloudwatch_metrics_tools(cloudwatch_client): class TestCloudWatchMetricsServer (line 65) | class TestCloudWatchMetricsServer: class TestGetMetricData (line 70) | class TestGetMetricData: method test_get_metric_data_basic (line 73) | async def test_get_metric_data_basic(self, ctx, cloudwatch_metrics_too... method test_get_metric_data_with_string_dates (line 128) | async def test_get_metric_data_with_string_dates(self, ctx, cloudwatch... method test_get_metric_data_period_calculation (line 162) | async def test_get_metric_data_period_calculation(self, ctx, cloudwatc... method test_get_metric_data_with_metrics_insights_group_by (line 196) | async def test_get_metric_data_with_metrics_insights_group_by( method test_get_metric_data_with_metrics_insights_dimension_keys (line 240) | async def test_get_metric_data_with_metrics_insights_dimension_keys( method test_get_metric_data_with_metrics_insights_limit_and_order (line 277) | async def test_get_metric_data_with_metrics_insights_limit_and_order( method test_get_metric_data_with_different_order_by_statistic (line 318) | async def test_get_metric_data_with_different_order_by_statistic( method test_get_metric_data_with_metrics_insights_and_dimensions (line 359) | async def test_get_metric_data_with_metrics_insights_and_dimensions( method test_order_by_statistic_without_sort_order (line 398) | async def test_order_by_statistic_without_sort_order(self, ctx, cloudw... method test_no_order_by_when_neither_specified (line 435) | async def test_no_order_by_when_neither_specified(self, ctx, cloudwatc... method test_error_when_sort_order_without_order_by_statistic (line 471) | async def test_error_when_sort_order_without_order_by_statistic( method test_get_metric_data_error_handling (line 494) | async def test_get_metric_data_error_handling(self, ctx, cloudwatch_me... method test_get_metric_data_with_various_datetime_formats (line 576) | async def test_get_metric_data_with_various_datetime_formats( method test_get_metric_metadata_found (line 621) | async def test_get_metric_metadata_found(self, ctx, cloudwatch_metrics... method test_get_metric_metadata_not_found (line 636) | async def test_get_metric_metadata_not_found(self, ctx, cloudwatch_met... method test_get_recommended_metric_alarms_found (line 645) | async def test_get_recommended_metric_alarms_found(self, ctx, cloudwat... method test_get_recommended_metric_alarms_not_found (line 670) | async def test_get_recommended_metric_alarms_not_found(self, ctx, clou... method test_get_recommended_metric_alarms_dimension_matching (line 681) | async def test_get_recommended_metric_alarms_dimension_matching( method test_get_recommended_metric_alarms_anomaly_detection_based_on_seasonality (line 733) | async def test_get_recommended_metric_alarms_anomaly_detection_based_o... method test_get_recommended_metric_alarms_metadata_takes_precedence (line 761) | async def test_get_recommended_metric_alarms_metadata_takes_precedence( method test_get_recommended_metric_alarms_runtime_error (line 810) | async def test_get_recommended_metric_alarms_runtime_error( FILE: src/cloudwatch-mcp-server/tests/cloudwatch_metrics/test_seasonal_detector.py class TestSeasonalDetector (line 26) | class TestSeasonalDetector: method detector (line 30) | def detector(self): method metric_analyzer (line 35) | def metric_analyzer(self): method test_low_density_returns_none (line 40) | def test_low_density_returns_none(self, detector): method test_exactly_50_percent_density_returns_none (line 48) | def test_exactly_50_percent_density_returns_none(self, detector): method test_high_density_allows_detection (line 56) | def test_high_density_allows_detection(self, detector): method test_seasonal_period_detection (line 74) | def test_seasonal_period_detection(self, detector, period_hours, expec... method test_short_period_seasonality_detection (line 85) | def test_short_period_seasonality_detection(self, detector): method test_hourly_seasonality_detection (line 105) | def test_hourly_seasonality_detection(self, detector): method test_non_seasonal_data_returns_none (line 124) | def test_non_seasonal_data_returns_none(self, detector): method test_random_noise_returns_none (line 133) | def test_random_noise_returns_none(self, detector): method test_empty_data (line 144) | def test_empty_data(self, detector): method test_single_point (line 149) | def test_single_point(self, detector): method test_two_points (line 158) | def test_two_points(self, detector): method test_insufficient_data_for_period (line 168) | def test_insufficient_data_for_period(self, detector): method test_zero_publishing_period (line 180) | def test_zero_publishing_period(self, detector): method test_interpolation_preserves_seasonality (line 194) | def test_interpolation_preserves_seasonality(self, detector): method test_interpolation_with_single_point (line 221) | def test_interpolation_with_single_point(self, detector): method test_interpolation_with_empty_data (line 233) | def test_interpolation_with_empty_data(self, detector): method test_seasonal_strength_calculation (line 243) | def test_seasonal_strength_calculation(self, detector): method test_seasonal_strength_flat_line (line 253) | def test_seasonal_strength_flat_line(self, detector): method test_seasonal_strength_insufficient_data (line 262) | def test_seasonal_strength_insufficient_data(self, detector): method test_seasonal_strength_zero_period (line 270) | def test_seasonal_strength_zero_period(self, detector): method test_seasonal_strength_negative_period (line 278) | def test_seasonal_strength_negative_period(self, detector): method test_sine_wave_seasonality_detection_integration (line 287) | def test_sine_wave_seasonality_detection_integration(self, metric_anal... method test_flat_line_no_seasonality_integration (line 302) | def test_flat_line_no_seasonality_integration(self, metric_analyzer): method test_sine_wave_alarm_recommendations (line 316) | async def test_sine_wave_alarm_recommendations(self): method test_non_seasonal_data_no_anomaly_alarm (line 352) | async def test_non_seasonal_data_no_anomaly_alarm(self): method test_winsorization_handles_outliers (line 366) | def test_winsorization_handles_outliers(self, detector): method test_numerical_stability_with_constant_values (line 384) | def test_numerical_stability_with_constant_values(self, detector): method test_interpolation_with_none_period (line 393) | def test_interpolation_with_none_period(self, detector): method test_interpolation_with_zero_period (line 410) | def test_interpolation_with_zero_period(self, detector): method test_calculate_seasonal_strength_zero_cycles (line 424) | def test_calculate_seasonal_strength_zero_cycles(self, detector): method test_interpolation_with_single_timestamp_gap (line 433) | def test_interpolation_with_single_timestamp_gap(self, detector): method test_interpolation_with_negative_calculated_period (line 446) | def test_interpolation_with_negative_calculated_period(self, detector): method test_calculate_seasonal_strength_insufficient_cycles (line 459) | def test_calculate_seasonal_strength_insufficient_cycles(self, detector): method test_calculate_seasonal_strength_single_value_large_period (line 468) | def test_calculate_seasonal_strength_single_value_large_period(self, d... method test_calculate_seasonal_strength_values_shorter_than_period (line 477) | def test_calculate_seasonal_strength_values_shorter_than_period(self, ... method test_calculate_seasonal_strength_direct_zero_cycles (line 486) | def test_calculate_seasonal_strength_direct_zero_cycles(self, detector): FILE: src/cloudwatch-mcp-server/tests/cloudwatch_metrics/test_seasonality_enum.py class TestSeasonalityEnum (line 20) | class TestSeasonalityEnum: method test_enum_values_are_correct (line 23) | def test_enum_values_are_correct(self): method test_from_seconds_exact_match (line 32) | def test_from_seconds_exact_match(self): method test_from_seconds_within_threshold (line 41) | def test_from_seconds_within_threshold(self): method test_from_seconds_outside_threshold_returns_none (line 55) | def test_from_seconds_outside_threshold_returns_none(self): method test_from_seconds_chooses_closest_match (line 70) | def test_from_seconds_chooses_closest_match(self): method test_from_seconds_with_float (line 81) | def test_from_seconds_with_float(self): method test_from_seconds_edge_cases (line 86) | def test_from_seconds_edge_cases(self): method test_from_seconds_boundary_at_threshold (line 97) | def test_from_seconds_boundary_at_threshold(self): FILE: src/cloudwatch-mcp-server/tests/cloudwatch_metrics/test_utils.py function create_timestamps_and_values (line 9) | def create_timestamps_and_values( function create_timestamps_and_values_by_duration (line 28) | def create_timestamps_and_values_by_duration( function sine_wave_pattern (line 53) | def sine_wave_pattern(index: int, base_value: float, amplitude: float, p... function sine_wave_pattern_minutes (line 58) | def sine_wave_pattern_minutes( function linear_trend_pattern (line 65) | def linear_trend_pattern(index: int, base_value: float, slope: float) ->... function create_sparse_data (line 70) | def create_sparse_data( function create_mock_metric_response (line 91) | def create_mock_metric_response(timestamps: List[int], values: List[floa... FILE: src/cloudwatch-mcp-server/tests/cloudwatch_metrics/test_validation_error.py function ctx (line 23) | async def ctx(): function cloudwatch_metrics_tools (line 29) | async def cloudwatch_metrics_tools(): class TestValidationError (line 38) | class TestValidationError: method test_group_by_dimension_not_in_schema_dimension_keys (line 41) | async def test_group_by_dimension_not_in_schema_dimension_keys( FILE: src/cloudwatch-mcp-server/tests/test_aws_common.py class TestGetAwsClient (line 20) | class TestGetAwsClient: method test_get_aws_client_with_profile_name (line 24) | def test_get_aws_client_with_profile_name(self, mock_session_class): method test_get_aws_client_with_aws_profile_env (line 47) | def test_get_aws_client_with_aws_profile_env(self, mock_getenv, mock_s... method test_get_aws_client_without_profile (line 68) | def test_get_aws_client_without_profile(self, mock_getenv, mock_sessio... method test_get_aws_client_region_fallback_to_session (line 87) | def test_get_aws_client_region_fallback_to_session(self, mock_getenv, ... method test_get_aws_client_region_fallback_to_us_east_1 (line 107) | def test_get_aws_client_region_fallback_to_us_east_1(self, mock_getenv... method test_get_aws_client_user_agent_config (line 127) | def test_get_aws_client_user_agent_config(self, mock_getenv, mock_sess... method test_get_aws_client_profile_takes_precedence_over_env (line 149) | def test_get_aws_client_profile_takes_precedence_over_env(self, mock_s... method test_get_aws_client_all_services (line 168) | def test_get_aws_client_all_services(self, mock_getenv, mock_session_c... FILE: src/cloudwatch-mcp-server/tests/test_common_and_server.py class TestCommonUtilities (line 31) | class TestCommonUtilities: method test_remove_null_values (line 34) | def test_remove_null_values(self): method test_filter_by_prefixes (line 51) | def test_filter_by_prefixes(self): method test_epoch_ms_to_utc_iso (line 65) | def test_epoch_ms_to_utc_iso(self): method test_clean_up_pattern_with_logsamples (line 74) | def test_clean_up_pattern_with_logsamples(self): method test_clean_up_pattern_missing_logsamples (line 101) | def test_clean_up_pattern_missing_logsamples(self): method test_clean_up_pattern_empty_logsamples (line 117) | def test_clean_up_pattern_empty_logsamples(self): class TestLogModelsEdgeCases (line 134) | class TestLogModelsEdgeCases: method test_log_anomaly_log_samples_limit (line 137) | def test_log_anomaly_log_samples_limit(self): method test_saved_logs_insights_query_prefix_extraction (line 165) | def test_saved_logs_insights_query_prefix_extraction(self): method test_saved_logs_insights_query_no_prefix (line 178) | def test_saved_logs_insights_query_no_prefix(self): method test_log_anomaly_histogram_conversion (line 187) | def test_log_anomaly_histogram_conversion(self): class TestServerInitialization (line 211) | class TestServerInitialization: method test_server_main_function (line 214) | def test_server_main_function(self): class TestEdgeCasesCoverage (line 227) | class TestEdgeCasesCoverage: method test_epoch_ms_to_utc_iso_with_z_suffix (line 230) | def test_epoch_ms_to_utc_iso_with_z_suffix(self): method test_filter_by_prefixes_empty_sets (line 243) | def test_filter_by_prefixes_empty_sets(self): method test_clean_up_pattern_multiple_entries (line 257) | def test_clean_up_pattern_multiple_entries(self): FILE: src/cloudwatch-mcp-server/tests/test_init.py class TestInit (line 20) | class TestInit: method test_mcp_version (line 23) | def test_mcp_version(self): method test_module_reload (line 40) | def test_module_reload(self): FILE: src/cloudwatch-mcp-server/tests/test_main.py class TestMain (line 20) | class TestMain: method test_main_default (line 25) | def test_main_default(self, mock_run): method test_module_execution (line 34) | def test_module_execution(self): FILE: src/code-doc-gen-mcp-server/awslabs/code_doc_gen_mcp_server/server.py class _ProjectInfo (line 57) | class _ProjectInfo(BaseModel): class _AnalysisResult (line 69) | class _AnalysisResult(BaseModel): function create_documentation_context (line 83) | def create_documentation_context( function prepare_repository (line 165) | async def prepare_repository( function _analyze_project_structure (line 257) | async def _analyze_project_structure( function create_context (line 301) | async def create_context( function plan_documentation (line 356) | async def plan_documentation( function generate_documentation (line 434) | async def generate_documentation( function main (line 547) | def main(): FILE: src/code-doc-gen-mcp-server/awslabs/code_doc_gen_mcp_server/utils/doc_generator.py class DocumentGenerator (line 30) | class DocumentGenerator: method generate_docs (line 33) | async def generate_docs( method _write_file (line 58) | async def _write_file(self, path: Path, content: str) -> None: method _get_component_summary (line 70) | def _get_component_summary(self, analysis: ProjectAnalysis) -> str: method _get_key_components (line 99) | def _get_key_components(self, analysis: ProjectAnalysis) -> List[str]: method _generate_diagram_placeholder (line 110) | def _generate_diagram_placeholder(self, diagram_type: str, analysis: P... method _generate_content (line 154) | async def _generate_content( FILE: src/code-doc-gen-mcp-server/awslabs/code_doc_gen_mcp_server/utils/models.py class DocumentSection (line 21) | class DocumentSection(BaseModel): class DocumentTemplate (line 38) | class DocumentTemplate(BaseModel): class DocumentSpec (line 45) | class DocumentSpec(BaseModel): class ProjectAnalysis (line 54) | class ProjectAnalysis(BaseModel): class DocStructure (line 95) | class DocStructure(BaseModel): class McpServerContext (line 108) | class McpServerContext(BaseModel): class DocumentationContext (line 115) | class DocumentationContext(BaseModel): class DocumentationPlan (line 132) | class DocumentationPlan(BaseModel): class GeneratedDocument (line 148) | class GeneratedDocument(BaseModel): FILE: src/code-doc-gen-mcp-server/awslabs/code_doc_gen_mcp_server/utils/repomix_manager.py class RepomixManager (line 25) | class RepomixManager: method __init__ (line 28) | def __init__(self): method extract_statistics (line 32) | def extract_statistics(self, xml_path: str) -> Dict[str, Any]: method extract_directory_structure (line 87) | def extract_directory_structure(self, xml_path: str) -> Optional[str]: method _convert_repository_structure (line 147) | def _convert_repository_structure(self, element, lines, indent=0): method prepare_repository (line 166) | async def prepare_repository( FILE: src/code-doc-gen-mcp-server/awslabs/code_doc_gen_mcp_server/utils/templates.py function get_template_for_file (line 35) | def get_template_for_file(filename: str) -> str: function create_doc_from_template (line 242) | def create_doc_from_template(template_name: str, doc_name: str) -> Docum... FILE: src/code-doc-gen-mcp-server/tests/test_doc_generator.py function mock_context (line 31) | def mock_context(): function mock_plan (line 53) | def mock_plan(): function test_generate_docs (line 94) | async def test_generate_docs(mock_context, mock_plan): function test_write_file (line 121) | async def test_write_file(): function test_write_file_error (line 142) | async def test_write_file_error(): function test_generate_content_standard_document (line 165) | async def test_generate_content_standard_document(mock_context): function test_generate_content_readme_with_arch_diagram (line 194) | async def test_generate_content_readme_with_arch_diagram(mock_context): function test_generate_content_backend_with_dataflow (line 221) | async def test_generate_content_backend_with_dataflow(mock_context): function test_get_component_summary (line 250) | def test_get_component_summary(): function test_get_key_components (line 275) | def test_get_key_components(): function test_generate_diagram_placeholder (line 301) | def test_generate_diagram_placeholder(): FILE: src/code-doc-gen-mcp-server/tests/test_doc_generator_edge_cases.py function test_generate_docs_error_handling (line 32) | async def test_generate_docs_error_handling(): function test_generate_docs_with_log_messages (line 70) | async def test_generate_docs_with_log_messages(): function test_get_component_summary (line 134) | def test_get_component_summary(): function test_get_key_components (line 197) | def test_get_key_components(): function test_generate_content (line 242) | async def test_generate_content(): function test_generate_diagram_placeholder (line 300) | def test_generate_diagram_placeholder(): FILE: src/code-doc-gen-mcp-server/tests/test_init.py class TestInit (line 20) | class TestInit: method test_version (line 23) | def test_version(self): method test_module_reload (line 40) | def test_module_reload(self): FILE: src/code-doc-gen-mcp-server/tests/test_main.py class TestMain (line 20) | class TestMain: method test_main_default (line 25) | def test_main_default(self, mock_run): method test_module_execution (line 34) | def test_module_execution(self): FILE: src/code-doc-gen-mcp-server/tests/test_repomix_manager.py function test_init (line 21) | def test_init(): function test_extract_directory_structure_xml (line 27) | def test_extract_directory_structure_xml(): function test_extract_directory_structure_file_not_found (line 67) | def test_extract_directory_structure_file_not_found(): function test_prepare_repository (line 85) | async def test_prepare_repository(mock_unlink, mock_touch, mock_is_dir, ... function test_prepare_repository_module_error (line 144) | async def test_prepare_repository_module_error(mock_processor): function test_prepare_repository_invalid_path (line 158) | async def test_prepare_repository_invalid_path(): FILE: src/code-doc-gen-mcp-server/tests/test_repomix_manager_scenarios.py function test_extract_statistics (line 24) | def test_extract_statistics(): function test_extract_statistics_file_not_found (line 58) | def test_extract_statistics_file_not_found(): function test_extract_statistics_invalid_xml (line 70) | def test_extract_statistics_invalid_xml(): function test_extract_statistics_no_statistics (line 91) | def test_extract_statistics_no_statistics(): function test_extract_directory_structure_nested_format (line 116) | def test_extract_directory_structure_nested_format(): function test_extract_directory_structure_invalid_xml (line 156) | def test_extract_directory_structure_invalid_xml(): function test_prepare_repository_with_ctx_info (line 183) | async def test_prepare_repository_with_ctx_info( function test_prepare_repository_output_dir_not_writable (line 240) | async def test_prepare_repository_output_dir_not_writable(mock_is_dir, m... function test_convert_repository_structure (line 257) | def test_convert_repository_structure(): FILE: src/code-doc-gen-mcp-server/tests/test_repomix_statistics.py function test_extract_statistics (line 23) | def test_extract_statistics(): function test_extract_statistics_file_not_found (line 57) | def test_extract_statistics_file_not_found(): function test_extract_statistics_invalid_values (line 69) | def test_extract_statistics_invalid_values(): function test_extract_statistics_empty_xml (line 100) | def test_extract_statistics_empty_xml(): function test_extract_statistics_no_statistics_element (line 121) | def test_extract_statistics_no_statistics_element(): function test_extract_statistics_parsing_error (line 146) | def test_extract_statistics_parsing_error(): function test_convert_repository_structure (line 168) | def test_convert_repository_structure(): function test_extract_directory_structure_additional_formats (line 203) | def test_extract_directory_structure_additional_formats(): FILE: src/code-doc-gen-mcp-server/tests/test_server.py function test_prepare_repository (line 38) | async def test_prepare_repository(mock_repomix_manager): function test_analyze_project_structure (line 76) | async def test_analyze_project_structure(): function test_create_documentation_context (line 97) | def test_create_documentation_context(): function test_create_context (line 124) | async def test_create_context(): function test_plan_documentation (line 162) | async def test_plan_documentation(mock_create_doc, mock_get_template): function test_generate_documentation (line 215) | async def test_generate_documentation(mock_doc_generator_class): FILE: src/code-doc-gen-mcp-server/tests/test_server_extended.py function test_analyze_project_structure_with_fallbacks (line 37) | async def test_analyze_project_structure_with_fallbacks(): function test_create_context_with_error_logging (line 75) | async def test_create_context_with_error_logging(mock_create_doc_ctx): function test_plan_documentation_with_infrastructure (line 101) | async def test_plan_documentation_with_infrastructure(mock_create_doc, m... function test_plan_documentation_error_handling (line 153) | async def test_plan_documentation_error_handling(): function test_generate_documentation_with_all_doc_types (line 183) | async def test_generate_documentation_with_all_doc_types(mock_doc_genera... function test_generate_documentation_error_handling (line 272) | async def test_generate_documentation_error_handling(mock_doc_generator_... function test_main_without_sse (line 326) | def test_main_without_sse(mock_mcp): FILE: src/code-doc-gen-mcp-server/tests/test_templates.py function test_get_template_for_file_direct_mapping (line 27) | def test_get_template_for_file_direct_mapping(): function test_get_template_for_file_derived_mapping (line 36) | def test_get_template_for_file_derived_mapping(): function test_get_template_for_file_unknown (line 51) | def test_get_template_for_file_unknown(): function test_template_file_mapping_consistency (line 57) | def test_template_file_mapping_consistency(): function test_create_doc_from_template (line 65) | def test_create_doc_from_template(): function test_create_doc_from_template_unknown (line 82) | def test_create_doc_from_template_unknown(): function test_document_templates_structure (line 88) | def test_document_templates_structure(): FILE: src/core-mcp-server/awslabs/core_mcp_server/server.py class ContentItem (line 42) | class ContentItem(TypedDict): class McpResponse (line 57) | class McpResponse(TypedDict, total=False): function get_prompt_understanding (line 87) | def get_prompt_understanding() -> str: function call_import_server (line 96) | async def call_import_server(server, prefix, server_name, imported_serve... function is_role_set (line 128) | def is_role_set(name: str) -> bool: function import_aws_knowledge_server (line 145) | async def import_aws_knowledge_server(imported_servers: set) -> set: function setup (line 176) | async def setup(): function main (line 559) | def main() -> None: FILE: src/core-mcp-server/tests/conftest.py class MockFunctionTool (line 22) | class MockFunctionTool: method __init__ (line 25) | def __init__(self, func): method run (line 29) | async def run(self, arguments=None): class MockFastMCP (line 42) | class MockFastMCP: method __init__ (line 45) | def __init__(self, description=None, dependencies=None, instructions=N... method tool (line 53) | def tool(self, name=None): method run (line 64) | def run(self): method import_server (line 68) | async def import_server(self, proxy, prefix=None): method as_proxy (line 75) | def as_proxy(client): function create_mock_server (line 81) | def create_mock_server(): function pytest_addoption (line 157) | def pytest_addoption(parser): function pytest_collection_modifyitems (line 167) | def pytest_collection_modifyitems(config, items): function mock_fastmcp (line 177) | def mock_fastmcp(): function mock_proxy_client (line 183) | def mock_proxy_client(): FILE: src/core-mcp-server/tests/test_init.py class TestInit (line 20) | class TestInit: method test_version (line 23) | def test_version(self): method test_module_reload (line 40) | def test_module_reload(self): FILE: src/core-mcp-server/tests/test_main.py class TestMain (line 20) | class TestMain: method mock_setup (line 24) | def mock_setup(self): method mock_mcp (line 30) | def mock_mcp(self): method test_main_default (line 35) | def test_main_default(self, mock_setup, mock_mcp): method test_module_execution (line 49) | def test_module_execution(self): FILE: src/core-mcp-server/tests/test_response_types.py class TestContentItem (line 23) | class TestContentItem: method test_content_item_structure (line 26) | def test_content_item_structure(self): method test_content_item_creation (line 39) | def test_content_item_creation(self): method test_content_item_missing_field (line 48) | def test_content_item_missing_field(self): class TestMcpResponse (line 58) | class TestMcpResponse: method test_mcp_response_structure (line 61) | def test_mcp_response_structure(self): method test_mcp_response_creation (line 77) | def test_mcp_response_creation(self): method test_mcp_response_without_is_error (line 91) | def test_mcp_response_without_is_error(self): method test_mcp_response_missing_content (line 104) | def test_mcp_response_missing_content(self): FILE: src/core-mcp-server/tests/test_server.py class MockFunctionTool (line 80) | class MockFunctionTool: method __init__ (line 87) | def __init__(self, func): method run (line 95) | async def run(self, arguments: dict = {}): class TestPromptUnderstanding (line 141) | class TestPromptUnderstanding: method test_get_prompt_understanding (line 145) | async def test_get_prompt_understanding(self): class TestSetup (line 152) | class TestSetup: method test_setup_role_variables (line 191) | async def test_setup_role_variables(self, monkeypatch, role_env_var, e... method test_setup_aws_foundation (line 235) | async def test_setup_aws_foundation(self): method test_setup_dev_tools (line 260) | async def test_setup_dev_tools(self): method test_setup_ci_cd_devops (line 284) | async def test_setup_ci_cd_devops(self): method test_setup_container_orchestration (line 308) | async def test_setup_container_orchestration(self): method test_setup_serverless_architecture (line 332) | async def test_setup_serverless_architecture(self): method test_setup_analytics_warehouse (line 356) | async def test_setup_analytics_warehouse(self): method test_setup_data_platform_eng (line 380) | async def test_setup_data_platform_eng(self): method test_setup_frontend_dev (line 404) | async def test_setup_frontend_dev(self): method test_setup_solutions_architect (line 428) | async def test_setup_solutions_architect(self): method test_setup_finops (line 453) | async def test_setup_finops(self): method test_setup_monitoring_observability (line 477) | async def test_setup_monitoring_observability(self): method test_setup_caching_performance (line 501) | async def test_setup_caching_performance(self): method test_setup_security_identity (line 525) | async def test_setup_security_identity(self): method test_setup_sql_db_specialist (line 549) | async def test_setup_sql_db_specialist(self): method test_setup_nosql_db_specialist (line 573) | async def test_setup_nosql_db_specialist(self): method test_setup_timeseries_db_specialist (line 597) | async def test_setup_timeseries_db_specialist(self): method test_setup_messaging_events (line 621) | async def test_setup_messaging_events(self): method test_setup_healthcare_lifesci (line 645) | async def test_setup_healthcare_lifesci(self): method test_setup_no_roles (line 669) | async def test_setup_no_roles(self): method test_setup_import_error (line 696) | async def test_setup_import_error(self): method test_setup_multiple_roles (line 720) | async def test_setup_multiple_roles(self): method test_setup_logging (line 745) | async def test_setup_logging(self): method test_setup_proxy_error (line 768) | async def test_setup_proxy_error(self): method test_setup_with_no_roles (line 789) | async def test_setup_with_no_roles(self): class TestCallImportServer (line 822) | class TestCallImportServer: method test_call_import_server (line 826) | async def test_call_import_server(self): method test_call_import_server_with_exception (line 863) | async def test_call_import_server_with_exception(self): method test_call_import_server_with_none_imported_servers (line 900) | async def test_call_import_server_with_none_imported_servers(self): method test_call_import_server_with_import_error (line 937) | async def test_call_import_server_with_import_error(self): method test_call_import_server_with_none_prefix (line 970) | async def test_call_import_server_with_none_prefix(self): class TestMainFunction (line 1000) | class TestMainFunction: method test_main_function (line 1003) | def test_main_function(self): method test_main_function_direct (line 1037) | def test_main_function_direct(self): function test_main_emits_deprecation_warning (line 1076) | def test_main_emits_deprecation_warning(): FILE: src/core-mcp-server/tests/test_static.py class TestStatic (line 20) | class TestStatic: method test_prompt_understanding_import (line 23) | def test_prompt_understanding_import(self): method test_prompt_understanding_content (line 37) | def test_prompt_understanding_content(self): method test_prompt_understanding_file_exists (line 50) | def test_prompt_understanding_file_exists(self): method test_prompt_understanding_file_content (line 60) | def test_prompt_understanding_file_content(self): FILE: src/cost-explorer-mcp-server/awslabs/cost_explorer_mcp_server/comparison_handler.py function _validate_comparison_inputs (line 48) | def _validate_comparison_inputs( function _build_api_params (line 124) | def _build_api_params( function get_cost_and_usage_comparisons (line 166) | async def get_cost_and_usage_comparisons( function get_cost_comparison_drivers (line 406) | async def get_cost_comparison_drivers( FILE: src/cost-explorer-mcp-server/awslabs/cost_explorer_mcp_server/cost_usage_handler.py function get_cost_and_usage (line 51) | async def get_cost_and_usage( FILE: src/cost-explorer-mcp-server/awslabs/cost_explorer_mcp_server/forecasting_handler.py function get_cost_forecast (line 45) | async def get_cost_forecast( FILE: src/cost-explorer-mcp-server/awslabs/cost_explorer_mcp_server/helpers.py function get_cost_explorer_client (line 46) | def get_cost_explorer_client(): function validate_dimension_key (line 75) | def validate_dimension_key(dimension_key: str) -> Dict[str, Any]: function get_available_dimension_values (line 95) | def get_available_dimension_values( function get_available_tag_values (line 125) | def get_available_tag_values( function validate_date_format (line 149) | def validate_date_format(date_str: str) -> Tuple[bool, str]: function format_date_for_api (line 170) | def format_date_for_api(date_str: str, granularity: str) -> str: function validate_date_range (line 190) | def validate_date_range( function validate_match_options (line 232) | def validate_match_options(match_options: list, filter_type: str) -> Dic... function validate_expression (line 256) | def validate_expression( function validate_group_by (line 401) | def validate_group_by(group_by: Optional[Dict[str, Any]]) -> Dict[str, A... function validate_forecast_date_range (line 440) | def validate_forecast_date_range( function validate_comparison_date_range (line 495) | def validate_comparison_date_range(start_date: str, end_date: str) -> Tu... function extract_group_key_from_complex_selector (line 584) | def extract_group_key_from_complex_selector( function extract_usage_context_from_selector (line 639) | def extract_usage_context_from_selector(selector: Dict[str, Any]) -> Dic... function create_detailed_group_key (line 689) | def create_detailed_group_key( FILE: src/cost-explorer-mcp-server/awslabs/cost_explorer_mcp_server/metadata_handler.py function get_dimension_values (line 38) | async def get_dimension_values( function get_tag_values (line 65) | async def get_tag_values( FILE: src/cost-explorer-mcp-server/awslabs/cost_explorer_mcp_server/models.py class DateRange (line 24) | class DateRange(BaseModel): method validate_individual_dates (line 34) | def validate_individual_dates(cls, v): method model_post_init (line 41) | def model_post_init(self, __context): method validate_with_granularity (line 47) | def validate_with_granularity(self, granularity: str): class DimensionKey (line 54) | class DimensionKey(BaseModel): method validate_dimension_key (line 63) | def validate_dimension_key(cls, v): FILE: src/cost-explorer-mcp-server/awslabs/cost_explorer_mcp_server/server.py function main (line 93) | def main(): FILE: src/cost-explorer-mcp-server/awslabs/cost_explorer_mcp_server/utility_handler.py function get_today_date (line 34) | async def get_today_date(ctx: Context) -> Dict[str, str]: FILE: src/cost-explorer-mcp-server/tests/conftest.py function reset_client_cache (line 22) | def reset_client_cache(): function mock_cost_explorer_client (line 34) | def mock_cost_explorer_client(): function mock_aws_environment (line 66) | def mock_aws_environment(): function mock_context (line 73) | def mock_context(): function sample_cost_explorer_response (line 80) | def sample_cost_explorer_response(): function sample_dimension_values_response (line 108) | def sample_dimension_values_response(): function sample_tag_values_response (line 124) | def sample_tag_values_response(): function sample_usage_quantity_response (line 130) | def sample_usage_quantity_response(): FILE: src/cost-explorer-mcp-server/tests/test_comparison_handler.py function valid_baseline_range (line 27) | def valid_baseline_range(): function valid_comparison_range (line 33) | def valid_comparison_range(): function mock_ce_client (line 39) | def mock_ce_client(): class TestCostComparisons (line 49) | class TestCostComparisons: method test_get_cost_comparisons_with_tag_selector (line 53) | async def test_get_cost_comparisons_with_tag_selector( method test_get_cost_comparisons_with_pagination (line 122) | async def test_get_cost_comparisons_with_pagination( method test_get_cost_comparisons_with_cost_category_selector (line 224) | async def test_get_cost_comparisons_with_cost_category_selector( method test_get_cost_comparisons_basic (line 293) | async def test_get_cost_comparisons_basic( method test_get_cost_comparisons_with_groups (line 361) | async def test_get_cost_comparisons_with_groups( method test_get_cost_comparisons_with_filter (line 447) | async def test_get_cost_comparisons_with_filter( method test_get_cost_comparisons_api_error (line 523) | async def test_get_cost_comparisons_api_error( method test_get_cost_comparisons_invalid_metric (line 559) | async def test_get_cost_comparisons_invalid_metric( method test_get_cost_comparisons_validation_error (line 586) | async def test_get_cost_comparisons_validation_error(self, mock_ce_cli... method test_get_cost_comparisons_with_zero_baseline (line 604) | async def test_get_cost_comparisons_with_zero_baseline( method test_get_cost_comparisons_without_total_cost_and_usage (line 678) | async def test_get_cost_comparisons_without_total_cost_and_usage( method test_get_cost_comparisons_with_zero_comparison (line 753) | async def test_get_cost_comparisons_with_zero_comparison( class TestCostDrivers (line 820) | class TestCostDrivers: method test_get_cost_drivers_with_tag_selector (line 824) | async def test_get_cost_drivers_with_tag_selector( method test_get_cost_drivers_with_cost_category_selector (line 930) | async def test_get_cost_drivers_with_cost_category_selector( method test_get_cost_drivers_with_zero_baseline (line 1005) | async def test_get_cost_drivers_with_zero_baseline( method test_get_cost_drivers_basic (line 1099) | async def test_get_cost_drivers_basic( method test_get_cost_drivers_with_pagination (line 1178) | async def test_get_cost_drivers_with_pagination( method test_get_cost_drivers_with_filter (line 1278) | async def test_get_cost_drivers_with_filter( method test_get_cost_drivers_api_error (line 1353) | async def test_get_cost_drivers_api_error( method test_get_cost_drivers_total_calculation (line 1389) | async def test_get_cost_drivers_total_calculation( method test_get_cost_drivers_validation_error (line 1492) | async def test_get_cost_drivers_validation_error(self, mock_ce_client): FILE: src/cost-explorer-mcp-server/tests/test_cost_usage_handler.py function valid_date_range (line 24) | def valid_date_range(): function mock_ce_client (line 30) | def mock_ce_client(): class TestCostAndUsage (line 40) | class TestCostAndUsage: method test_get_cost_and_usage_missing_amount (line 44) | async def test_get_cost_and_usage_missing_amount(self, mock_ce_client,... method test_get_cost_and_usage_missing_unit (line 86) | async def test_get_cost_and_usage_missing_unit(self, mock_ce_client, v... method test_get_cost_and_usage_monthly (line 132) | async def test_get_cost_and_usage_monthly(self, mock_ce_client, valid_... method test_get_cost_and_usage_daily (line 181) | async def test_get_cost_and_usage_daily(self, mock_ce_client, valid_da... method test_get_cost_and_usage_with_filter (line 228) | async def test_get_cost_and_usage_with_filter(self, mock_ce_client, va... method test_get_cost_and_usage_with_group_by (line 277) | async def test_get_cost_and_usage_with_group_by(self, mock_ce_client, ... method test_get_cost_and_usage_with_metrics (line 329) | async def test_get_cost_and_usage_with_metrics(self, mock_ce_client, v... method test_get_cost_and_usage_dataframe_processing (line 369) | async def test_get_cost_and_usage_dataframe_processing(self, mock_ce_c... method test_get_cost_and_usage_dataframe_error (line 454) | async def test_get_cost_and_usage_dataframe_error(self, mock_ce_client... method test_get_cost_and_usage_api_error (line 500) | async def test_get_cost_and_usage_api_error(self, mock_ce_client, vali... method test_get_cost_and_usage_validation_error (line 522) | async def test_get_cost_and_usage_validation_error(self, mock_ce_client): method test_get_cost_and_usage_with_hourly_granularity (line 545) | async def test_get_cost_and_usage_with_hourly_granularity(self, mock_c... method test_get_cost_and_usage_cost_metric_processing (line 584) | async def test_get_cost_and_usage_cost_metric_processing( method test_get_cost_and_usage_usage_metric_processing (line 647) | async def test_get_cost_and_usage_usage_metric_processing( method test_get_cost_and_usage_with_usage_quantity (line 708) | async def test_get_cost_and_usage_with_usage_quantity(self, mock_ce_cl... method test_get_cost_and_usage_empty_results (line 747) | async def test_get_cost_and_usage_empty_results(self, mock_ce_client): method test_get_cost_and_usage_invalid_metric (line 778) | async def test_get_cost_and_usage_invalid_metric(self, mock_ce_client): method test_get_cost_and_usage_date_validation_error (line 799) | async def test_get_cost_and_usage_date_validation_error(self, mock_ce_... method test_get_cost_and_usage_group_by_validation_error (line 821) | async def test_get_cost_and_usage_group_by_validation_error(self, mock... method test_get_cost_and_usage_filter_validation_error (line 848) | async def test_get_cost_and_usage_filter_validation_error(self, mock_c... method test_get_cost_and_usage_with_net_costs (line 875) | async def test_get_cost_and_usage_with_net_costs(self, mock_ce_client): method test_get_cost_and_usage_with_amortized_cost (line 914) | async def test_get_cost_and_usage_with_amortized_cost(self, mock_ce_cl... method test_get_cost_and_usage_json_serialization (line 953) | async def test_get_cost_and_usage_json_serialization(self, mock_ce_cli... method test_get_cost_and_usage_json_serialization_failure (line 996) | async def test_get_cost_and_usage_json_serialization_failure( method test_get_cost_and_usage_missing_metric_in_response (line 1041) | async def test_get_cost_and_usage_missing_metric_in_response( method test_get_cost_and_usage_metric_data_processing_error (line 1087) | async def test_get_cost_and_usage_metric_data_processing_error( method test_get_cost_and_usage_empty_keys (line 1133) | async def test_get_cost_and_usage_empty_keys(self, mock_ce_client, val... method test_get_cost_and_usage_json_serialization_fallback (line 1175) | async def test_get_cost_and_usage_json_serialization_fallback( method test_get_cost_and_usage_with_string_group_by (line 1224) | async def test_get_cost_and_usage_with_string_group_by(self, mock_ce_c... method test_get_cost_and_usage_client_exception (line 1264) | async def test_get_cost_and_usage_client_exception(self, mock_get_clie... FILE: src/cost-explorer-mcp-server/tests/test_forecasting_handler.py function future_date_range (line 25) | def future_date_range(): function mock_ce_client (line 34) | def mock_ce_client(): class TestCostForecast (line 44) | class TestCostForecast: method test_get_cost_forecast_monthly (line 48) | async def test_get_cost_forecast_monthly(self, mock_ce_client, future_... method test_get_cost_forecast_daily (line 100) | async def test_get_cost_forecast_daily(self, mock_ce_client, future_da... method test_get_cost_forecast_with_filter (line 136) | async def test_get_cost_forecast_with_filter(self, mock_ce_client, fut... method test_get_cost_forecast_with_metric (line 183) | async def test_get_cost_forecast_with_metric(self, mock_ce_client, fut... method test_get_cost_forecast_with_prediction_interval (line 212) | async def test_get_cost_forecast_with_prediction_interval( method test_get_cost_forecast_api_error (line 243) | async def test_get_cost_forecast_api_error(self, mock_ce_client, futur... method test_get_cost_forecast_validation_error (line 264) | async def test_get_cost_forecast_validation_error(self, mock_ce_client): method test_get_cost_forecast_with_blended_cost (line 286) | async def test_get_cost_forecast_with_blended_cost(self, mock_ce_clien... method test_get_cost_forecast_invalid_granularity (line 314) | async def test_get_cost_forecast_invalid_granularity(self, mock_ce_cli... method test_get_cost_forecast_invalid_prediction_interval (line 335) | async def test_get_cost_forecast_invalid_prediction_interval( method test_get_cost_forecast_invalid_metric (line 358) | async def test_get_cost_forecast_invalid_metric(self, mock_ce_client, ... method test_get_cost_forecast_filter_validation_error (line 379) | async def test_get_cost_forecast_filter_validation_error( method test_get_cost_forecast_api_exception (line 407) | async def test_get_cost_forecast_api_exception(self, mock_ce_client, f... method test_get_cost_forecast_error_logging (line 430) | async def test_get_cost_forecast_error_logging( method test_get_cost_forecast_client_creation_exception (line 461) | async def test_get_cost_forecast_client_creation_exception( FILE: src/cost-explorer-mcp-server/tests/test_helpers.py class TestGetCostExplorerClient (line 39) | class TestGetCostExplorerClient: method test_get_client_with_profile_and_region (line 44) | def test_get_client_with_profile_and_region(self, mock_env_get, mock_s... method test_get_client_without_profile (line 70) | def test_get_client_without_profile(self, mock_env_get, mock_session): method test_get_client_exception_handling (line 96) | def test_get_client_exception_handling(self, mock_session): class TestValidation (line 109) | class TestValidation: method test_validate_date_format_valid (line 112) | def test_validate_date_format_valid(self): method test_validate_date_format_invalid_format (line 117) | def test_validate_date_format_invalid_format(self): method test_validate_date_format_invalid_date (line 123) | def test_validate_date_format_invalid_date(self): method test_validate_date_range_valid (line 129) | def test_validate_date_range_valid(self): method test_validate_date_range_invalid_order (line 134) | def test_validate_date_range_invalid_order(self): method test_validate_date_range_with_granularity_hourly_valid (line 140) | def test_validate_date_range_with_granularity_hourly_valid(self): method test_validate_date_range_with_granularity_hourly_invalid (line 145) | def test_validate_date_range_with_granularity_hourly_invalid(self): method test_format_date_for_api_hourly (line 151) | def test_format_date_for_api_hourly(self): method test_format_date_for_api_daily (line 156) | def test_format_date_for_api_daily(self): method test_format_date_for_api_monthly (line 161) | def test_format_date_for_api_monthly(self): method test_validate_match_options_dimensions_valid (line 166) | def test_validate_match_options_dimensions_valid(self): method test_validate_match_options_dimensions_invalid (line 171) | def test_validate_match_options_dimensions_invalid(self): method test_validate_match_options_tags_valid (line 177) | def test_validate_match_options_tags_valid(self): method test_validate_match_options_unknown_type (line 182) | def test_validate_match_options_unknown_type(self): method test_validate_group_by_valid_dict (line 188) | def test_validate_group_by_valid_dict(self): method test_validate_group_by_invalid_type (line 194) | def test_validate_group_by_invalid_type(self): method test_validate_group_by_missing_keys (line 201) | def test_validate_group_by_missing_keys(self): method test_validate_group_by_none (line 207) | def test_validate_group_by_none(self): method test_validate_forecast_date_range_valid (line 213) | def test_validate_forecast_date_range_valid(self, mock_datetime): method test_validate_forecast_date_range_start_in_future (line 223) | def test_validate_forecast_date_range_start_in_future(self, mock_datet... method test_validate_forecast_date_range_end_in_past (line 234) | def test_validate_forecast_date_range_end_in_past(self, mock_datetime): method test_validate_forecast_date_range_daily_too_long (line 245) | def test_validate_forecast_date_range_daily_too_long(self, mock_dateti... method test_validate_comparison_date_range_valid (line 256) | def test_validate_comparison_date_range_valid(self, mock_datetime): method test_validate_comparison_date_range_not_first_day (line 266) | def test_validate_comparison_date_range_not_first_day(self, mock_datet... method test_validate_comparison_date_range_not_one_month (line 277) | def test_validate_comparison_date_range_not_one_month(self, mock_datet... method test_extract_group_key_from_complex_selector_simple (line 287) | def test_extract_group_key_from_complex_selector_simple(self): method test_extract_group_key_from_complex_selector_multiple (line 294) | def test_extract_group_key_from_complex_selector_multiple(self): method test_extract_group_key_from_complex_selector_empty (line 301) | def test_extract_group_key_from_complex_selector_empty(self): method test_extract_usage_context_from_selector (line 308) | def test_extract_usage_context_from_selector(self): method test_create_detailed_group_key (line 319) | def test_create_detailed_group_key(self): class TestValidateExpression (line 328) | class TestValidateExpression: method test_validate_expression_dimensions_valid (line 332) | def test_validate_expression_dimensions_valid(self, mock_get_values): method test_validate_expression_dimensions_invalid_value (line 344) | def test_validate_expression_dimensions_invalid_value(self, mock_get_v... method test_validate_expression_dimensions_missing_keys (line 356) | def test_validate_expression_dimensions_missing_keys(self): method test_validate_expression_tags_valid (line 370) | def test_validate_expression_tags_valid(self, mock_get_values): method test_validate_expression_cost_categories_valid (line 381) | def test_validate_expression_cost_categories_valid(self): method test_validate_expression_logical_and (line 394) | def test_validate_expression_logical_and(self): method test_validate_expression_logical_or (line 411) | def test_validate_expression_logical_or(self): method test_validate_expression_logical_not (line 428) | def test_validate_expression_logical_not(self): method test_validate_expression_multiple_logical_operators (line 443) | def test_validate_expression_multiple_logical_operators(self): method test_validate_expression_no_valid_keys (line 451) | def test_validate_expression_no_valid_keys(self): method test_validate_expression_exception_handling (line 459) | def test_validate_expression_exception_handling(self): class TestErrorHandling (line 471) | class TestErrorHandling: method test_get_available_dimension_values_client_error (line 475) | def test_get_available_dimension_values_client_error(self, mock_get_cl... method test_get_available_tag_values_client_error (line 485) | def test_get_available_tag_values_client_error(self, mock_get_client): method test_validate_expression_with_tags_error (line 494) | def test_validate_expression_with_tags_error(self): method test_validate_expression_with_dimensions_error (line 510) | def test_validate_expression_with_dimensions_error(self): method test_validate_expression_with_invalid_tag_values (line 526) | def test_validate_expression_with_invalid_tag_values(self): method test_validate_expression_tags_missing_values (line 543) | def test_validate_expression_tags_missing_values(self): method test_validate_expression_cost_categories_missing_values (line 558) | def test_validate_expression_cost_categories_missing_values(self): method test_validate_match_options_cost_categories_valid (line 573) | def test_validate_match_options_cost_categories_valid(self): method test_validate_match_options_cost_categories_invalid (line 578) | def test_validate_match_options_cost_categories_invalid(self): method test_extract_group_key_with_tags (line 584) | def test_extract_group_key_with_tags(self): method test_extract_group_key_with_cost_categories (line 591) | def test_extract_group_key_with_cost_categories(self): method test_extract_group_key_with_nested_and (line 598) | def test_extract_group_key_with_nested_and(self): method test_extract_group_key_with_nested_or (line 605) | def test_extract_group_key_with_nested_or(self): method test_extract_group_key_with_nested_not (line 612) | def test_extract_group_key_with_nested_not(self): method test_extract_usage_context_with_tags (line 619) | def test_extract_usage_context_with_tags(self): method test_create_detailed_group_key_with_context (line 629) | def test_create_detailed_group_key_with_context(self): class TestAdditionalCoverage (line 639) | class TestAdditionalCoverage: method test_get_available_dimension_values_empty_response (line 643) | def test_get_available_dimension_values_empty_response(self, mock_get_... method test_get_available_tag_values_empty_response (line 655) | def test_get_available_tag_values_empty_response(self, mock_get_client): method test_validate_group_by_invalid_dict_structure (line 666) | def test_validate_group_by_invalid_dict_structure(self): method test_validate_group_by_invalid_type_value (line 672) | def test_validate_group_by_invalid_type_value(self): method test_extract_group_key_with_empty_values (line 678) | def test_extract_group_key_with_empty_values(self): method test_extract_group_key_with_none_values (line 685) | def test_extract_group_key_with_none_values(self): method test_validate_forecast_date_range_monthly_too_long (line 693) | def test_validate_forecast_date_range_monthly_too_long(self, mock_date... method test_get_available_dimension_values_date_validation_error (line 704) | def test_get_available_dimension_values_date_validation_error(self, mo... method test_get_available_tag_values_date_validation_error (line 714) | def test_get_available_tag_values_date_validation_error(self, mock_val... method test_validate_date_format_invalid_format (line 723) | def test_validate_date_format_invalid_format(self): method test_validate_date_format_invalid_date (line 729) | def test_validate_date_format_invalid_date(self): method test_validate_date_range_start_after_end (line 735) | def test_validate_date_range_start_after_end(self): method test_validate_date_range_invalid_end_date_format (line 741) | def test_validate_date_range_invalid_end_date_format(self): method test_validate_expression_dimensions_match_options_error (line 747) | def test_validate_expression_dimensions_match_options_error(self): method test_validate_expression_dimensions_api_error (line 758) | def test_validate_expression_dimensions_api_error(self, mock_get_values): method test_validate_expression_tags_missing_match_options (line 770) | def test_validate_expression_tags_missing_match_options(self): method test_validate_date_range_invalid_start_date_format (line 784) | def test_validate_date_range_invalid_start_date_format(self): method test_validate_group_by_string_valid (line 790) | def test_validate_group_by_string_valid(self): method test_validate_group_by_string_invalid (line 795) | def test_validate_group_by_string_invalid(self): method test_validate_group_by_none_input (line 802) | def test_validate_group_by_none_input(self): method test_validate_group_by_missing_type (line 808) | def test_validate_group_by_missing_type(self): method test_validate_group_by_missing_key (line 814) | def test_validate_group_by_missing_key(self): class TestValidateMatchOptions (line 821) | class TestValidateMatchOptions: method test_validate_match_options_unknown_filter_type (line 824) | def test_validate_match_options_unknown_filter_type(self): method test_validate_match_options_invalid_option (line 833) | def test_validate_match_options_invalid_option(self): class TestExtractUsageContextFromSelector (line 843) | class TestExtractUsageContextFromSelector: method test_extract_usage_context_with_complex_nested_structure (line 846) | def test_extract_usage_context_with_complex_nested_structure(self): class TestCreateDetailedGroupKey (line 879) | class TestCreateDetailedGroupKey: method test_create_detailed_group_key_with_service_and_usage_type (line 882) | def test_create_detailed_group_key_with_service_and_usage_type(self): method test_create_detailed_group_key_without_usage_type (line 898) | def test_create_detailed_group_key_without_usage_type(self): method test_create_detailed_group_key_when_service_is_group_key (line 911) | def test_create_detailed_group_key_when_service_is_group_key(self): class TestExtractGroupKeyFromComplexSelector (line 928) | class TestExtractGroupKeyFromComplexSelector: method test_extract_group_key_from_dimension_selector (line 931) | def test_extract_group_key_from_dimension_selector(self): method test_extract_group_key_from_tag_selector (line 945) | def test_extract_group_key_from_tag_selector(self): method test_extract_group_key_from_cost_category_selector (line 957) | def test_extract_group_key_from_cost_category_selector(self): method test_extract_group_key_from_nested_selector (line 969) | def test_extract_group_key_from_nested_selector(self): method test_extract_group_key_with_empty_values (line 996) | def test_extract_group_key_with_empty_values(self): method test_extract_group_key_not_found (line 1008) | def test_extract_group_key_not_found(self): class TestValidateForecastDateRange (line 1021) | class TestValidateForecastDateRange: method test_validate_forecast_date_range_future_start_date (line 1025) | def test_validate_forecast_date_range_future_start_date(self, mock_dat... method test_validate_forecast_date_range_past_end_date (line 1048) | def test_validate_forecast_date_range_past_end_date(self, mock_datetime): method test_validate_forecast_date_range_daily_too_long (line 1068) | def test_validate_forecast_date_range_daily_too_long(self, mock_dateti... method test_validate_forecast_date_range_monthly_too_long (line 1088) | def test_validate_forecast_date_range_monthly_too_long(self, mock_date... class TestValidateComparisonDateRange (line 1110) | class TestValidateComparisonDateRange: method test_validate_comparison_date_range_not_first_day_of_month_start (line 1113) | def test_validate_comparison_date_range_not_first_day_of_month_start(s... method test_validate_comparison_date_range_not_first_day_of_month_end (line 1122) | def test_validate_comparison_date_range_not_first_day_of_month_end(self): method test_validate_comparison_date_range_not_exactly_one_month (line 1131) | def test_validate_comparison_date_range_not_exactly_one_month(self): method test_validate_comparison_date_range_current_month_january (line 1141) | def test_validate_comparison_date_range_current_month_january(self, mo... method test_validate_comparison_date_range_december_to_january_transition (line 1156) | def test_validate_comparison_date_range_december_to_january_transition... class TestValidateDimensionKey (line 1170) | class TestValidateDimensionKey: method test_validate_dimension_key_valid (line 1173) | def test_validate_dimension_key_valid(self): method test_validate_dimension_key_valid_lowercase (line 1178) | def test_validate_dimension_key_valid_lowercase(self): method test_validate_dimension_key_invalid (line 1183) | def test_validate_dimension_key_invalid(self): method test_validate_dimension_key_exception (line 1190) | def test_validate_dimension_key_exception(self): FILE: src/cost-explorer-mcp-server/tests/test_metadata_handler.py function mock_ce_client (line 28) | def mock_ce_client(): function valid_date_range (line 37) | def valid_date_range(): function valid_dimension (line 43) | def valid_dimension(): class TestDimensionValues (line 48) | class TestDimensionValues: method test_get_dimension_values_success (line 52) | async def test_get_dimension_values_success( method test_get_dimension_values_error (line 72) | async def test_get_dimension_values_error( class TestTagValues (line 85) | class TestTagValues: method test_get_tag_values_success (line 89) | async def test_get_tag_values_success(self, mock_ce_client, valid_date... method test_get_tag_values_error (line 100) | async def test_get_tag_values_error(self, mock_ce_client, valid_date_r... class TestImplementationFunctions (line 110) | class TestImplementationFunctions: method test_get_available_dimension_values_success (line 114) | def test_get_available_dimension_values_success(self, mock_get_client): method test_get_available_dimension_values_error (line 134) | def test_get_available_dimension_values_error(self, mock_get_client): method test_get_available_tag_values_success (line 147) | def test_get_available_tag_values_success(self, mock_get_client): method test_get_available_tag_values_error (line 162) | def test_get_available_tag_values_error(self, mock_get_client): method test_get_dimension_values_error (line 176) | async def test_get_dimension_values_error(self, mock_get_values): method test_get_tag_values_error (line 191) | async def test_get_tag_values_error(self, mock_get_values): method test_get_dimension_values_exception (line 205) | async def test_get_dimension_values_exception(self, mock_get_values): method test_get_tag_values_exception (line 220) | async def test_get_tag_values_exception(self, mock_get_values): FILE: src/cost-explorer-mcp-server/tests/test_models.py class TestDateRange (line 22) | class TestDateRange: method test_valid_date_range (line 25) | def test_valid_date_range(self): method test_invalid_start_date_format (line 31) | def test_invalid_start_date_format(self): method test_invalid_end_date_format (line 37) | def test_invalid_end_date_format(self): method test_start_date_after_end_date (line 43) | def test_start_date_after_end_date(self): method test_same_start_end_date (line 49) | def test_same_start_end_date(self): method test_future_dates (line 54) | def test_future_dates(self): class TestDimensionKey (line 61) | class TestDimensionKey: method test_valid_dimension_key (line 64) | def test_valid_dimension_key(self): method test_valid_dimension_keys (line 69) | def test_valid_dimension_keys(self): method test_lowercase_dimension_key (line 77) | def test_lowercase_dimension_key(self): method test_empty_dimension_key (line 82) | def test_empty_dimension_key(self): method test_none_dimension_key (line 89) | def test_none_dimension_key(self): method test_dimension_key_str_representation (line 95) | def test_dimension_key_str_representation(self): method test_dimension_key_repr_representation (line 101) | def test_dimension_key_repr_representation(self): method test_date_range_str_representation (line 108) | def test_date_range_str_representation(self): method test_date_range_repr_representation (line 115) | def test_date_range_repr_representation(self): method test_date_range_validate_with_granularity_valid (line 122) | def test_date_range_validate_with_granularity_valid(self): method test_date_range_validate_with_granularity_invalid (line 128) | def test_date_range_validate_with_granularity_invalid(self): FILE: src/cost-explorer-mcp-server/tests/test_server.py class TestServer (line 22) | class TestServer: method test_main_function (line 26) | def test_main_function(self, mock_app): method test_main_emits_deprecation_warning (line 34) | def test_main_emits_deprecation_warning(self, mock_app): method test_main_block_coverage (line 44) | def test_main_block_coverage(self): method test_server_module_import (line 56) | def test_server_module_import(self): method test_main_block_execution_coverage (line 66) | def test_main_block_execution_coverage(self, mock_main): FILE: src/cost-explorer-mcp-server/tests/test_utility_handler.py function test_get_today_date (line 24) | async def test_get_today_date(): function test_get_today_date_real (line 39) | async def test_get_today_date_real(): FILE: src/document-loader-mcp-server/awslabs/document_loader_mcp_server/server.py function _get_max_file_size (line 46) | def _get_max_file_size() -> int: function _get_base_directory (line 73) | def _get_base_directory() -> Path: function _get_soffice_timeout (line 100) | def _get_soffice_timeout() -> int: class DocumentReadResponse (line 144) | class DocumentReadResponse(BaseModel): class SlidesExtractionResponse (line 153) | class SlidesExtractionResponse(BaseModel): function _extract_pdf_text_sync (line 166) | def _extract_pdf_text_sync(file_path: str) -> str: function _convert_document_sync (line 178) | def _convert_document_sync(file_path: str) -> str: function _load_image_sync (line 185) | def _load_image_sync(file_path: str) -> Image: function _is_within_base_directory (line 190) | def _is_within_base_directory(resolved_path: Path) -> bool: function validate_output_dir (line 201) | def validate_output_dir(output_dir: str) -> Optional[str]: function validate_file_path (line 219) | def validate_file_path(ctx: Context, file_path: str) -> Optional[str]: function _convert_with_markitdown (line 271) | async def _convert_with_markitdown( function _read_pdf_content (line 318) | async def _read_pdf_content( function read_document (line 364) | async def read_document( function read_image (line 410) | async def read_image( function _find_soffice (line 455) | def _find_soffice() -> Optional[str]: function _check_soffice_available (line 470) | def _check_soffice_available() -> Optional[str]: function _convert_to_pdf_with_soffice (line 486) | def _convert_to_pdf_with_soffice( function _extract_slides_sync (line 514) | def _extract_slides_sync( function extract_slides_as_images (line 551) | async def extract_slides_as_images( function main (line 641) | def main(): FILE: src/document-loader-mcp-server/tests/test_document_parsing.py class MockContext (line 43) | class MockContext: method report_error (line 46) | def report_error(self, message: str, exception: Exception = None): method error (line 52) | async def error(self, message: str): function _read_pdf_helper (line 57) | async def _read_pdf_helper(file_path: str) -> DocumentReadResponse: function _read_docx_helper (line 97) | async def _read_docx_helper(file_path: str) -> DocumentReadResponse: function _read_xlsx_helper (line 103) | async def _read_xlsx_helper(file_path: str) -> DocumentReadResponse: function _read_pptx_helper (line 109) | async def _read_pptx_helper(file_path: str) -> DocumentReadResponse: function _read_image_helper (line 115) | async def _read_image_helper(file_path: str) -> Image: function document_generator (line 136) | def document_generator(): class DocumentTestGenerator (line 141) | class DocumentTestGenerator: method __init__ (line 144) | def __init__(self, output_dir: str = 'tests/sample_docs'): method generate_sample_pdf (line 153) | def generate_sample_pdf(self) -> str: method generate_sample_docx (line 210) | def generate_sample_docx(self) -> str: method generate_sample_xlsx (line 264) | def generate_sample_xlsx(self) -> str: method generate_sample_pptx (line 322) | def generate_sample_pptx(self) -> str: method generate_sample_image (line 393) | def generate_sample_image(self) -> str: function test_pdf_parsing (line 433) | async def test_pdf_parsing(document_generator): function test_docx_parsing (line 465) | async def test_docx_parsing(document_generator): function test_xlsx_parsing (line 499) | async def test_xlsx_parsing(document_generator): function test_pptx_parsing (line 533) | async def test_pptx_parsing(document_generator): function test_image_parsing (line 567) | async def test_image_parsing(document_generator): function test_security_validation (line 591) | async def test_security_validation(): function test_file_size_validation (line 638) | async def test_file_size_validation(): function test_sample_documents_exist (line 675) | def test_sample_documents_exist(document_generator): FILE: src/document-loader-mcp-server/tests/test_server.py function test_server (line 40) | async def test_server(): function call_mcp_tool (line 78) | async def call_mcp_tool(tool_name: str, file_path: str, file_type: str =... function test_mcp_tool_functions (line 105) | async def test_mcp_tool_functions(): function test_error_handling (line 184) | async def test_error_handling(): function test_exception_handling (line 276) | async def test_exception_handling(): function test_validate_file_path_resolve_exception (line 331) | async def test_validate_file_path_resolve_exception(): function test_validate_file_path_general_exception (line 376) | async def test_validate_file_path_general_exception(): function test_path_traversal_blocked (line 397) | async def test_path_traversal_blocked(): function test_convert_with_markitdown_file_not_found (line 425) | async def test_convert_with_markitdown_file_not_found(): function test_convert_with_markitdown_general_exception (line 455) | async def test_convert_with_markitdown_general_exception(): function test_read_pdf_content_file_not_found (line 486) | async def test_read_pdf_content_file_not_found(): function test_read_image_exception (line 512) | async def test_read_image_exception(): function test_convert_with_markitdown_timeout (line 534) | async def test_convert_with_markitdown_timeout(): function test_read_pdf_content_timeout (line 577) | async def test_read_pdf_content_timeout(): function test_read_image_timeout (line 616) | async def test_read_image_timeout(): function test_read_document_timeout_scenarios (line 650) | async def test_read_document_timeout_scenarios(): function test_get_max_file_size_default (line 709) | def test_get_max_file_size_default(): function test_get_max_file_size_custom (line 719) | def test_get_max_file_size_custom(): function test_get_max_file_size_invalid (line 729) | def test_get_max_file_size_invalid(): function test_get_max_file_size_negative (line 739) | def test_get_max_file_size_negative(): function test_get_max_file_size_zero (line 749) | def test_get_max_file_size_zero(): function test_check_soffice_available (line 759) | def test_check_soffice_available(): function test_check_soffice_not_available (line 768) | def test_check_soffice_not_available(): function test_find_soffice_in_path (line 778) | def test_find_soffice_in_path(): function test_find_soffice_macos_libreoffice (line 787) | def test_find_soffice_macos_libreoffice(): function test_find_soffice_macos_openoffice (line 802) | def test_find_soffice_macos_openoffice(): function test_find_soffice_not_found (line 817) | def test_find_soffice_not_found(): function test_extract_slides_soffice_missing (line 829) | async def test_extract_slides_soffice_missing(): function test_extract_slides_nonexistent_file (line 851) | async def test_extract_slides_nonexistent_file(): function test_extract_slides_timeout (line 861) | async def test_extract_slides_timeout(): function test_extract_slides_pdf_no_soffice_check (line 889) | async def test_extract_slides_pdf_no_soffice_check(): function call_mcp_tool_slides (line 903) | async def call_mcp_tool_slides( function test_get_base_directory_from_env (line 921) | def test_get_base_directory_from_env(): function test_get_soffice_timeout_default (line 931) | def test_get_soffice_timeout_default(): function test_get_soffice_timeout_custom (line 940) | def test_get_soffice_timeout_custom(): function test_get_soffice_timeout_invalid (line 948) | def test_get_soffice_timeout_invalid(): function test_get_soffice_timeout_out_of_range (line 956) | def test_get_soffice_timeout_out_of_range(): function test_validate_output_dir_within_base (line 964) | def test_validate_output_dir_within_base(): function test_validate_output_dir_outside_base (line 972) | def test_validate_output_dir_outside_base(): function test_convert_to_pdf_with_soffice_success (line 981) | def test_convert_to_pdf_with_soffice_success(): function test_convert_to_pdf_with_soffice_custom_timeout (line 1006) | def test_convert_to_pdf_with_soffice_custom_timeout(): function test_convert_to_pdf_with_soffice_not_found (line 1027) | def test_convert_to_pdf_with_soffice_not_found(): function test_convert_to_pdf_with_soffice_no_output (line 1036) | def test_convert_to_pdf_with_soffice_no_output(): function test_extract_slides_sync_pdf (line 1052) | def test_extract_slides_sync_pdf(): function test_extract_slides_sync_pptx (line 1073) | def test_extract_slides_sync_pptx(): function test_extract_slides_sync_unsupported (line 1097) | def test_extract_slides_sync_unsupported(): function test_extract_slides_success (line 1105) | async def test_extract_slides_success(): function test_extract_slides_general_exception (line 1138) | async def test_extract_slides_general_exception(): FILE: src/documentdb-mcp-server/awslabs/documentdb_mcp_server/analytic_tools.py function count_documents (line 23) | async def count_documents( function get_database_stats (line 68) | async def get_database_stats( function get_collection_stats (line 105) | async def get_collection_stats( function get_field_type (line 143) | def get_field_type(docs, path): function analyze_schema (line 198) | async def analyze_schema( function explain_operation (line 295) | async def explain_operation( FILE: src/documentdb-mcp-server/awslabs/documentdb_mcp_server/config.py class ServerConfig (line 18) | class ServerConfig: method __init__ (line 24) | def __init__(self): FILE: src/documentdb-mcp-server/awslabs/documentdb_mcp_server/connection_tools.py class ConnectionInfo (line 27) | class ConnectionInfo: method __init__ (line 30) | def __init__(self, connection_string: str, client: MongoClient): class DocumentDBConnection (line 43) | class DocumentDBConnection: method create_connection (line 53) | def create_connection(cls, connection_string: str) -> ConnectionInfo: method get_connection (line 82) | def get_connection(cls, connection_id: str) -> MongoClient: method close_connection (line 104) | def close_connection(cls, connection_id: str) -> None: method close_idle_connections (line 122) | def close_idle_connections(cls) -> None: method close_all_connections (line 139) | def close_all_connections(cls) -> None: method validate_retry_writes_false (line 147) | def validate_retry_writes_false(conn_str: str) -> None: function connect (line 171) | async def connect( function disconnect (line 206) | async def disconnect( FILE: src/documentdb-mcp-server/awslabs/documentdb_mcp_server/db_management_tools.py function list_databases (line 24) | async def list_databases( function create_collection (line 49) | async def create_collection( function list_collections (line 99) | async def list_collections( function drop_collection (line 131) | async def drop_collection( FILE: src/documentdb-mcp-server/awslabs/documentdb_mcp_server/query_tools.py function find (line 23) | async def find( function aggregate (line 75) | async def aggregate( FILE: src/documentdb-mcp-server/awslabs/documentdb_mcp_server/server.py function main (line 93) | def main(): FILE: src/documentdb-mcp-server/awslabs/documentdb_mcp_server/write_tools.py function insert (line 24) | async def insert( function update (line 78) | async def update( function delete (line 157) | async def delete( FILE: src/documentdb-mcp-server/tests/conftest.py class MockCollection (line 36) | class MockCollection: method __init__ (line 39) | def __init__(self, name: str, mock_data: Optional[List[Dict[str, Any]]... method find (line 50) | def find(self, query=None, projection=None): method _apply_filter (line 94) | def _apply_filter(self, query): method _apply_logical_operator (line 126) | def _apply_logical_operator(self, doc, operator, criteria): method _match_subdocument (line 134) | def _match_subdocument(self, doc, query): method _apply_comparison_operators (line 144) | def _apply_comparison_operators(self, doc, field, criteria): method find_one (line 173) | def find_one(self, query=None, projection=None): method insert_one (line 189) | def insert_one(self, document): method insert_many (line 206) | def insert_many(self, documents): method update_one (line 226) | def update_one(self, filter, update, upsert=False): method update_many (line 288) | def update_many(self, filter, update, upsert=False): method delete_one (line 345) | def delete_one(self, filter): method delete_many (line 372) | def delete_many(self, filter): method replace_one (line 399) | def replace_one(self, filter, replacement, upsert=False): method aggregate (line 452) | def aggregate(self, pipeline, explain=False): method _process_group_stage (line 494) | def _process_group_stage(self, group_spec, documents): method _process_project_stage (line 559) | def _process_project_stage(self, project_spec, documents): method _process_sort_stage (line 573) | def _process_sort_stage(self, sort_spec, documents): method count_documents (line 589) | def count_documents(self, filter=None): class MockDatabase (line 603) | class MockDatabase: method __init__ (line 606) | def __init__(self, name: str): method __getitem__ (line 615) | def __getitem__(self, collection_name): method list_collection_names (line 628) | def list_collection_names(self): method create_collection (line 636) | def create_collection(self, name): method drop_collection (line 645) | def drop_collection(self, name): method command (line 654) | def command(self, command_name, *args, **kwargs): class MockDocumentDBClient (line 735) | class MockDocumentDBClient: method __init__ (line 738) | def __init__(self, connection_string: str, raise_on_connect: Optional[... method __getitem__ (line 750) | def __getitem__(self, db_name): method list_database_names (line 763) | def list_database_names(self): method close (line 777) | def close(self): class MockContext (line 783) | class MockContext: method error (line 786) | def error(self, message): function mock_documentdb_client (line 799) | def mock_documentdb_client(): function patch_client (line 815) | def patch_client(monkeypatch): function mock_ctx (line 859) | def mock_ctx(): class MockAdminDatabase (line 868) | class MockAdminDatabase: method __init__ (line 871) | def __init__(self, client, raise_on_connect=None): method command (line 881) | def command(self, command_name, *args, **kwargs): class MockCursor (line 904) | class MockCursor: method __init__ (line 907) | def __init__(self, data): method __iter__ (line 917) | def __iter__(self): method __next__ (line 925) | def __next__(self): method limit (line 944) | def limit(self, limit_value): method explain (line 957) | def explain(self, verbosity='queryPlanner'): FILE: src/documentdb-mcp-server/tests/test_analytic_tools.py class TestCountDocumentsTool (line 30) | class TestCountDocumentsTool: method test_count_documents_success (line 34) | async def test_count_documents_success(self, mock_ctx, patch_client): method test_count_documents_with_filter (line 63) | async def test_count_documents_with_filter(self, mock_ctx, patch_client): method test_count_documents_connection_not_found (line 93) | async def test_count_documents_connection_not_found(self, mock_ctx): method test_count_documents_handles_generic_exception (line 100) | async def test_count_documents_handles_generic_exception( class TestGetDatabaseStatsTool (line 121) | class TestGetDatabaseStatsTool: method test_get_database_stats_success (line 125) | async def test_get_database_stats_success(self, mock_ctx, patch_client): method test_get_database_stats_connection_not_found (line 152) | async def test_get_database_stats_connection_not_found(self, mock_ctx): method test_get_database_stats_handles_generic_exception (line 159) | async def test_get_database_stats_handles_generic_exception( class TestGetCollectionStatsTool (line 180) | class TestGetCollectionStatsTool: method test_get_collection_stats_success (line 184) | async def test_get_collection_stats_success(self, mock_ctx, patch_clie... method test_get_collection_stats_connection_not_found (line 211) | async def test_get_collection_stats_connection_not_found(self, mock_ctx): method test_get_collection_stats_handles_generic_exception (line 218) | async def test_get_collection_stats_handles_generic_exception( class TestAnalyzeSchemaTool (line 239) | class TestAnalyzeSchemaTool: method test_analyze_schema_success (line 243) | async def test_analyze_schema_success(self, mock_ctx, patch_client): method test_analyze_schema_empty_collection (line 285) | async def test_analyze_schema_empty_collection(self, mock_ctx, patch_c... method test_analyze_schema_connection_not_found (line 304) | async def test_analyze_schema_connection_not_found(self, mock_ctx): method test_analyze_schema_handles_generic_exception (line 311) | async def test_analyze_schema_handles_generic_exception( class TestExplainOperationTool (line 332) | class TestExplainOperationTool: method test_explain_find_operation (line 336) | async def test_explain_find_operation(self, mock_ctx, patch_client): method test_explain_aggregate_operation (line 370) | async def test_explain_aggregate_operation(self, mock_ctx, patch_client): method test_explain_operation_invalid_type (line 412) | async def test_explain_operation_invalid_type(self, mock_ctx, patch_cl... method test_explain_operation_missing_pipeline (line 434) | async def test_explain_operation_missing_pipeline(self, mock_ctx, patc... method test_explain_operation_connection_not_found (line 456) | async def test_explain_operation_connection_not_found(self, mock_ctx): class TestHelperFunctions (line 465) | class TestHelperFunctions: method test_get_field_type_number (line 468) | def test_get_field_type_number(self): method test_get_field_type_string (line 475) | def test_get_field_type_string(self): method test_get_field_type_boolean (line 482) | def test_get_field_type_boolean(self): method test_get_field_type_list (line 489) | def test_get_field_type_list(self): method test_get_field_type_nested_object (line 496) | def test_get_field_type_nested_object(self): method test_get_field_type_mixed_types (line 503) | def test_get_field_type_mixed_types(self): method test_get_field_type_missing_field (line 513) | def test_get_field_type_missing_field(self): FILE: src/documentdb-mcp-server/tests/test_connection_tools.py class TestDocumentDBConnection (line 27) | class TestDocumentDBConnection: method test_create_connection (line 30) | def test_create_connection(self, patch_client): method test_create_connection_failure (line 48) | def test_create_connection_failure(self, patch_client): method test_get_connection (line 59) | def test_get_connection(self, patch_client): method test_get_connection_not_found (line 75) | def test_get_connection_not_found(self): method test_close_connection (line 81) | def test_close_connection(self, patch_client): method test_close_connection_not_found (line 96) | def test_close_connection_not_found(self): method test_close_idle_connections (line 102) | def test_close_idle_connections(self, patch_client): method test_close_all_connections (line 123) | def test_close_all_connections(self, patch_client): class TestConnectTool (line 141) | class TestConnectTool: method test_connect_success (line 145) | async def test_connect_success(self, mock_ctx, patch_client): method test_connect_failure (line 167) | async def test_connect_failure(self, mock_ctx, patch_client): method test_connect_handles_generic_exception (line 177) | async def test_connect_handles_generic_exception(self, mock_ctx, monke... class TestDisconnectTool (line 194) | class TestDisconnectTool: method test_disconnect_success (line 198) | async def test_disconnect_success(self, mock_ctx, patch_client): method test_disconnect_not_found (line 216) | async def test_disconnect_not_found(self, mock_ctx): method test_disconnect_handles_generic_exception (line 223) | async def test_disconnect_handles_generic_exception(self, mock_ctx, mo... FILE: src/documentdb-mcp-server/tests/test_db_management_tools.py class TestListDatabasesTool (line 28) | class TestListDatabasesTool: method test_list_databases_success (line 32) | async def test_list_databases_success(self, mock_ctx, patch_client): method test_list_databases_connection_not_found (line 57) | async def test_list_databases_connection_not_found(self, mock_ctx): method test_list_databases_handles_generic_exception (line 64) | async def test_list_databases_handles_generic_exception( class TestCreateCollectionTool (line 87) | class TestCreateCollectionTool: method test_create_collection_read_only_mode (line 91) | async def test_create_collection_read_only_mode(self, mock_ctx, patch_... method test_create_collection_success (line 109) | async def test_create_collection_success(self, mock_ctx, patch_client,... method test_create_existing_collection (line 132) | async def test_create_existing_collection(self, mock_ctx, patch_client... method test_create_collection_connection_not_found (line 154) | async def test_create_collection_connection_not_found(self, mock_ctx, ... method test_create_collection_handles_generic_exception (line 164) | async def test_create_collection_handles_generic_exception( class TestListCollectionsTool (line 187) | class TestListCollectionsTool: method test_list_collections_success (line 191) | async def test_list_collections_success(self, mock_ctx, patch_client): method test_list_collections_connection_not_found (line 213) | async def test_list_collections_connection_not_found(self, mock_ctx): method test_list_collections_handles_generic_exception (line 220) | async def test_list_collections_handles_generic_exception( class TestDropCollectionTool (line 243) | class TestDropCollectionTool: method test_drop_collection_read_only_mode (line 247) | async def test_drop_collection_read_only_mode(self, mock_ctx, patch_cl... method test_drop_collection_success (line 268) | async def test_drop_collection_success(self, mock_ctx, patch_client, m... method test_drop_nonexistent_collection (line 298) | async def test_drop_nonexistent_collection(self, mock_ctx, patch_clien... method test_drop_collection_connection_not_found (line 317) | async def test_drop_collection_connection_not_found(self, mock_ctx, mo... method test_drop_collection_handles_generic_exception (line 327) | async def test_drop_collection_handles_generic_exception( FILE: src/documentdb-mcp-server/tests/test_init.py class TestInit (line 20) | class TestInit: method test_version (line 23) | def test_version(self): method test_module_reload (line 40) | def test_module_reload(self): FILE: src/documentdb-mcp-server/tests/test_main.py class TestMain (line 20) | class TestMain: method test_main_default (line 25) | def test_main_default(self, mock_run): method test_module_execution (line 33) | def test_module_execution(self): FILE: src/documentdb-mcp-server/tests/test_query_tools.py class TestFindTool (line 26) | class TestFindTool: method test_find_success (line 30) | async def test_find_success(self, mock_ctx, patch_client): method test_find_with_projection (line 64) | async def test_find_with_projection(self, mock_ctx, patch_client): method test_find_with_limit (line 102) | async def test_find_with_limit(self, mock_ctx, patch_client): method test_find_connection_not_found (line 138) | async def test_find_connection_not_found(self, mock_ctx): method test_find_handles_generic_exception (line 145) | async def test_find_handles_generic_exception(self, mock_ctx, patch_cl... class TestAggregateTool (line 164) | class TestAggregateTool: method test_aggregate_success (line 168) | async def test_aggregate_success(self, mock_ctx, patch_client): method test_aggregate_with_limit (line 214) | async def test_aggregate_with_limit(self, mock_ctx, patch_client): method test_aggregate_with_limit_in_pipeline (line 251) | async def test_aggregate_with_limit_in_pipeline(self, mock_ctx, patch_... method test_aggregate_connection_not_found (line 288) | async def test_aggregate_connection_not_found(self, mock_ctx): method test_aggregate_handles_generic_exception (line 296) | async def test_aggregate_handles_generic_exception(self, mock_ctx, pat... FILE: src/documentdb-mcp-server/tests/test_write_tools.py class TestInsertTool (line 22) | class TestInsertTool: method test_insert_single_document_read_only_mode (line 26) | async def test_insert_single_document_read_only_mode( method test_insert_multiple_documents_read_only_mode (line 49) | async def test_insert_multiple_documents_read_only_mode( method test_insert_single_document_success (line 72) | async def test_insert_single_document_success(self, mock_ctx, patch_cl... method test_insert_multiple_documents_success (line 96) | async def test_insert_multiple_documents_success(self, mock_ctx, patch... method test_insert_connection_not_found (line 121) | async def test_insert_connection_not_found(self, mock_ctx, monkeypatch): method test_insert_handles_generic_exception (line 134) | async def test_insert_handles_generic_exception(self, mock_ctx, patch_... class TestUpdateTool (line 161) | class TestUpdateTool: method test_update_single_document_read_only_mode (line 165) | async def test_update_single_document_read_only_mode( method test_update_single_document_success (line 189) | async def test_update_single_document_success(self, mock_ctx, patch_cl... method test_update_multiple_documents_success (line 218) | async def test_update_multiple_documents_success(self, mock_ctx, patch... method test_update_with_upsert (line 253) | async def test_update_with_upsert(self, mock_ctx, patch_client, monkey... method test_update_ensure_operators (line 279) | async def test_update_ensure_operators(self, mock_ctx, patch_client, m... method test_update_connection_not_found (line 307) | async def test_update_connection_not_found(self, mock_ctx, monkeypatch): method test_update_handles_generic_exception (line 321) | async def test_update_handles_generic_exception(self, mock_ctx, patch_... class TestDeleteTool (line 349) | class TestDeleteTool: method test_delete_single_document_read_only_mode (line 353) | async def test_delete_single_document_read_only_mode( method test_delete_single_document_success (line 376) | async def test_delete_single_document_success(self, mock_ctx, patch_cl... method test_delete_multiple_documents_success (line 402) | async def test_delete_multiple_documents_success(self, mock_ctx, patch... method test_delete_connection_not_found (line 432) | async def test_delete_connection_not_found(self, mock_ctx, monkeypatch): method test_delete_handles_generic_exception (line 445) | async def test_delete_handles_generic_exception(self, mock_ctx, patch_... FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/cdk_generator/generator.py class CdkGeneratorError (line 33) | class CdkGeneratorError(Exception): class CdkGenerator (line 39) | class CdkGenerator: method __init__ (line 42) | def __init__(self): method generate (line 57) | def generate(self, json_file_path: Path) -> None: method _run_cdk_init (line 101) | def _run_cdk_init(self, target_dir: Path) -> None: method _parse_data_model (line 137) | def _parse_data_model(self, json_file_path: Path) -> DataModel: method _to_camel_case (line 163) | def _to_camel_case(self, table_name: str) -> str: method _to_pascal_case (line 185) | def _to_pascal_case(self, table_name: str) -> str: method _check_table_name_collisions (line 197) | def _check_table_name_collisions(self, data_model: DataModel) -> None: method _render_template (line 216) | def _render_template(self, data_model: DataModel, target_dir: Path) ->... method _copy_readme_template (line 255) | def _copy_readme_template(self, target_dir: Path) -> None: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/cdk_generator/models.py class KeyAttribute (line 28) | class KeyAttribute: method to_cdk_type (line 34) | def to_cdk_type(self) -> str: class GlobalSecondaryIndex (line 50) | class GlobalSecondaryIndex: method has_multi_partition_keys (line 59) | def has_multi_partition_keys(self) -> bool: method has_multi_sort_keys (line 63) | def has_multi_sort_keys(self) -> bool: class TableDefinition (line 69) | class TableDefinition: class DataModel (line 80) | class DataModel: method _validate_is_object (line 86) | def _validate_is_object(data, context: str) -> None: method _validate_string_field (line 100) | def _validate_string_field(data: dict, field_name: str, context: str) ... method _validate_array_field (line 121) | def _validate_array_field(data: dict, field_name: str, context: str) -... method from_json (line 142) | def from_json(cls, data: dict) -> 'DataModel': method _parse_attribute_definitions (line 173) | def _parse_attribute_definitions(cls, attr_definitions: list, context:... method _parse_key_schema (line 206) | def _parse_key_schema(cls, key_schema: list, attr_types: dict, context... method _parse_ttl_specification (line 261) | def _parse_ttl_specification(cls, ttl_data: dict, context: str) -> Opt... method _parse_table (line 290) | def _parse_table(cls, table_data: dict, table_index: int) -> TableDefi... method _parse_gsi_key_schema (line 340) | def _parse_gsi_key_schema(cls, key_schema: list, attr_types: dict, con... method _parse_gsi_projection (line 400) | def _parse_gsi_projection(cls, projection: dict, context: str) -> tuple: method _parse_gsi (line 455) | def _parse_gsi( method validate (line 494) | def validate(self) -> None: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/common.py function validate_database_name (line 25) | def validate_database_name(database_name: str) -> None: function validate_path_within_directory (line 51) | def validate_path_within_directory( function handle_exceptions (line 78) | def handle_exceptions(func: Callable) -> Callable: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/cost_performance_calculator/calculator_runner.py function run_cost_calculator (line 30) | def run_cost_calculator(data_model: DataModel, workspace_dir: str) -> str: function _replace_or_append_report (line 52) | def _replace_or_append_report(report: str, workspace_dir: str) -> None: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/cost_performance_calculator/cost_calculator.py function calculate_cost (line 35) | def calculate_cost(input_data: DataModel) -> CostModel: function _calculate_access_pattern (line 52) | def _calculate_access_pattern(ap, table_map) -> AccessPatternResult: function _calculate_gsi_write_amplification (line 75) | def _calculate_gsi_write_amplification(ap, table) -> list[GSIWriteAmplif... function _calculate_table_storage (line 86) | def _calculate_table_storage(table) -> TableResult: function _calculate_gsi_storage (line 93) | def _calculate_gsi_storage(gsi, table_name: str) -> GSIResult: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/cost_performance_calculator/cost_model.py class GSIWriteAmplification (line 21) | class GSIWriteAmplification(BaseModel): class AccessPatternResult (line 29) | class AccessPatternResult(BaseModel): class TableResult (line 44) | class TableResult(BaseModel): class GSIResult (line 56) | class GSIResult(BaseModel): class CostModel (line 68) | class CostModel(BaseModel): FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/cost_performance_calculator/data_model.py class StorageEntity (line 61) | class StorageEntity(BaseModel): method storage_gb (line 68) | def storage_gb(self) -> float: class GSI (line 73) | class GSI(StorageEntity): method write_wcus (line 76) | def write_wcus(self) -> float: class Table (line 81) | class Table(StorageEntity): method _validate_gsi_list_unique_names (line 88) | def _validate_gsi_list_unique_names(cls, v: List[GSI]) -> List[GSI]: method _validate_gsi_sizes (line 98) | def _validate_gsi_sizes(self) -> 'Table': class AccessPatternCommon (line 110) | class AccessPatternCommon(BaseModel): class GsiMixin (line 120) | class GsiMixin(BaseModel): class StronglyConsistentMixin (line 126) | class StronglyConsistentMixin(BaseModel): method consistency_multiplier (line 131) | def consistency_multiplier(self) -> float: class ItemCountMixin (line 136) | class ItemCountMixin(BaseModel): class GsiListMixin (line 142) | class GsiListMixin(BaseModel): method _validate_gsi_list (line 149) | def _validate_gsi_list(cls, v: List[str]) -> List[str]: method calculate_gsi_wcus (line 161) | def calculate_gsi_wcus(self, table) -> List[tuple[str, float]]: class ReadMixin (line 187) | class ReadMixin(AccessPatternCommon, StronglyConsistentMixin): class SearchMixin (line 191) | class SearchMixin(ReadMixin, ItemCountMixin, GsiMixin): method _validate_gsi_consistency (line 195) | def _validate_gsi_consistency(self) -> Self: method calculate_rcus (line 204) | def calculate_rcus(self) -> float: class WriteMixin (line 210) | class WriteMixin(AccessPatternCommon, GsiListMixin): method calculate_wcus (line 213) | def calculate_wcus(self) -> float: class GetItemAccessPattern (line 218) | class GetItemAccessPattern(ReadMixin): method calculate_rcus (line 223) | def calculate_rcus(self) -> float: class QueryAccessPattern (line 228) | class QueryAccessPattern(SearchMixin): class ScanAccessPattern (line 234) | class ScanAccessPattern(SearchMixin): class PutItemAccessPattern (line 240) | class PutItemAccessPattern(WriteMixin): class UpdateItemAccessPattern (line 246) | class UpdateItemAccessPattern(WriteMixin): class DeleteItemAccessPattern (line 252) | class DeleteItemAccessPattern(WriteMixin): class BatchGetItemAccessPattern (line 258) | class BatchGetItemAccessPattern(ReadMixin, ItemCountMixin): method _validate_item_count_max (line 265) | def _validate_item_count_max(cls, v: int) -> int: method calculate_rcus (line 271) | def calculate_rcus(self) -> float: class BatchWriteItemAccessPattern (line 277) | class BatchWriteItemAccessPattern(WriteMixin, ItemCountMixin): method _validate_item_count_max (line 284) | def _validate_item_count_max(cls, v: int) -> int: method calculate_wcus (line 290) | def calculate_wcus(self) -> float: class TransactGetItemsAccessPattern (line 296) | class TransactGetItemsAccessPattern(AccessPatternCommon, ItemCountMixin): method _validate_item_count_max (line 303) | def _validate_item_count_max(cls, v: int) -> int: method calculate_rcus (line 309) | def calculate_rcus(self) -> float: class TransactWriteItemsAccessPattern (line 315) | class TransactWriteItemsAccessPattern(AccessPatternCommon, ItemCountMixi... method _validate_item_count_max (line 322) | def _validate_item_count_max(cls, v: int) -> int: method calculate_wcus (line 328) | def calculate_wcus(self) -> float: class DataModel (line 351) | class DataModel(BaseModel): method _validate_access_pattern_list_non_empty (line 359) | def _validate_access_pattern_list_non_empty( method _validate_cross_references (line 368) | def _validate_cross_references(self) -> 'DataModel': method _validate_unique_table_names (line 375) | def _validate_unique_table_names(self) -> None: method _validate_access_patterns (line 384) | def _validate_access_patterns(self, table_map: dict) -> None: method _validate_access_pattern_table_exists (line 393) | def _validate_access_pattern_table_exists(self, ap, table_map: dict) -... method _validate_access_pattern_gsi_references (line 398) | def _validate_access_pattern_gsi_references(self, ap, gsi_names: set) ... method _validate_access_pattern_item_size (line 409) | def _validate_access_pattern_item_size(self, ap, table, gsi_names: set... function _format_location (line 435) | def _format_location(loc: tuple) -> str: function _customize_error_message (line 451) | def _customize_error_message(error: dict) -> str: function format_validation_errors (line 473) | def format_validation_errors(e: ValidationError) -> str: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/cost_performance_calculator/report_generator.py function _format_cost (line 49) | def _format_cost(cost: float) -> str: function _compute_col_widths (line 54) | def _compute_col_widths(headers: list[str], rows: list[list[str]]) -> li... function _build_padded_row (line 64) | def _build_padded_row(cells: list[str], col_widths: list[int]) -> str: function _generate_padded_table (line 70) | def _generate_padded_table(headers: list[str], rows: list[list[str]]) ->... function generate_report (line 83) | def generate_report(data_model: DataModel, cost_model: CostModel) -> str: function _build_ap_row (line 125) | def _build_ap_row(result: AccessPatternResult, ap: AccessPattern) -> lis... function _find_ap_for_table (line 137) | def _find_ap_for_table( function _collect_base_table_rows (line 149) | def _collect_base_table_rows( function _collect_gsi_read_rows (line 169) | def _collect_gsi_read_rows( function _collect_gsi_write_amp_rows (line 194) | def _collect_gsi_write_amp_rows( function _generate_total_summary (line 222) | def _generate_total_summary(total: float, storage_cost: float, rw_cost: ... function _build_storage_rows (line 239) | def _build_storage_rows(cost_model: CostModel) -> tuple[float, list[list... function _generate_storage_section (line 272) | def _generate_storage_section(rows: list[list[str]], total_cost: float) ... function _compute_rw_summary (line 287) | def _compute_rw_summary( function _generate_rw_section (line 319) | def _generate_rw_section( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/db_analyzer/analyzer_utils.py function resolve_and_validate_path (line 30) | def resolve_and_validate_path(file_path: str, base_dir: str, path_type: ... function build_connection_params (line 42) | def build_connection_params(source_db_type: str, **kwargs) -> Dict[str, ... function validate_connection_params (line 102) | def validate_connection_params( function save_analysis_files (line 151) | def save_analysis_files( function generate_query_file (line 233) | def generate_query_file( function parse_results_and_generate_analysis (line 275) | def parse_results_and_generate_analysis( function execute_managed_analysis (line 314) | async def execute_managed_analysis(plugin, connection_params: dict, sour... function build_analysis_report (line 343) | def build_analysis_report( function build_failure_report (line 390) | def build_failure_report(errors: list) -> str: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/db_analyzer/base_plugin.py class DatabasePlugin (line 26) | class DatabasePlugin(ABC): method get_queries (line 30) | def get_queries(self) -> Dict[str, Any]: method get_database_display_name (line 39) | def get_database_display_name(self) -> str: method apply_result_limit (line 47) | def apply_result_limit(self, sql: str, max_results: int) -> str: method write_queries_to_file (line 63) | def write_queries_to_file( method parse_results_from_file (line 137) | def parse_results_from_file(self, result_file_path: str) -> Dict[str, ... method execute_managed_mode (line 306) | async def execute_managed_mode(self, connection_params: Dict[str, Any]... method get_queries_by_category (line 317) | def get_queries_by_category(self, category: str) -> list[str]: method get_query_descriptions (line 333) | def get_query_descriptions(self) -> Dict[str, str]: method get_schema_queries (line 349) | def get_schema_queries(self) -> list[str]: method get_performance_queries (line 353) | def get_performance_queries(self) -> list[str]: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/db_analyzer/mysql.py class MySQLPlugin (line 293) | class MySQLPlugin(DatabasePlugin): method get_queries (line 296) | def get_queries(self) -> Dict[str, Any]: method get_database_display_name (line 300) | def get_database_display_name(self) -> str: method _execute_query_batch (line 308) | async def _execute_query_batch( method execute_managed_mode (line 359) | async def execute_managed_mode(self, connection_params: Dict[str, Any]... FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/db_analyzer/plugin_registry.py class PluginRegistry (line 24) | class PluginRegistry: method get_plugin (line 34) | def get_plugin(cls, db_type: str) -> DatabasePlugin: method get_supported_types (line 53) | def get_supported_types(cls) -> list[str]: method register_plugin (line 58) | def register_plugin(cls, db_type: str, plugin_class: Type[DatabasePlug... FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/db_analyzer/postgresql.py class PostgreSQLPlugin (line 193) | class PostgreSQLPlugin(DatabasePlugin): method get_queries (line 196) | def get_queries(self) -> Dict[str, Any]: method get_database_display_name (line 200) | def get_database_display_name(self) -> str: method execute_managed_mode (line 208) | async def execute_managed_mode(self, connection_params: Dict[str, Any]... FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/db_analyzer/sqlserver.py class SQLServerPlugin (line 217) | class SQLServerPlugin(DatabasePlugin): method get_queries (line 220) | def get_queries(self) -> Dict[str, Any]: method get_database_display_name (line 224) | def get_database_display_name(self) -> str: method apply_result_limit (line 228) | def apply_result_limit(self, sql: str, max_results: int) -> str: method execute_managed_mode (line 248) | async def execute_managed_mode(self, connection_params: Dict[str, Any]... FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/markdown_formatter.py class MarkdownFormatter (line 26) | class MarkdownFormatter: method __init__ (line 29) | def __init__( method _format_as_markdown_table (line 55) | def _format_as_markdown_table(self, data: List[Dict[str, Any]]) -> str: method _generate_query_file (line 135) | def _generate_query_file(self, query_name: str, query_result: Dict[str... method _generate_skipped_query_file (line 197) | def _generate_skipped_query_file(self, query_name: str, reason: str) -... method _generate_manifest (line 258) | def _generate_manifest(self) -> None: method generate_all_files (line 420) | def generate_all_files(self) -> Tuple[List[str], List[Tuple[str, str]]]: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/model_validation_utils.py class DynamoDBLocalConfig (line 34) | class DynamoDBLocalConfig: class DynamoDBLocalVersionError (line 55) | class DynamoDBLocalVersionError(Exception): class ContainerTools (line 61) | class ContainerTools: class DynamoDBClientConfig (line 67) | class DynamoDBClientConfig: function _create_dynamodb_client (line 75) | def _create_dynamodb_client(endpoint_url: Optional[str] = None): function _run_subprocess_safely (line 97) | def _run_subprocess_safely( function _parse_container_port (line 144) | def _parse_container_port(ports_output: str) -> Optional[str]: function _parse_dynamodb_local_version (line 158) | def _parse_dynamodb_local_version(output: str) -> Optional[Tuple[int, in... function _format_version (line 173) | def _format_version(version: Tuple[int, int, int]) -> str: function _get_dynamodb_local_container_version (line 185) | def _get_dynamodb_local_container_version(container_path: str) -> Option... function _get_dynamodb_local_java_version (line 211) | def _get_dynamodb_local_java_version( function _check_version_meets_minimum (line 252) | def _check_version_meets_minimum(current_version: Optional[Tuple[int, in... function _container_exists (line 267) | def _container_exists(container_path: str) -> bool: function _container_is_running (line 281) | def _container_is_running(container_path: str) -> bool: function _restart_container (line 288) | def _restart_container(container_path: str) -> bool: function _get_container_port (line 296) | def _get_container_port(container_path: str) -> Optional[str]: function _extract_port_from_cmdline (line 313) | def _extract_port_from_cmdline(cmdline: list) -> Optional[int]: function _safe_extract_members (line 331) | def _safe_extract_members(members): function _get_dynamodb_local_paths (line 346) | def _get_dynamodb_local_paths() -> tuple[str, str, str]: function _validate_download_url (line 354) | def _validate_download_url(url: str) -> None: function _download_and_extract_jar (line 370) | def _download_and_extract_jar(dynamodb_dir: str, jar_path: str, lib_path... function _try_container_setup (line 420) | def _try_container_setup() -> Optional[str]: function _try_java_setup (line 462) | def _try_java_setup() -> Optional[str]: function get_container_path (line 521) | def get_container_path() -> Optional[str]: function find_available_port (line 551) | def find_available_port(start_port: int = DynamoDBLocalConfig.DEFAULT_PO... function get_existing_container_dynamodb_local_endpoint (line 573) | def get_existing_container_dynamodb_local_endpoint(container_path: str) ... function start_container (line 605) | def start_container(container_path: str, port: int) -> str: function get_java_path (line 639) | def get_java_path() -> Optional[str]: function get_existing_java_dynamodb_local_endpoint (line 662) | def get_existing_java_dynamodb_local_endpoint() -> Optional[str]: function download_dynamodb_local_jar (line 704) | def download_dynamodb_local_jar() -> tuple[str, str]: function _validate_java_executable (line 726) | def _validate_java_executable(java_path: str) -> None: function start_java_process (line 742) | def start_java_process(java_path: str, port: int) -> str: function check_dynamodb_readiness (line 791) | def check_dynamodb_readiness(endpoint: str) -> str: function setup_dynamodb_local (line 828) | def setup_dynamodb_local() -> str: function create_validation_resources (line 852) | def create_validation_resources( function cleanup_validation_resources (line 884) | def cleanup_validation_resources(dynamodb_client) -> Dict[str, Any]: function list_tables (line 929) | def list_tables(dynamodb_client) -> list: function create_tables (line 947) | def create_tables(dynamodb_client, tables: list) -> Dict[str, Any]: function insert_items (line 981) | def insert_items(dynamodb_client, items: dict) -> Dict[str, Any]: function get_validation_result_transform_prompt (line 1019) | def get_validation_result_transform_prompt() -> str: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/codegen.py class GenerationResult (line 47) | class GenerationResult: method format_for_cli (line 62) | def format_for_cli(self, args) -> str: method format_for_mcp (line 66) | def format_for_mcp(self) -> str: method format_result (line 70) | def format_result(self, format_type: str = 'mcp', args=None) -> str: method _format_validation_error (line 117) | def _format_validation_error(self) -> str: method _format_validation_success (line 134) | def _format_validation_success(self) -> str: method _format_next_steps (line 152) | def _format_next_steps(self, args) -> list: function _validate_linter_command (line 177) | def _validate_linter_command(cmd: list) -> None: function _validate_path_within_allowed_dirs (line 197) | def _validate_path_within_allowed_dirs( function run_linter (line 224) | def run_linter(output_dir: Path, language: str, fix: bool = False) -> bool: function generate (line 293) | def generate( function main (line 465) | def main(): FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/cross_table_validator.py class CrossTableValidator (line 32) | class CrossTableValidator: method validate_cross_table_patterns (line 35) | def validate_cross_table_patterns( method _validate_cross_table_pattern (line 83) | def _validate_cross_table_pattern( method _validate_entities_involved (line 204) | def _validate_entities_involved( method _validate_entity_involvement (line 256) | def _validate_entity_involvement( method _find_table (line 336) | def _find_table( method _get_valid_actions (line 354) | def _get_valid_actions(self, operation: str) -> list[str]: method _validate_parameters (line 370) | def _validate_parameters( method _validate_parameter (line 415) | def _validate_parameter( method _find_field_type_in_schema (line 459) | def _find_field_type_in_schema(self, schema: dict[str, Any], field_nam... FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/file_utils.py class FileUtils (line 26) | class FileUtils: method load_json_file (line 30) | def load_json_file(file_path: str, file_name: str = 'File') -> Dict[st... method validate_and_resolve_path (line 57) | def validate_and_resolve_path( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/filter_expression_validator.py class FilterExpressionValidator (line 44) | class FilterExpressionValidator: method validate_filter_expression (line 57) | def validate_filter_expression( method _validate_condition (line 126) | def _validate_condition( method _validate_operator_condition (line 217) | def _validate_operator_condition( method _validate_function_condition (line 276) | def _validate_function_condition( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/gsi_validator.py class GSIValidator (line 40) | class GSIValidator: method __init__ (line 52) | def __init__(self): method _validate_multi_attribute_key (line 58) | def _validate_multi_attribute_key( method validate_gsi_names_unique (line 148) | def validate_gsi_names_unique( method validate_gsi_mappings (line 195) | def validate_gsi_mappings( method validate_template_parameters (line 255) | def validate_template_parameters( method _validate_single_template (line 335) | def _validate_single_template( method _validate_key_template_length_match (line 388) | def _validate_key_template_length_match( method _validate_single_key_template_match (line 437) | def _validate_single_key_template_match( method validate_range_conditions (line 492) | def validate_range_conditions( method validate_parameter_count (line 508) | def validate_parameter_count( method validate_gsi_access_patterns (line 526) | def validate_gsi_access_patterns( method validate_complete_gsi_configuration (line 592) | def validate_complete_gsi_configuration( method _parse_gsi_list (line 653) | def _parse_gsi_list( method _parse_entity_fields (line 752) | def _parse_entity_fields( method _validate_entity_gsi_mappings (line 794) | def _validate_entity_gsi_mappings( method _validate_entity_access_patterns (line 906) | def _validate_entity_access_patterns( method _validate_entities_gsi_configuration (line 968) | def _validate_entities_gsi_configuration( method _validate_gsi_projections (line 1012) | def _validate_gsi_projections( method validate_include_projection_safety (line 1090) | def validate_include_projection_safety( method _validate_included_attributes_exist (line 1198) | def _validate_included_attributes_exist( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/key_template_parser.py class KeyTemplateParser (line 31) | class KeyTemplateParser: method extract_parameters (line 43) | def extract_parameters(self, template: str) -> list[str]: method validate_parameters (line 66) | def validate_parameters( method validate_template_syntax (line 100) | def validate_template_syntax(self, template: str) -> list[ValidationEr... FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/language_config.py class SupportFile (line 25) | class SupportFile: class LinterConfig (line 35) | class LinterConfig: class NamingConventions (line 46) | class NamingConventions: class LanguageConfig (line 54) | class LanguageConfig: class LanguageConfigLoader (line 65) | class LanguageConfigLoader: method load (line 69) | def load(language: str) -> LanguageConfig: method get_available_languages (line 119) | def get_available_languages() -> list[str]: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/language_sample_generator.py class LanguageSampleGeneratorInterface (line 25) | class LanguageSampleGeneratorInterface(ABC): method get_sample_value (line 29) | def get_sample_value(self, field_type: str, field_name: str, **kwargs)... method get_update_value (line 43) | def get_update_value(self, field_type: str, field_name: str, **kwargs)... method get_default_values (line 57) | def get_default_values(self) -> dict[str, str]: method get_default_update_values (line 66) | def get_default_update_values(self) -> dict[str, str]: method get_parameter_value (line 75) | def get_parameter_value( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/language_type_mapper.py class LanguageTypeMappingInterface (line 25) | class LanguageTypeMappingInterface(ABC): method field_type_mappings (line 30) | def field_type_mappings(self) -> dict[str, str]: method return_type_mappings (line 36) | def return_type_mappings(self) -> dict[str, str]: method parameter_type_mappings (line 42) | def parameter_type_mappings(self) -> dict[str, str]: method all_mappings (line 47) | def all_mappings(self) -> dict[str, str]: method validate_completeness (line 55) | def validate_completeness(self) -> None: method get_language_name (line 87) | def get_language_name(self) -> str: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/range_query_validator.py class RangeQueryValidator (line 32) | class RangeQueryValidator: method validate_range_condition (line 41) | def validate_range_condition( method get_expected_parameter_count (line 77) | def get_expected_parameter_count( method validate_parameter_count (line 105) | def validate_parameter_count( method validate_operation_compatibility (line 221) | def validate_operation_compatibility( method validate_complete_range_query (line 252) | def validate_complete_range_query( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/schema_definitions.py class FieldType (line 29) | class FieldType(Enum): class ReturnType (line 41) | class ReturnType(Enum): class DynamoDBOperation (line 51) | class DynamoDBOperation(Enum): class ParameterType (line 64) | class ParameterType(Enum): class DynamoDBType (line 77) | class DynamoDBType(Enum): class RangeCondition (line 92) | class RangeCondition(Enum): class GSIProjectionType (line 103) | class GSIProjectionType(Enum): class GSIDefinition (line 112) | class GSIDefinition: class GSIMapping (line 127) | class GSIMapping: class Field (line 139) | class Field: class Parameter (line 149) | class Parameter: class FilterCondition (line 166) | class FilterCondition: class AccessPattern (line 180) | class AccessPattern: class Entity (line 197) | class Entity: class TableConfig (line 209) | class TableConfig: class Table (line 222) | class Table: function get_enum_values (line 231) | def get_enum_values(enum_class) -> list[str]: function is_valid_enum_value (line 236) | def is_valid_enum_value(value: str, enum_class) -> bool: function suggest_enum_value (line 241) | def suggest_enum_value(invalid_value: str, enum_class) -> str: function get_all_enum_classes (line 262) | def get_all_enum_classes() -> dict[str, type]: function validate_required_fields (line 316) | def validate_required_fields( function validate_enum_field (line 335) | def validate_enum_field( function validate_data_type (line 364) | def validate_data_type( function validate_parameter_core (line 382) | def validate_parameter_core( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/schema_loader.py class SchemaLoader (line 27) | class SchemaLoader: method __init__ (line 30) | def __init__(self, schema_path: str): method load_schema (line 38) | def load_schema(self) -> dict[str, Any]: method schema (line 58) | def schema(self) -> dict[str, Any]: method entities (line 63) | def entities(self) -> dict[str, Any]: method table_config (line 68) | def table_config(self) -> dict[str, Any]: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/schema_validator.py class SchemaValidator (line 59) | class SchemaValidator: method __init__ (line 62) | def __init__(self, strict_mode: bool = True): method validate_schema_file (line 82) | def validate_schema_file(self, schema_path: str) -> ValidationResult: method _validate_schema_structure (line 125) | def _validate_schema_structure(self, schema: dict[str, Any]) -> None: method _validate_tables (line 157) | def _validate_tables(self, tables: Any) -> None: method _validate_table (line 194) | def _validate_table(self, table: Any, path: str, table_index: int) -> ... method _validate_table_config (line 212) | def _validate_table_config(self, table_config: Any, path: str = 'table... method _validate_entities (line 232) | def _validate_entities( method _validate_entity (line 268) | def _validate_entity( method _validate_entity_fields (line 340) | def _validate_entity_fields(self, fields: Any, path: str) -> None: method _validate_field_definition (line 357) | def _validate_field_definition(self, field: Any, path: str, field_name... method _validate_access_patterns (line 401) | def _validate_access_patterns(self, patterns: Any, path: str, entity_n... method _validate_access_pattern (line 414) | def _validate_access_pattern( method _validate_parameters (line 506) | def _validate_parameters(self, parameters: Any, path: str) -> None: method _validate_parameter (line 519) | def _validate_parameter(self, param: Any, path: str, param_names: set[... method _validate_consistent_read (line 529) | def _validate_consistent_read(self, pattern: dict[str, Any], path: str... method _validate_main_table_range_query (line 557) | def _validate_main_table_range_query(self, pattern: dict[str, Any], pa... method format_validation_result (line 602) | def format_validation_result(self) -> str: method _validate_gsi_configuration (line 606) | def _validate_gsi_configuration(self, schema: dict[str, Any]) -> None: function validate_schema_file (line 646) | def validate_schema_file(schema_path: str, strict_mode: bool = True) -> ... FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/type_mappings.py class TypeMapper (line 30) | class TypeMapper: method __init__ (line 33) | def __init__(self, language: str = 'python'): method _load_language_mappings (line 44) | def _load_language_mappings(self, language: str) -> LanguageTypeMappin... method map_type (line 56) | def map_type(self, generic_type: str, **kwargs) -> str: method map_field_type (line 70) | def map_field_type(self, field: dict[str, Any]) -> str: method map_return_type (line 80) | def map_return_type(self, return_type: str, entity_name: str = None) -... method map_parameter_type (line 86) | def map_parameter_type(self, param: dict[str, Any]) -> str: method validate_field_type (line 100) | def validate_field_type(self, field_type: str) -> bool: method validate_return_type (line 104) | def validate_return_type(self, return_type: str) -> bool: method validate_parameter_type (line 108) | def validate_parameter_type(self, param_type: str) -> bool: method get_supported_field_types (line 112) | def get_supported_field_types(self) -> list[str]: method get_supported_return_types (line 116) | def get_supported_return_types(self) -> list[str]: method get_supported_parameter_types (line 120) | def get_supported_parameter_types(self) -> list[str]: function map_python_type (line 126) | def map_python_type(generic_type: str, **kwargs) -> str: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/usage_data_formatter.py class UsageDataFormatterInterface (line 21) | class UsageDataFormatterInterface(ABC): method format_value (line 25) | def format_value(self, value: Any, field_type: str) -> str: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/usage_data_loader.py class UsageDataLoader (line 31) | class UsageDataLoader: method __init__ (line 34) | def __init__( method get_sample_value_for_field (line 54) | def get_sample_value_for_field( method get_update_value_for_field (line 82) | def get_update_value_for_field( method get_all_usage_data (line 104) | def get_all_usage_data(self) -> Dict[str, Any]: method has_data (line 108) | def has_data(self) -> bool: method get_entity_sample_data (line 112) | def get_entity_sample_data(self, entity_name: str) -> Dict[str, Any]: method get_entity_update_data (line 117) | def get_entity_update_data(self, entity_name: str) -> Dict[str, Any]: method get_filter_value_for_param (line 122) | def get_filter_value_for_param( method _load_usage_data (line 143) | def _load_usage_data(self) -> None: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/usage_data_validator.py class UsageDataValidator (line 30) | class UsageDataValidator: method __init__ (line 39) | def __init__(self): method validate_usage_data_file (line 43) | def validate_usage_data_file( method _validate_usage_data_structure (line 79) | def _validate_usage_data_structure( method _validate_entities_section (line 116) | def _validate_entities_section( method _validate_entity_data (line 163) | def _validate_entity_data( method _validate_entity_section (line 210) | def _validate_entity_section( method _validate_field_names (line 238) | def _validate_field_names( method format_validation_result (line 266) | def format_validation_result(self) -> str: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/utils.py function to_snake_case (line 23) | def to_snake_case(camel_case_str: str) -> str: function to_pascal_case (line 43) | def to_pascal_case(snake_case_str: str) -> str: function get_crud_method_names (line 48) | def get_crud_method_names(entity_name: str, language_config: LanguageCon... function get_crud_signature (line 90) | def get_crud_signature(entity_name: str, method_name: str, entity_config... function get_pattern_signature (line 118) | def get_pattern_signature(pattern: dict) -> tuple[str, ...]: function has_signature_conflict (line 127) | def has_signature_conflict( function is_semantically_equivalent_to_crud (line 146) | def is_semantically_equivalent_to_crud( function generate_renamed_method_name (line 192) | def generate_renamed_method_name(pattern_name: str, pattern: dict) -> str: function filter_conflicting_patterns (line 225) | def filter_conflicting_patterns( function generate_test_instruction (line 328) | def generate_test_instruction( function format_entity_imports (line 341) | def format_entity_imports(entity_names: list[str]) -> str: function detect_item_collection (line 346) | def detect_item_collection(entity_name: str, entity_config: dict, table_... function get_sk_prefix (line 379) | def get_sk_prefix(sk_template: str) -> str: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/core/validation_utils.py class ValidationError (line 24) | class ValidationError: class ValidationResult (line 34) | class ValidationResult: method add_error (line 43) | def add_error(self, path: str, message: str, suggestion: str = '') -> ... method add_errors (line 48) | def add_errors(self, errors: list[ValidationError]) -> None: method add_warning (line 54) | def add_warning(self, path: str, message: str, suggestion: str = '') -... method store_entity_info (line 58) | def store_entity_info(self, entities: set[str], entity_fields: dict[st... method format (line 63) | def format(self, success_message: str, failure_prefix: str) -> str: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/generators/__init__.py function create_generator (line 22) | def create_generator( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/generators/access_pattern_mapper.py class AccessPatternMapper (line 31) | class AccessPatternMapper: method __init__ (line 34) | def __init__(self, language_config: LanguageConfig, type_mapper: TypeM... method _get_equivalent_crud_method (line 39) | def _get_equivalent_crud_method( method generate_mapping (line 67) | def generate_mapping( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/generators/base_generator.py class BaseGenerator (line 26) | class BaseGenerator(ABC): method __init__ (line 29) | def __init__(self, schema_path: str, language: str = 'python'): method schema (line 42) | def schema(self) -> dict[str, Any]: method generate_entity (line 47) | def generate_entity(self, entity_name: str, entity_config: dict[str, A... method generate_repository (line 52) | def generate_repository(self, entity_name: str, entity_config: dict[st... method generate_all (line 57) | def generate_all(self, output_dir: str, generate_usage_examples: bool ... method generate_usage_examples (line 61) | def generate_usage_examples( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/generators/jinja2_generator.py class Jinja2Generator (line 45) | class Jinja2Generator(BaseGenerator): method __init__ (line 48) | def __init__( method _is_pure_field_reference (line 239) | def _is_pure_field_reference(self, template: str) -> bool: method _get_field_type (line 262) | def _get_field_type(self, field_name: str, fields: list[dict[str, Any]... method _is_numeric_type (line 277) | def _is_numeric_type(self, field_type: str | None) -> bool: method _check_template_is_pure_numeric (line 288) | def _check_template_is_pure_numeric( method _extract_template_fields (line 312) | def _extract_template_fields(self, template: str | list[str] | None) -... method _process_key_template (line 330) | def _process_key_template( method _preprocess_entity_config (line 381) | def _preprocess_entity_config(self, entity_config: dict[str, Any]) -> ... method _check_needs_any_import (line 449) | def _check_needs_any_import(self, all_tables: list[dict[str, Any]]) ->... method _is_unsafe_include_projection (line 488) | def _is_unsafe_include_projection( method generate_entity (line 521) | def generate_entity(self, entity_name: str, entity_config: dict[str, A... method generate_repository (line 532) | def generate_repository( method generate_repository_with_mapping (line 643) | def generate_repository_with_mapping( method _format_parameters (line 664) | def _format_parameters(self, params: list[dict[str, Any]]) -> str: method _get_param_description (line 679) | def _get_param_description(self, param: dict[str, Any]) -> str: method _get_return_description (line 695) | def _get_return_description(self, pattern: dict[str, Any]) -> str: method _get_table_list (line 718) | def _get_table_list(self, pattern: dict[str, Any]) -> str: method _get_entity_imports (line 731) | def _get_entity_imports(self, cross_table_patterns: list[dict[str, Any... method _extract_entity_names (line 743) | def _extract_entity_names(self, cross_table_patterns: list[dict[str, A... method _build_entities_involved_list (line 758) | def _build_entities_involved_list(self, pattern: dict[str, Any]) -> li... method _create_transaction_pattern_mapping (line 778) | def _create_transaction_pattern_mapping(self, pattern: dict[str, Any])... method generate_transaction_service (line 815) | def generate_transaction_service( method generate_usage_examples (line 858) | def generate_usage_examples( method generate_all (line 926) | def generate_all(self, output_dir: str, generate_usage_examples: bool ... FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/generators/sample_generators.py class SampleValueGenerator (line 23) | class SampleValueGenerator: method __init__ (line 26) | def __init__(self, language: str = 'python', usage_data_path: str = No... method _load_language_generator (line 33) | def _load_language_generator(self, language: str): method generate_sample_value (line 52) | def generate_sample_value(self, field: dict[str, Any], **kwargs) -> str: method generate_update_value (line 66) | def generate_update_value(self, field: dict[str, Any], **kwargs) -> str: method get_updatable_field (line 80) | def get_updatable_field( method get_all_key_params (line 128) | def get_all_key_params(self, entity_config: dict[str, Any]) -> list[str]: method get_parameter_value (line 144) | def get_parameter_value( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/languages/python/base_repository.py class OptimisticLockException (line 30) | class OptimisticLockException(Exception): method __init__ (line 33) | def __init__(self, entity_name: str, message: str = 'Item was modified... class EntityConfig (line 39) | class EntityConfig: class ConfigurableEntity (line 50) | class ConfigurableEntity(BaseModel): method get_config (line 56) | def get_config(cls) -> EntityConfig: method pk (line 60) | def pk(self) -> KeyType: method sk (line 64) | def sk(self) -> KeyType | None: method build_pk_for_lookup (line 72) | def build_pk_for_lookup(cls, *args, **kwargs) -> KeyType: method build_sk_for_lookup (line 80) | def build_sk_for_lookup(cls, *args, **kwargs) -> KeyType | None: method get_sk_prefix (line 91) | def get_sk_prefix(cls, **kwargs) -> str: class BaseRepository (line 99) | class BaseRepository(Generic[T]): method __init__ (line 102) | def __init__( method create (line 111) | def create(self, entity: T) -> T: method get (line 149) | def get( method update (line 168) | def update(self, entity: T) -> T: method delete (line 212) | def delete(self, pk: KeyType, sk: KeyType | None = None) -> bool: method delete_entity (line 227) | def delete_entity(self, entity: T) -> bool: method _parse_query_response (line 231) | def _parse_query_response( method _parse_query_response_raw (line 261) | def _parse_query_response_raw( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/languages/python/sample_generators.py class PythonSampleGenerator (line 29) | class PythonSampleGenerator(LanguageSampleGeneratorInterface): method __init__ (line 32) | def __init__(self, usage_data_path: Optional[str] = None): method get_default_values (line 40) | def get_default_values(self) -> dict[str, str]: method get_default_update_values (line 52) | def get_default_update_values(self) -> dict[str, str]: method get_sample_value (line 63) | def get_sample_value(self, field_type: str, field_name: str, **kwargs)... method get_update_value (line 117) | def get_update_value(self, field_type: str, field_name: str, **kwargs)... method get_gsi_sample_value (line 153) | def get_gsi_sample_value(self, field_type: str, field_name: str, **kwa... method get_parameter_value (line 204) | def get_parameter_value( FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/languages/python/type_mappings.py class PythonTypeMappings (line 27) | class PythonTypeMappings(LanguageTypeMappingInterface): method field_type_mappings (line 31) | def field_type_mappings(self) -> dict[str, str]: method return_type_mappings (line 44) | def return_type_mappings(self) -> dict[str, str]: method parameter_type_mappings (line 55) | def parameter_type_mappings(self) -> dict[str, str]: method get_array_type (line 69) | def get_array_type(self, item_type: str) -> str: method get_optional_type (line 73) | def get_optional_type(self, base_type: str) -> str: method supports_union_syntax (line 77) | def supports_union_syntax(self) -> bool: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/languages/python/usage_data_formatter.py class PythonUsageDataFormatter (line 28) | class PythonUsageDataFormatter(UsageDataFormatterInterface): method format_value (line 31) | def format_value(self, value: Any, field_type: str) -> str: method _escape_string (line 51) | def _escape_string(self, value: str) -> str: method _format_string_value (line 55) | def _format_string_value(self, value: Any) -> str: method _format_integer_value (line 59) | def _format_integer_value(self, value: Any) -> str: method _format_decimal_value (line 68) | def _format_decimal_value(self, value: Any) -> str: method _format_boolean_value (line 78) | def _format_boolean_value(self, value: Any) -> str: method _format_array_value (line 86) | def _format_array_value(self, value: Any) -> str: method _format_object_value (line 105) | def _format_object_value(self, value: Any) -> str: method _format_dict_with_decimals (line 118) | def _format_dict_with_decimals(self, d: dict) -> str: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/repo_generation_tool/output/output_manager.py class GeneratedFile (line 24) | class GeneratedFile: class GenerationResult (line 35) | class GenerationResult: class OutputManager (line 43) | class OutputManager: method __init__ (line 46) | def __init__(self, output_dir: str, language: str = 'python'): method write_generated_files (line 52) | def write_generated_files(self, generation_result: GenerationResult) -... method _write_mapping_file (line 68) | def _write_mapping_file( method _write_file (line 88) | def _write_file(self, file_path: str, content: str) -> None: method _copy_support_file (line 100) | def _copy_support_file(self, dest_filename: str) -> None: method _print_summary (line 119) | def _print_summary(self, generation_result: GenerationResult) -> None: FILE: src/dynamodb-mcp-server/awslabs/dynamodb_mcp_server/server.py function create_server (line 126) | def create_server(): function _call_tool_with_formatted_errors (line 139) | async def _call_tool_with_formatted_errors(name, arguments): function dynamodb_data_modeling (line 153) | async def dynamodb_data_modeling() -> str: function dynamodb_data_model_schema_converter (line 181) | async def dynamodb_data_model_schema_converter( function dynamodb_data_model_schema_validator (line 241) | async def dynamodb_data_model_schema_validator( function source_db_analyzer (line 332) | async def source_db_analyzer( function _execute_dynamodb_command (line 499) | async def _execute_dynamodb_command( function dynamodb_data_model_validation (line 540) | async def dynamodb_data_model_validation( function compute_performances_and_costs (line 645) | async def compute_performances_and_costs( function generate_resources (line 749) | async def generate_resources( function generate_data_access_layer (line 807) | async def generate_data_access_layer( function _load_next_steps_prompt (line 920) | def _load_next_steps_prompt(filename: str, **kwargs) -> str: function main (line 940) | def main(): function _execute_access_patterns (line 945) | async def _execute_access_patterns( FILE: src/dynamodb-mcp-server/tests/cdk_generator/integration/conftest.py function pytest_configure (line 7) | def pytest_configure(config): function complex_json_data (line 16) | def complex_json_data(): function complex_json_file (line 85) | def complex_json_file(complex_json_data, tmp_path): FILE: src/dynamodb-mcp-server/tests/cdk_generator/integration/test_cdk_compilation.py class TestCdkCompilation (line 9) | class TestCdkCompilation: method test_typescript_compilation (line 12) | def test_typescript_compilation(self, complex_json_file): method test_cdk_synthesis (line 38) | def test_cdk_synthesis(self, complex_json_file): FILE: src/dynamodb-mcp-server/tests/cdk_generator/integration/test_cdk_deployment.py class TestCdkDeployment (line 14) | class TestCdkDeployment: method aws_session (line 18) | def aws_session(self): method test_cdk_deployment_to_aws (line 30) | def test_cdk_deployment_to_aws(self, complex_json_file, aws_session): FILE: src/dynamodb-mcp-server/tests/cdk_generator/integration/test_cdk_generation.py class TestCdkGeneration (line 24) | class TestCdkGeneration: method test_complete_cdk_generation_minimal (line 27) | def test_complete_cdk_generation_minimal(self, tmp_path): method test_complete_cdk_generation_complex (line 64) | def test_complete_cdk_generation_complex(self, complex_json_file): method test_stack_filename_matches_cdk_init (line 85) | def test_stack_filename_matches_cdk_init(self, complex_json_file): method test_readme_custom_template_replaces_cdk_init (line 118) | def test_readme_custom_template_replaces_cdk_init(self, complex_json_f... method test_package_json_has_required_dependencies (line 141) | def test_package_json_has_required_dependencies(self, complex_json_file): method test_cdk_json_has_correct_app_entry (line 162) | def test_cdk_json_has_correct_app_entry(self, complex_json_file): method test_tsconfig_exists (line 178) | def test_tsconfig_exists(self, complex_json_file): method test_gsi_projection_type_keys_only (line 193) | def test_gsi_projection_type_keys_only(self, tmp_path): method test_ttl_attribute_included_when_enabled (line 236) | def test_ttl_attribute_included_when_enabled(self, tmp_path): method test_ttl_attribute_omitted_when_disabled (line 272) | def test_ttl_attribute_omitted_when_disabled(self, tmp_path): method test_ttl_attribute_omitted_when_not_specified (line 308) | def test_ttl_attribute_omitted_when_not_specified(self, tmp_path): FILE: src/dynamodb-mcp-server/tests/cdk_generator/test_generator.py function sample_data_model (line 12) | def sample_data_model(): function generator (line 32) | def generator(): class TestCdkGeneratorInit (line 37) | class TestCdkGeneratorInit: method test_init (line 40) | def test_init(self): class TestGenerateMethod (line 54) | class TestGenerateMethod: method test_generate_missing_json_file (line 57) | def test_generate_missing_json_file(self, generator): method test_generate_existing_directory (line 62) | def test_generate_existing_directory(self, generator, sample_data_mode... method test_generate_success_flow (line 79) | def test_generate_success_flow( method test_generate_cdk_init_failure (line 111) | def test_generate_cdk_init_failure( method test_generate_parse_data_model_failure (line 125) | def test_generate_parse_data_model_failure( method test_generate_table_collision_failure (line 145) | def test_generate_table_collision_failure( method test_generate_render_template_failure (line 169) | def test_generate_render_template_failure( class TestRunCdkInit (line 191) | class TestRunCdkInit: method test_run_cdk_init_success (line 195) | def test_run_cdk_init_success(self, mock_run, generator, tmp_path): method test_run_cdk_init_failure (line 207) | def test_run_cdk_init_failure(self, mock_run, generator, tmp_path): method test_run_cdk_init_timeout (line 217) | def test_run_cdk_init_timeout(self, mock_run, generator, tmp_path): method test_run_cdk_init_npx_not_found (line 227) | def test_run_cdk_init_npx_not_found(self, mock_run, generator, tmp_path): method test_run_cdk_init_generic_exception (line 235) | def test_run_cdk_init_generic_exception(self, mock_run, generator, tmp... class TestParseDataModel (line 243) | class TestParseDataModel: method test_parse_data_model_invalid_json (line 246) | def test_parse_data_model_invalid_json(self, generator, tmp_path): method test_parse_data_model_valid (line 254) | def test_parse_data_model_valid(self, generator, sample_data_model, tm... method test_parse_data_model_read_exception (line 263) | def test_parse_data_model_read_exception(self, generator, tmp_path): class TestCheckTableNameCollisions (line 274) | class TestCheckTableNameCollisions: method test_table_name_collision_raises_error (line 277) | def test_table_name_collision_raises_error(self, generator): method test_no_collision_with_different_names (line 310) | def test_no_collision_with_different_names(self, generator): class TestRenderTemplate (line 340) | class TestRenderTemplate: method test_render_template_success (line 343) | def test_render_template_success(self, generator, tmp_path, sample_dat... method test_render_template_missing_template (line 362) | def test_render_template_missing_template(self, generator, tmp_path, s... method test_render_template_generic_exception (line 377) | def test_render_template_generic_exception(self, generator, tmp_path, ... class TestToCamelCase (line 391) | class TestToCamelCase: method generator (line 395) | def generator(self): method test_pascal_case_to_camel_case (line 399) | def test_pascal_case_to_camel_case(self, generator): method test_kebab_case_to_camel_case (line 404) | def test_kebab_case_to_camel_case(self, generator): method test_snake_case_to_camel_case (line 409) | def test_snake_case_to_camel_case(self, generator): method test_single_word_to_camel_case (line 414) | def test_single_word_to_camel_case(self, generator): method test_mixed_separators_to_camel_case (line 419) | def test_mixed_separators_to_camel_case(self, generator): class TestToPascalCase (line 424) | class TestToPascalCase: method generator (line 428) | def generator(self): method test_pascal_case_preserved (line 432) | def test_pascal_case_preserved(self, generator): method test_kebab_case_to_pascal_case (line 437) | def test_kebab_case_to_pascal_case(self, generator): method test_snake_case_to_pascal_case (line 442) | def test_snake_case_to_pascal_case(self, generator): method test_single_word_to_pascal_case (line 447) | def test_single_word_to_pascal_case(self, generator): method test_mixed_separators_to_pascal_case (line 452) | def test_mixed_separators_to_pascal_case(self, generator): method test_camel_case_to_pascal_case (line 456) | def test_camel_case_to_pascal_case(self, generator): class TestReadmeTemplate (line 462) | class TestReadmeTemplate: method test_copy_readme_template_success (line 466) | def test_copy_readme_template_success(self, mock_copy2, generator, tmp... method test_copy_readme_template_failure (line 480) | def test_copy_readme_template_failure(self, mock_copy2, generator, tmp... FILE: src/dynamodb-mcp-server/tests/cdk_generator/test_models.py function extend_json (line 29) | def extend_json(base, updates): class TestKeyAttribute (line 44) | class TestKeyAttribute: method test_to_cdk_type_string (line 47) | def test_to_cdk_type_string(self): method test_to_cdk_type_number (line 52) | def test_to_cdk_type_number(self): method test_to_cdk_type_binary (line 57) | def test_to_cdk_type_binary(self): method test_to_cdk_type_invalid (line 62) | def test_to_cdk_type_invalid(self): class TestGlobalSecondaryIndex (line 71) | class TestGlobalSecondaryIndex: method test_has_multi_partition_keys_single (line 74) | def test_has_multi_partition_keys_single(self): method test_has_multi_partition_keys_multiple (line 82) | def test_has_multi_partition_keys_multiple(self): method test_has_multi_sort_keys_none (line 93) | def test_has_multi_sort_keys_none(self): method test_has_multi_sort_keys_single (line 102) | def test_has_multi_sort_keys_single(self): method test_has_multi_sort_keys_multiple (line 111) | def test_has_multi_sort_keys_multiple(self): class TestDataModelFromJson (line 124) | class TestDataModelFromJson: class TestRootValidation (line 127) | class TestRootValidation: method test_input_not_dict (line 130) | def test_input_not_dict(self): method test_missing_tables_field (line 135) | def test_missing_tables_field(self): method test_tables_not_list (line 141) | def test_tables_not_list(self): method test_empty_tables_list (line 149) | def test_empty_tables_list(self): class TestMinimalTable (line 155) | class TestMinimalTable: method test_parse_minimal_table (line 158) | def test_parse_minimal_table(self): class TestTableStructure (line 169) | class TestTableStructure: method test_table_not_object (line 172) | def test_table_not_object(self): method test_missing_table_name (line 178) | def test_missing_table_name(self): method test_table_name_not_string (line 193) | def test_table_name_not_string(self): method test_missing_attribute_definitions (line 209) | def test_missing_attribute_definitions(self): method test_attribute_definitions_not_array (line 224) | def test_attribute_definitions_not_array(self): method test_missing_key_schema (line 240) | def test_missing_key_schema(self): method test_key_schema_not_array (line 255) | def test_key_schema_not_array(self): class TestAttributeDefinitions (line 271) | class TestAttributeDefinitions: method test_attribute_not_object (line 274) | def test_attribute_not_object(self): method test_missing_attribute_name (line 290) | def test_missing_attribute_name(self): method test_attribute_name_not_string (line 307) | def test_attribute_name_not_string(self): method test_missing_attribute_type (line 324) | def test_missing_attribute_type(self): method test_invalid_attribute_type (line 341) | def test_invalid_attribute_type(self): method test_second_attribute_error_shows_correct_index (line 360) | def test_second_attribute_error_shows_correct_index(self): class TestKeySchema (line 380) | class TestKeySchema: method test_key_element_not_object (line 383) | def test_key_element_not_object(self): method test_missing_key_attribute_name (line 401) | def test_missing_key_attribute_name(self): method test_key_attribute_name_not_string (line 420) | def test_key_attribute_name_not_string(self): method test_missing_key_type (line 439) | def test_missing_key_type(self): method test_invalid_key_type (line 458) | def test_invalid_key_type(self): method test_missing_partition_key (line 477) | def test_missing_partition_key(self): method test_multiple_partition_keys (line 495) | def test_multiple_partition_keys(self): method test_undefined_key_attribute (line 518) | def test_undefined_key_attribute(self): method test_second_key_error_shows_correct_index (line 537) | def test_second_key_error_shows_correct_index(self): method test_key_schema_not_array (line 559) | def test_key_schema_not_array(self): method test_attribute_not_in_definitions (line 578) | def test_attribute_not_in_definitions(self): class TestTableWithSortKey (line 597) | class TestTableWithSortKey: method test_parse_table_with_sort_key (line 600) | def test_parse_table_with_sort_key(self): method test_multiple_sort_keys (line 623) | def test_multiple_sort_keys(self): method test_undefined_sort_key (line 648) | def test_undefined_sort_key(self): class TestTableWithGSI (line 668) | class TestTableWithGSI: class TestSingleKeyGSI (line 671) | class TestSingleKeyGSI: method test_parse_gsi_with_partition_key_only (line 674) | def test_parse_gsi_with_partition_key_only(self): method test_parse_gsi_with_partition_and_sort_key (line 707) | def test_parse_gsi_with_partition_and_sort_key(self): class TestGSIStructure (line 741) | class TestGSIStructure: method test_gsi_not_object (line 744) | def test_gsi_not_object(self): method test_gsi_missing_index_name (line 764) | def test_gsi_missing_index_name(self): method test_gsi_index_name_not_string (line 787) | def test_gsi_index_name_not_string(self): method test_gsi_missing_key_schema (line 815) | def test_gsi_missing_key_schema(self): method test_gsi_key_schema_not_array (line 835) | def test_gsi_key_schema_not_array(self): method test_gsi_missing_partition_key (line 857) | def test_gsi_missing_partition_key(self): method test_gsi_undefined_attribute (line 885) | def test_gsi_undefined_attribute(self): method test_second_gsi_error_shows_correct_index (line 915) | def test_second_gsi_error_shows_correct_index(self): method test_duplicate_gsi_names (line 949) | def test_duplicate_gsi_names(self): class TestMultiKeyGSI (line 984) | class TestMultiKeyGSI: method test_parse_gsi_with_two_partition_keys (line 990) | def test_parse_gsi_with_two_partition_keys(self): method test_parse_gsi_with_three_partition_keys (line 1023) | def test_parse_gsi_with_three_partition_keys(self): method test_parse_gsi_with_four_partition_keys (line 1056) | def test_parse_gsi_with_four_partition_keys(self): method test_parse_gsi_with_two_sort_keys (line 1091) | def test_parse_gsi_with_two_sort_keys(self): method test_parse_gsi_with_three_sort_keys (line 1124) | def test_parse_gsi_with_three_sort_keys(self): method test_parse_gsi_with_four_sort_keys (line 1159) | def test_parse_gsi_with_four_sort_keys(self): method test_parse_gsi_with_multi_partition_and_sort_keys (line 1196) | def test_parse_gsi_with_multi_partition_and_sort_keys(self): method test_has_multi_partition_keys_detection (line 1233) | def test_has_multi_partition_keys_detection(self): method test_has_multi_sort_keys_detection (line 1263) | def test_has_multi_sort_keys_detection(self): method test_gsi_with_five_partition_keys_error (line 1295) | def test_gsi_with_five_partition_keys_error(self): method test_gsi_with_five_sort_keys_error (line 1332) | def test_gsi_with_five_sort_keys_error(self): method test_gsi_missing_key_type (line 1371) | def test_gsi_missing_key_type(self): method test_gsi_invalid_key_type (line 1398) | def test_gsi_invalid_key_type(self): class TestGSIProjection (line 1427) | class TestGSIProjection: method test_projection_type_all (line 1430) | def test_projection_type_all(self): method test_projection_type_keys_only (line 1457) | def test_projection_type_keys_only(self): method test_projection_type_include_with_attributes (line 1484) | def test_projection_type_include_with_attributes(self): class TestProjectionValidation (line 1514) | class TestProjectionValidation: method test_projection_include_without_attributes (line 1517) | def test_projection_include_without_attributes(self): method test_projection_include_with_empty_attributes (line 1546) | def test_projection_include_with_empty_attributes(self): method test_projection_all_with_attributes (line 1578) | def test_projection_all_with_attributes(self): method test_projection_keys_only_with_attributes (line 1610) | def test_projection_keys_only_with_attributes(self): method test_non_key_attributes_not_string (line 1642) | def test_non_key_attributes_not_string(self): method test_non_key_attributes_empty_string (line 1674) | def test_non_key_attributes_empty_string(self): method test_invalid_projection_type (line 1706) | def test_invalid_projection_type(self): method test_non_key_attributes_not_array (line 1737) | def test_non_key_attributes_not_array(self): class TestTableWithTTL (line 1769) | class TestTableWithTTL: method test_parse_table_with_ttl_enabled (line 1772) | def test_parse_table_with_ttl_enabled(self): method test_parse_table_with_ttl_disabled (line 1791) | def test_parse_table_with_ttl_disabled(self): method test_parse_table_without_ttl (line 1810) | def test_parse_table_without_ttl(self): class TestTTLValidation (line 1825) | class TestTTLValidation: method test_ttl_not_object (line 1828) | def test_ttl_not_object(self): method test_ttl_missing_enabled (line 1847) | def test_ttl_missing_enabled(self): method test_ttl_enabled_not_boolean (line 1867) | def test_ttl_enabled_not_boolean(self): method test_ttl_missing_attribute_name_when_enabled (line 1890) | def test_ttl_missing_attribute_name_when_enabled(self): method test_ttl_attribute_name_not_string (line 1910) | def test_ttl_attribute_name_not_string(self): class TestMultipleTables (line 1930) | class TestMultipleTables: method test_parse_multiple_tables (line 1933) | def test_parse_multiple_tables(self): method test_second_table_error_shows_correct_index (line 1954) | def test_second_table_error_shows_correct_index(self): method test_duplicate_table_names (line 1978) | def test_duplicate_table_names(self): FILE: src/dynamodb-mcp-server/tests/conftest.py function mysql_env_setup (line 5) | def mysql_env_setup(monkeypatch): function mock_mysql_functions (line 18) | def mock_mysql_functions(monkeypatch): FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_calculator_runner.py function valid_data_model (line 36) | def valid_data_model(): function mock_cost_model (line 54) | def mock_cost_model(): class TestRunCostCalculator (line 59) | class TestRunCostCalculator: method test_valid_input_returns_report (line 68) | def test_valid_input_returns_report( method test_report_written_to_file (line 95) | def test_report_written_to_file( method test_file_created_when_workspace_dir_provided (line 120) | def test_file_created_when_workspace_dir_provided( method test_file_append_preserves_existing_content (line 144) | def test_file_append_preserves_existing_content( method test_multiple_access_patterns_count (line 176) | def test_multiple_access_patterns_count( method test_run_cost_calculator_returns_report_property (line 220) | def test_run_cost_calculator_returns_report_property(self, item_size, ... class TestReplaceOrAppendReport (line 258) | class TestReplaceOrAppendReport: method test_replaces_existing_report_between_markers (line 267) | def test_replaces_existing_report_between_markers( method test_appends_when_only_start_marker_present (line 303) | def test_appends_when_only_start_marker_present( FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_cost_calculator.py function base_table (line 36) | def base_table(): function base_access_pattern (line 42) | def base_access_pattern(): class TestCalculateCost (line 53) | class TestCalculateCost: class TestReadOperations (line 56) | class TestReadOperations: method test_getitem_eventually_consistent (line 59) | def test_getitem_eventually_consistent(self, base_table, base_access... method test_getitem_strongly_consistent (line 69) | def test_getitem_strongly_consistent(self, base_table, base_access_p... method test_query_multiple_items (line 80) | def test_query_multiple_items(self, base_table, base_access_pattern): method test_rcu_formula_property (line 97) | def test_rcu_formula_property(self, item_size, strongly_consistent): class TestWriteOperations (line 133) | class TestWriteOperations: method test_putitem_basic (line 136) | def test_putitem_basic(self, base_table, base_access_pattern): method test_putitem_large_item (line 146) | def test_putitem_large_item(self, base_table, base_access_pattern): method test_wcu_formula_property (line 157) | def test_wcu_formula_property(self, item_size): class TestBatchOperations (line 189) | class TestBatchOperations: method test_batchgetitem_per_item_calculation (line 192) | def test_batchgetitem_per_item_calculation(self, base_table, base_ac... method test_batchgetitem_strongly_consistent (line 203) | def test_batchgetitem_strongly_consistent(self, base_table, base_acc... method test_batchwriteitem_per_item_calculation (line 215) | def test_batchwriteitem_per_item_calculation(self, base_table, base_... class TestTransactions (line 226) | class TestTransactions: method test_transact_get_items (line 229) | def test_transact_get_items(self, base_table, base_access_pattern): method test_transact_write_items (line 240) | def test_transact_write_items(self, base_table, base_access_pattern): method test_transaction_capacity_doubling_property (line 256) | def test_transaction_capacity_doubling_property(self, item_size, ite... class TestGSIWriteAmplification (line 320) | class TestGSIWriteAmplification: method test_putitem_with_gsi (line 323) | def test_putitem_with_gsi(self): method test_putitem_with_multiple_gsis (line 355) | def test_putitem_with_multiple_gsis(self): method test_gsi_write_amplification_property (line 390) | def test_gsi_write_amplification_property(self, gsi_size, gsi_count): class TestCostCalculation (line 436) | class TestCostCalculation: method test_read_cost_calculation (line 439) | def test_read_cost_calculation(self, base_table, base_access_pattern): method test_write_cost_calculation (line 451) | def test_write_cost_calculation(self, base_table, base_access_pattern): class TestStorageCalculation (line 463) | class TestStorageCalculation: method test_table_storage (line 466) | def test_table_storage(self): method test_gsi_storage (line 490) | def test_gsi_storage(self): FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model.py function strip_pydantic_error_url (line 37) | def strip_pydantic_error_url(exc: ValidationError) -> str: class TestDataModel (line 45) | class TestDataModel: method minimal_calculator_input (line 49) | def minimal_calculator_input(self): method test_valid_calculator_input_minimal (line 65) | def test_valid_calculator_input_minimal(self, minimal_calculator_input): method test_valid_calculator_input_multiple_access_patterns (line 72) | def test_valid_calculator_input_multiple_access_patterns(self, minimal... method test_invalid_calculator_input_empty_access_patterns (line 91) | def test_invalid_calculator_input_empty_access_patterns(self, minimal_... method test_invalid_calculator_input_duplicate_table_names (line 105) | def test_invalid_calculator_input_duplicate_table_names(self, minimal_... method test_invalid_calculator_input_table_not_found (line 118) | def test_invalid_calculator_input_table_not_found(self, minimal_calcul... method test_invalid_calculator_input_gsi_not_found (line 129) | def test_invalid_calculator_input_gsi_not_found(self, minimal_calculat... method test_invalid_calculator_input_gsi_list_not_found (line 152) | def test_invalid_calculator_input_gsi_list_not_found(self, minimal_cal... method test_invalid_calculator_input_ap_size_exceeds_table_size (line 177) | def test_invalid_calculator_input_ap_size_exceeds_table_size(self, min... method test_invalid_calculator_input_ap_size_exceeds_gsi_size (line 191) | def test_invalid_calculator_input_ap_size_exceeds_gsi_size(self, minim... method test_valid_calculator_input_complex_scenario (line 218) | def test_valid_calculator_input_complex_scenario(self, minimal_calcula... class TestDataModelPropertyBased (line 264) | class TestDataModelPropertyBased: method test_valid_getitem_properties (line 271) | def test_valid_getitem_properties(self, item_size, rps): method test_gsi_size_constraint_property (line 296) | def test_gsi_size_constraint_property(self, table_size, gsi_size): method test_batch_get_item_count_property (line 333) | def test_batch_get_item_count_property(self, item_count): method test_batch_write_item_count_property (line 353) | def test_batch_write_item_count_property(self, item_count): method test_table_gsi_count_property (line 373) | def test_table_gsi_count_property(self, gsi_count): class TestFormatLocation (line 403) | class TestFormatLocation: method test_simple_field (line 406) | def test_simple_field(self): method test_nested_field (line 410) | def test_nested_field(self): method test_array_index (line 414) | def test_array_index(self): method test_array_with_field (line 418) | def test_array_with_field(self): method test_deeply_nested (line 422) | def test_deeply_nested(self): method test_empty_location (line 429) | def test_empty_location(self): class TestCustomizeErrorMessage (line 434) | class TestCustomizeErrorMessage: method test_string_too_short (line 437) | def test_string_too_short(self): method test_greater_than (line 443) | def test_greater_than(self): method test_greater_than_equal (line 449) | def test_greater_than_equal(self): method test_less_than_equal (line 455) | def test_less_than_equal(self): method test_unknown_error_type_falls_back (line 466) | def test_unknown_error_type_falls_back(self): method test_empty_context (line 477) | def test_empty_context(self): class TestFormatValidationErrors (line 484) | class TestFormatValidationErrors: method test_gsi_constraint_error (line 487) | def test_gsi_constraint_error(self): method test_gsi_string_too_short_error (line 494) | def test_gsi_string_too_short_error(self): method test_gsi_multiple_errors (line 501) | def test_gsi_multiple_errors(self): method test_table_model_validator_error (line 512) | def test_table_model_validator_error(self): method test_table_nested_array_error (line 527) | def test_table_nested_array_error(self): method test_table_field_validator_error (line 542) | def test_table_field_validator_error(self): method test_access_pattern_model_validator_error (line 557) | def test_access_pattern_model_validator_error(self): method test_access_pattern_field_validator_error (line 577) | def test_access_pattern_field_validator_error(self): method test_datamodel_cross_reference_error (line 592) | def test_datamodel_cross_reference_error(self): method test_datamodel_empty_access_patterns_error (line 611) | def test_datamodel_empty_access_patterns_error(self): method test_missing_required_field (line 624) | def test_missing_required_field(self): method test_discriminated_union_error (line 631) | def test_discriminated_union_error(self): FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model_batch_get_item.py class TestBatchGetItemAccessPattern (line 32) | class TestBatchGetItemAccessPattern: method batchgetitem_pattern (line 36) | def batchgetitem_pattern(self): class TestValid (line 49) | class TestValid: method test_valid_batchgetitem_minimal (line 52) | def test_valid_batchgetitem_minimal(self, batchgetitem_pattern): method test_valid_batchgetitem_max_items (line 59) | def test_valid_batchgetitem_max_items(self, batchgetitem_pattern): class TestInvalid (line 65) | class TestInvalid: method test_invalid_batchgetitem_exceeds_max (line 68) | def test_invalid_batchgetitem_exceeds_max(self, batchgetitem_pattern): class TestCalculateRcus (line 82) | class TestCalculateRcus: method setup_base_pattern (line 86) | def setup_base_pattern(self): method test_linear_scaling_with_item_count (line 105) | def test_linear_scaling_with_item_count(self, item_size, item_count,... method test_strong_consistency_is_double_eventual (line 123) | def test_strong_consistency_is_double_eventual(self, item_size, item... method test_rcus_are_always_positive (line 142) | def test_rcus_are_always_positive(self, item_size, item_count, stron... method test_equivalent_to_item_count_times_single_getitem_rcus (line 156) | def test_equivalent_to_item_count_times_single_getitem_rcus( FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model_batch_write_item.py class TestBatchWriteItemAccessPattern (line 34) | class TestBatchWriteItemAccessPattern: method batchwriteitem_pattern (line 38) | def batchwriteitem_pattern(self): class TestValid (line 50) | class TestValid: method test_valid_batchwriteitem_minimal (line 53) | def test_valid_batchwriteitem_minimal(self, batchwriteitem_pattern): method test_valid_batchwriteitem_max_items (line 60) | def test_valid_batchwriteitem_max_items(self, batchwriteitem_pattern): class TestInvalid (line 66) | class TestInvalid: method test_invalid_batchwriteitem_exceeds_max (line 69) | def test_invalid_batchwriteitem_exceeds_max(self, batchwriteitem_pat... class TestCalculateWcus (line 83) | class TestCalculateWcus: method setup_base_pattern (line 87) | def setup_base_pattern(self): method test_linear_scaling_with_item_count (line 104) | def test_linear_scaling_with_item_count(self, item_size_bytes, item_... method test_equivalent_to_item_count_times_single_write (line 118) | def test_equivalent_to_item_count_times_single_write(self, item_size... method test_wcus_always_positive (line 134) | def test_wcus_always_positive(self, item_size_bytes, item_count): method test_monotonicity_with_item_count (line 150) | def test_monotonicity_with_item_count(self, item_size_bytes, item_co... class TestCalculateGsiWcus (line 160) | class TestCalculateGsiWcus: method test_batchwriteitem_calculate_gsi_wcus_with_item_count (line 163) | def test_batchwriteitem_calculate_gsi_wcus_with_item_count(self, bat... FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model_delete_item.py class TestDeleteItemAccessPattern (line 23) | class TestDeleteItemAccessPattern: method deleteitem_pattern (line 27) | def deleteitem_pattern(self): class TestValid (line 38) | class TestValid: method test_valid_deleteitem_minimal (line 41) | def test_valid_deleteitem_minimal(self, deleteitem_pattern): method test_valid_deleteitem_with_gsi_list (line 47) | def test_valid_deleteitem_with_gsi_list(self, deleteitem_pattern): FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model_get_item.py class TestGetItemAccessPattern (line 31) | class TestGetItemAccessPattern: method getitem_pattern (line 35) | def getitem_pattern(self): class TestValid (line 47) | class TestValid: method test_valid_getitem_minimal (line 50) | def test_valid_getitem_minimal(self, getitem_pattern): method test_valid_getitem_strongly_consistent (line 56) | def test_valid_getitem_strongly_consistent(self, getitem_pattern): class TestInvalid (line 62) | class TestInvalid: method test_invalid_getitem_empty_pattern (line 65) | def test_invalid_getitem_empty_pattern(self, getitem_pattern): method test_invalid_getitem_empty_description (line 78) | def test_invalid_getitem_empty_description(self, getitem_pattern): method test_invalid_getitem_empty_table (line 92) | def test_invalid_getitem_empty_table(self, getitem_pattern): method test_invalid_getitem_zero_rps (line 103) | def test_invalid_getitem_zero_rps(self, getitem_pattern): method test_invalid_getitem_negative_rps (line 116) | def test_invalid_getitem_negative_rps(self, getitem_pattern): method test_invalid_getitem_item_size_exceeds_max (line 130) | def test_invalid_getitem_item_size_exceeds_max(self, getitem_pattern): class TestCalculateRcus (line 144) | class TestCalculateRcus: method setup_base_pattern (line 148) | def setup_base_pattern(self): method test_small_item_eventual_consistency_half_rcu (line 162) | def test_small_item_eventual_consistency_half_rcu(self, item_size): method test_small_item_strong_consistency_one_rcu (line 171) | def test_small_item_strong_consistency_one_rcu(self, item_size): method test_strong_consistency_is_double_eventual (line 180) | def test_strong_consistency_is_double_eventual(self, item_size): method test_exact_4kb_boundaries (line 191) | def test_exact_4kb_boundaries(self, n): method test_monotonicity (line 208) | def test_monotonicity(self, size_a, size_b, strongly_consistent): class TestConsistencyMultiplier (line 220) | class TestConsistencyMultiplier: method test_getitem_consistency_multiplier_eventually_consistent (line 223) | def test_getitem_consistency_multiplier_eventually_consistent(self, ... method test_getitem_consistency_multiplier_strongly_consistent (line 228) | def test_getitem_consistency_multiplier_strongly_consistent(self, ge... FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model_gsi.py class TestGSI (line 32) | class TestGSI: method valid_gsi_data (line 36) | def valid_gsi_data(self): class TestValid (line 40) | class TestValid: method test_valid_gsi_minimal (line 43) | def test_valid_gsi_minimal(self, valid_gsi_data): method test_valid_gsi_max_size (line 50) | def test_valid_gsi_max_size(self): class TestInvalid (line 55) | class TestInvalid: method test_invalid_gsi_empty_name (line 58) | def test_invalid_gsi_empty_name(self, valid_gsi_data): method test_invalid_gsi_item_size_zero (line 69) | def test_invalid_gsi_item_size_zero(self, valid_gsi_data): method test_invalid_gsi_item_size_exceeds_max (line 83) | def test_invalid_gsi_item_size_exceeds_max(self, valid_gsi_data): method test_invalid_gsi_item_count_zero (line 97) | def test_invalid_gsi_item_count_zero(self, valid_gsi_data): method test_invalid_gsi_negative_item_count (line 111) | def test_invalid_gsi_negative_item_count(self, valid_gsi_data): class TestStorageGb (line 125) | class TestStorageGb: method setup_base_data (line 129) | def setup_base_data(self): method test_storage_is_always_positive (line 138) | def test_storage_is_always_positive(self, item_size_bytes, item_count): method test_storage_scales_linearly_with_item_count (line 148) | def test_storage_scales_linearly_with_item_count(self, item_size_byt... method test_storage_exceeds_raw_data_size (line 163) | def test_storage_exceeds_raw_data_size(self, item_size_bytes, item_c... method test_overhead_per_item_is_constant (line 174) | def test_overhead_per_item_is_constant(self, item_size_bytes, item_c... method test_gsi_and_table_storage_are_identical (line 185) | def test_gsi_and_table_storage_are_identical(self, item_size_bytes, ... class TestWriteWcus (line 193) | class TestWriteWcus: method setup_base_data (line 197) | def setup_base_data(self): method test_wcus_are_always_positive_integers (line 205) | def test_wcus_are_always_positive_integers(self, item_size_bytes): method test_items_up_to_1kb_consume_exactly_1_wcu (line 216) | def test_items_up_to_1kb_consume_exactly_1_wcu(self, item_size_bytes): method test_exact_kb_boundaries_consume_exact_wcus (line 225) | def test_exact_kb_boundaries_consume_exact_wcus(self, multiplier): method test_non_boundary_values_round_up (line 237) | def test_non_boundary_values_round_up(self, item_size_bytes): method test_monotonicity (line 247) | def test_monotonicity(self, size_a, size_b): FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model_put_item.py class TestPutItemAccessPattern (line 32) | class TestPutItemAccessPattern: method putitem_pattern (line 36) | def putitem_pattern(self): class TestValid (line 47) | class TestValid: method test_valid_putitem_minimal (line 50) | def test_valid_putitem_minimal(self, putitem_pattern): method test_valid_putitem_with_gsi_list (line 56) | def test_valid_putitem_with_gsi_list(self, putitem_pattern): class TestCalculateWcus (line 62) | class TestCalculateWcus: method setup_base_pattern (line 66) | def setup_base_pattern(self): method test_wcus_always_positive_integer (line 78) | def test_wcus_always_positive_integer(self, size): method test_items_up_to_1kb_consume_exactly_1_wcu (line 89) | def test_items_up_to_1kb_consume_exactly_1_wcu(self, size): method test_exact_kb_boundaries_consume_exact_wcus (line 99) | def test_exact_kb_boundaries_consume_exact_wcus(self, n): method test_non_boundary_values_round_up (line 112) | def test_non_boundary_values_round_up(self, n, extra): method test_monotonicity_larger_items_never_fewer_wcus (line 128) | def test_monotonicity_larger_items_never_fewer_wcus(self, size_a, si... method test_all_write_operations_produce_identical_wcus (line 143) | def test_all_write_operations_produce_identical_wcus(self, size): class TestCalculateGsiWcus (line 158) | class TestCalculateGsiWcus: method test_putitem_calculate_gsi_wcus_no_gsis (line 161) | def test_putitem_calculate_gsi_wcus_no_gsis(self, putitem_pattern): method test_putitem_calculate_gsi_wcus_single_gsi (line 174) | def test_putitem_calculate_gsi_wcus_single_gsi(self, putitem_pattern): method test_putitem_calculate_gsi_wcus_multiple_gsis (line 190) | def test_putitem_calculate_gsi_wcus_multiple_gsis(self, putitem_patt... method test_putitem_calculate_gsi_wcus_gsi_not_in_table (line 210) | def test_putitem_calculate_gsi_wcus_gsi_not_in_table(self, putitem_p... class TestValidation (line 225) | class TestValidation: method test_putitem_gsi_list_validation_empty_name (line 228) | def test_putitem_gsi_list_validation_empty_name(self, putitem_pattern): method test_putitem_gsi_list_validation_duplicate_names (line 235) | def test_putitem_gsi_list_validation_duplicate_names(self, putitem_p... FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model_query.py class TestQueryAccessPattern (line 31) | class TestQueryAccessPattern: method query_pattern (line 35) | def query_pattern(self): class TestValid (line 48) | class TestValid: method test_valid_query_minimal (line 51) | def test_valid_query_minimal(self, query_pattern): method test_valid_query_with_all_options (line 59) | def test_valid_query_with_all_options(self, query_pattern): method test_valid_query_with_gsi (line 68) | def test_valid_query_with_gsi(self, query_pattern): class TestInvalid (line 77) | class TestInvalid: method test_invalid_query_gsi_with_strong_consistency (line 80) | def test_invalid_query_gsi_with_strong_consistency(self, query_patte... method test_invalid_query_zero_item_count (line 96) | def test_invalid_query_zero_item_count(self, query_pattern): class TestCalculateRcus (line 110) | class TestCalculateRcus: method setup_base_pattern (line 114) | def setup_base_pattern(self): method test_eventually_consistent_is_half_of_strongly_consistent (line 132) | def test_eventually_consistent_is_half_of_strongly_consistent( method test_linear_scaling_with_item_count (line 157) | def test_linear_scaling_with_item_count(self, multiplier, item_count): method test_rcus_are_always_positive (line 181) | def test_rcus_are_always_positive(self, item_size_bytes, item_count): method test_monotonicity_with_item_count (line 197) | def test_monotonicity_with_item_count(self, item_size_bytes, count_a... method test_query_and_scan_rcus_are_identical (line 224) | def test_query_and_scan_rcus_are_identical( FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model_scan.py class TestScanAccessPattern (line 26) | class TestScanAccessPattern: method scan_pattern (line 30) | def scan_pattern(self): class TestValid (line 43) | class TestValid: method test_valid_scan_minimal (line 46) | def test_valid_scan_minimal(self, scan_pattern): method test_valid_scan_with_gsi (line 52) | def test_valid_scan_with_gsi(self, scan_pattern): class TestInvalid (line 58) | class TestInvalid: method test_invalid_scan_gsi_with_strong_consistency (line 61) | def test_invalid_scan_gsi_with_strong_consistency(self, scan_pattern): FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model_table.py class TestTable (line 27) | class TestTable: method valid_table_data (line 31) | def valid_table_data(self): class TestValid (line 35) | class TestValid: method test_valid_table_minimal (line 38) | def test_valid_table_minimal(self, valid_table_data): method test_valid_table_with_gsis (line 46) | def test_valid_table_with_gsis(self, valid_table_data): method test_valid_table_max_gsis (line 55) | def test_valid_table_max_gsis(self, valid_table_data): class TestInvalid (line 65) | class TestInvalid: method test_invalid_table_empty_name (line 68) | def test_invalid_table_empty_name(self, valid_table_data): method test_invalid_table_item_count_zero (line 79) | def test_invalid_table_item_count_zero(self, valid_table_data): method test_invalid_table_item_size_exceeds_max (line 93) | def test_invalid_table_item_size_exceeds_max(self, valid_table_data): method test_invalid_table_too_many_gsis (line 107) | def test_invalid_table_too_many_gsis(self, valid_table_data): method test_invalid_table_duplicate_gsi_names (line 124) | def test_invalid_table_duplicate_gsi_names(self, valid_table_data): method test_invalid_table_gsi_size_exceeds_table_size (line 142) | def test_invalid_table_gsi_size_exceeds_table_size(self, valid_table... FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model_transact_get_items.py class TestTransactGetItemsAccessPattern (line 32) | class TestTransactGetItemsAccessPattern: method transactgetitems_pattern (line 36) | def transactgetitems_pattern(self): class TestValid (line 48) | class TestValid: method test_valid_transactgetitems_minimal (line 51) | def test_valid_transactgetitems_minimal(self, transactgetitems_patte... method test_valid_transactgetitems_max_items (line 57) | def test_valid_transactgetitems_max_items(self, transactgetitems_pat... class TestInvalid (line 63) | class TestInvalid: method test_invalid_transactgetitems_exceeds_max (line 66) | def test_invalid_transactgetitems_exceeds_max(self, transactgetitems... class TestCalculateRcus (line 80) | class TestCalculateRcus: method setup_base_pattern (line 84) | def setup_base_pattern(self): method test_transaction_overhead_is_exactly_2x (line 101) | def test_transaction_overhead_is_exactly_2x(self, item_size, item_co... method test_linear_scaling_with_item_count (line 115) | def test_linear_scaling_with_item_count(self, item_size, item_count): method test_rcus_are_always_positive (line 132) | def test_rcus_are_always_positive(self, item_size, item_count): method test_monotonicity_with_item_count (line 145) | def test_monotonicity_with_item_count(self, item_size, count1, count2): FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model_transact_write_items.py class TestTransactWriteItemsAccessPattern (line 34) | class TestTransactWriteItemsAccessPattern: method transactwriteitems_pattern (line 38) | def transactwriteitems_pattern(self): class TestValid (line 50) | class TestValid: method test_valid_transactwriteitems_minimal (line 53) | def test_valid_transactwriteitems_minimal(self, transactwriteitems_p... method test_valid_transactwriteitems_max_items (line 60) | def test_valid_transactwriteitems_max_items(self, transactwriteitems... class TestInvalid (line 66) | class TestInvalid: method test_invalid_transactwriteitems_exceeds_max (line 69) | def test_invalid_transactwriteitems_exceeds_max(self, transactwritei... class TestCalculateWcus (line 83) | class TestCalculateWcus: method setup_base_pattern (line 87) | def setup_base_pattern(self): method test_transaction_overhead_is_2x (line 104) | def test_transaction_overhead_is_2x(self, item_size_bytes, item_count): method test_linear_scaling_with_item_count (line 120) | def test_linear_scaling_with_item_count(self, item_size_bytes, item_... method test_wcus_always_positive (line 134) | def test_wcus_always_positive(self, item_size_bytes, item_count): method test_monotonicity_with_item_count (line 150) | def test_monotonicity_with_item_count(self, item_size_bytes, item_co... class TestCalculateGsiWcus (line 160) | class TestCalculateGsiWcus: method test_transactwriteitems_calculate_gsi_wcus_with_item_count (line 163) | def test_transactwriteitems_calculate_gsi_wcus_with_item_count( FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_data_model_update_item.py class TestUpdateItemAccessPattern (line 23) | class TestUpdateItemAccessPattern: method updateitem_pattern (line 27) | def updateitem_pattern(self): class TestValid (line 38) | class TestValid: method test_valid_updateitem_minimal (line 41) | def test_valid_updateitem_minimal(self, updateitem_pattern): method test_valid_updateitem_with_gsi_list (line 47) | def test_valid_updateitem_with_gsi_list(self, updateitem_pattern): FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_integration.py function test_run_cost_calculator_produces_expected_report (line 35) | def test_run_cost_calculator_produces_expected_report(tmp_path): FILE: src/dynamodb-mcp-server/tests/cost_performance_calculator/test_report_generator.py function data_model (line 42) | def data_model(): function cost_model (line 63) | def cost_model(): class TestGenerateReport (line 87) | class TestGenerateReport: class TestReportStructure (line 90) | class TestReportStructure: method test_report_starts_with_header (line 93) | def test_report_starts_with_header(self, data_model, cost_model): method test_report_contains_access_patterns_section (line 99) | def test_report_contains_access_patterns_section(self, data_model, c... method test_report_contains_storage_section (line 104) | def test_report_contains_storage_section(self, data_model, cost_model): method test_report_contains_gsi_section_when_gsis_exist (line 109) | def test_report_contains_gsi_section_when_gsis_exist(self, data_mode... method test_report_no_gsi_section_when_no_gsis (line 114) | def test_report_no_gsi_section_when_no_gsis(self): method test_report_costs_have_dollar_sign (line 148) | def test_report_costs_have_dollar_sign(self, data_model, cost_model): class TestAccessPatternsTable (line 154) | class TestAccessPatternsTable: method test_access_patterns_table_has_correct_columns (line 157) | def test_access_patterns_table_has_correct_columns(self, data_model,... method test_access_patterns_table_contains_pattern_name (line 165) | def test_access_patterns_table_contains_pattern_name(self, data_mode... method test_access_patterns_table_contains_operation (line 170) | def test_access_patterns_table_contains_operation(self, data_model, ... class TestStorageTable (line 175) | class TestStorageTable: method test_storage_table_has_correct_columns (line 178) | def test_storage_table_has_correct_columns(self, data_model, cost_mo... method test_storage_table_contains_table_name (line 185) | def test_storage_table_contains_table_name(self, data_model, cost_mo... method test_storage_table_contains_type_column (line 191) | def test_storage_table_contains_type_column(self, data_model, cost_m... method test_gsi_storage_has_correct_columns (line 197) | def test_gsi_storage_has_correct_columns(self, data_model, cost_model): method test_gsi_storage_contains_gsi_name (line 204) | def test_gsi_storage_contains_gsi_name(self, data_model, cost_model): class TestMonetaryFormat (line 211) | class TestMonetaryFormat: method test_format_cost_basic (line 214) | def test_format_cost_basic(self): class TestReportGeneratorProperties (line 221) | class TestReportGeneratorProperties: method _make_data_model (line 225) | def _make_data_model(num_patterns, num_tables): method _make_cost_model (line 247) | def _make_cost_model(num_patterns, num_tables): method test_report_contains_all_access_patterns (line 272) | def test_report_contains_all_access_patterns(self, num_patterns, num_t... method test_report_contains_all_tables (line 304) | def test_report_contains_all_tables(self, num_tables): method test_monetary_format_property (line 329) | def test_monetary_format_property(self, cost): class TestReportGeneratorValidation (line 342) | class TestReportGeneratorValidation: method test_generate_report_with_none_data_model_raises_error (line 345) | def test_generate_report_with_none_data_model_raises_error(self): method test_generate_report_with_none_cost_model_raises_error (line 351) | def test_generate_report_with_none_cost_model_raises_error(self, data_... method test_generate_report_with_empty_access_patterns_raises_error (line 356) | def test_generate_report_with_empty_access_patterns_raises_error(self): class TestGSIWriteAmplification (line 366) | class TestGSIWriteAmplification: method _make_write_amp_scenario (line 375) | def _make_write_amp_scenario(): method test_write_amp_row_appears_in_report (line 439) | def test_write_amp_row_appears_in_report(self): method test_write_amp_footnote_present (line 445) | def test_write_amp_footnote_present(self): method test_write_amp_cost_in_gsi_section (line 452) | def test_write_amp_cost_in_gsi_section(self): method test_gsi_section_header_present (line 458) | def test_gsi_section_header_present(self): method test_gsi_total_cost_includes_reads_and_write_amp (line 464) | def test_gsi_total_cost_includes_reads_and_write_amp(self): method test_generate_padded_table_empty_headers (line 472) | def test_generate_padded_table_empty_headers(self): method test_write_amp_skips_unrelated_table_patterns (line 477) | def test_write_amp_skips_unrelated_table_patterns(self): method test_padded_table_row_longer_than_headers (line 546) | def test_padded_table_row_longer_than_headers(self): method test_write_amp_non_matching_gsi_name_skipped (line 553) | def test_write_amp_non_matching_gsi_name_skipped(self): FILE: src/dynamodb-mcp-server/tests/db_analyzer/conftest.py function mysql_plugin (line 24) | def mysql_plugin(): function postgresql_plugin (line 30) | def postgresql_plugin(): function sqlserver_plugin (line 36) | def sqlserver_plugin(): function mysql_connection_params (line 42) | def mysql_connection_params(): FILE: src/dynamodb-mcp-server/tests/db_analyzer/test_analyzer_utils.py class TestBuildConnectionParams (line 33) | class TestBuildConnectionParams: method test_build_connection_params_mysql (line 36) | def test_build_connection_params_mysql(self, tmp_path): method test_build_connection_params_invalid_directory (line 57) | def test_build_connection_params_invalid_directory(self): method test_build_connection_params_unsupported_database (line 67) | def test_build_connection_params_unsupported_database(self, tmp_path): method test_build_connection_params_with_env_vars (line 76) | def test_build_connection_params_with_env_vars(self, tmp_path, monkeyp... method test_build_connection_params_explicit_overrides_env (line 95) | def test_build_connection_params_explicit_overrides_env(self, tmp_path... class TestValidateConnectionParams (line 115) | class TestValidateConnectionParams: method test_validate_connection_params_mysql_missing (line 118) | def test_validate_connection_params_mysql_missing(self): method test_validate_connection_params_mysql_missing_connection_method (line 131) | def test_validate_connection_params_mysql_missing_connection_method(se... method test_validate_connection_params_mysql_with_hostname (line 143) | def test_validate_connection_params_mysql_with_hostname(self): method test_validate_connection_params_all_valid (line 155) | def test_validate_connection_params_all_valid(self): method test_validate_connection_params_unsupported_type (line 173) | def test_validate_connection_params_unsupported_type(self): class TestResolveAndValidatePath (line 185) | class TestResolveAndValidatePath: method test_path_resolution_scenarios (line 188) | def test_path_resolution_scenarios(self): class TestGenerateQueryFile (line 217) | class TestGenerateQueryFile: method test_query_file_generation_scenarios (line 220) | def test_query_file_generation_scenarios(self): class TestParseResultsAndGenerateAnalysis (line 267) | class TestParseResultsAndGenerateAnalysis: method test_result_parsing_scenarios (line 270) | def test_result_parsing_scenarios(self): class TestSaveAnalysisFiles (line 311) | class TestSaveAnalysisFiles: method test_save_analysis_files_empty_results (line 314) | def test_save_analysis_files_empty_results(self): method test_save_analysis_files_with_data (line 324) | def test_save_analysis_files_with_data(self, tmp_path, monkeypatch): method test_save_analysis_files_creation_error (line 364) | def test_save_analysis_files_creation_error(self, tmp_path, monkeypatch): method test_save_analysis_files_with_generation_errors (line 383) | def test_save_analysis_files_with_generation_errors(self, tmp_path, mo... method test_save_analysis_files_markdown_error (line 431) | def test_save_analysis_files_markdown_error(self, tmp_path, monkeypatch): class TestExecuteManagedAnalysis (line 452) | class TestExecuteManagedAnalysis: method test_execute_managed_analysis_success (line 456) | async def test_execute_managed_analysis_success(self, monkeypatch): method test_execute_managed_analysis_all_queries_failed (line 496) | async def test_execute_managed_analysis_all_queries_failed(self, monke... class TestReportBuilding (line 527) | class TestReportBuilding: method test_analysis_report_scenarios (line 530) | def test_analysis_report_scenarios(self): method test_failure_report_scenarios (line 567) | def test_failure_report_scenarios(self): FILE: src/dynamodb-mcp-server/tests/db_analyzer/test_mysql_managed_mode.py class TestMySQLManagedMode (line 25) | class TestMySQLManagedMode: method test_execute_managed_mode_success_with_performance_schema (line 29) | async def test_execute_managed_mode_success_with_performance_schema( method test_execute_managed_mode_performance_schema_disabled (line 54) | async def test_execute_managed_mode_performance_schema_disabled( method test_execute_managed_mode_query_error (line 76) | async def test_execute_managed_mode_query_error(self, mysql_plugin, my... method test_execute_managed_mode_empty_results (line 96) | async def test_execute_managed_mode_empty_results(self, mysql_plugin, ... method test_execute_managed_mode_query_exception (line 117) | async def test_execute_managed_mode_query_exception( method test_execute_managed_mode_mysql_query_failure (line 139) | async def test_execute_managed_mode_mysql_query_failure( class TestMySQLExecuteQueryBatch (line 156) | class TestMySQLExecuteQueryBatch: method test_execute_query_batch_success (line 160) | async def test_execute_query_batch_success(self, mysql_plugin): method test_execute_query_batch_with_error_response (line 182) | async def test_execute_query_batch_with_error_response(self, mysql_plu... method test_execute_query_batch_with_exception (line 204) | async def test_execute_query_batch_with_exception(self, mysql_plugin): method test_execute_query_batch_empty_result (line 226) | async def test_execute_query_batch_empty_result(self, mysql_plugin): method test_execute_query_batch_multiple_queries (line 248) | async def test_execute_query_batch_multiple_queries(self, mysql_plugin): FILE: src/dynamodb-mcp-server/tests/db_analyzer/test_plugins.py class TestPluginQueryDefinitions (line 35) | class TestPluginQueryDefinitions: method test_plugin_has_required_queries (line 46) | def test_plugin_has_required_queries(self, plugin_class, plugin_name): method test_query_structure (line 62) | def test_query_structure(self, plugin_class): method test_helper_functions (line 83) | def test_helper_functions(self, plugin_class): class TestSQLGeneration (line 97) | class TestSQLGeneration: method test_write_queries_to_file (line 108) | def test_write_queries_to_file(self, plugin_class, db_name): method test_mysql_uses_limit (line 126) | def test_mysql_uses_limit(self, mysql_plugin): method test_sqlserver_uses_top (line 137) | def test_sqlserver_uses_top(self, sqlserver_plugin): class TestResultParsing (line 149) | class TestResultParsing: method test_parse_with_pipe_separated_markers (line 153) | def test_parse_with_pipe_separated_markers(self, plugin_class): method test_parse_with_tab_separated_format (line 181) | def test_parse_with_tab_separated_format(self, mysql_plugin): method test_parse_comment_style_markers (line 200) | def test_parse_comment_style_markers(self, mysql_plugin): method test_parse_empty_result (line 218) | def test_parse_empty_result(self, mysql_plugin): method test_parse_multiple_queries (line 236) | def test_parse_multiple_queries(self, mysql_plugin): method test_parse_file_not_found (line 264) | def test_parse_file_not_found(self, mysql_plugin): method test_data_type_conversion (line 269) | def test_data_type_conversion(self, mysql_plugin): method test_convert_negative_numbers (line 292) | def test_convert_negative_numbers(self, mysql_plugin): method test_convert_none_values (line 313) | def test_convert_none_values(self, mysql_plugin): method test_value_error_during_conversion (line 334) | def test_value_error_during_conversion(self, mysql_plugin): method test_skip_row_with_wrong_column_count (line 354) | def test_skip_row_with_wrong_column_count(self, mysql_plugin): method test_skip_row_count_line (line 375) | def test_skip_row_count_line(self, mysql_plugin): method test_save_last_query_without_end_marker (line 394) | def test_save_last_query_without_end_marker(self, mysql_plugin): method test_skip_line_without_separator (line 411) | def test_skip_line_without_separator(self, mysql_plugin): class TestPathTraversalDetection (line 431) | class TestPathTraversalDetection: method test_path_traversal_with_double_dots (line 434) | def test_path_traversal_with_double_dots(self, mysql_plugin): method test_path_traversal_in_middle_of_path (line 439) | def test_path_traversal_in_middle_of_path(self, mysql_plugin): class TestPluginRegistry (line 445) | class TestPluginRegistry: method test_all_plugins_instantiate (line 448) | def test_all_plugins_instantiate(self): method test_plugin_methods_return_correct_types (line 458) | def test_plugin_methods_return_correct_types(self, mysql_plugin): class TestPluginRegistryOperations (line 470) | class TestPluginRegistryOperations: method test_get_plugin_mysql (line 473) | def test_get_plugin_mysql(self): method test_get_plugin_postgresql (line 478) | def test_get_plugin_postgresql(self): method test_get_plugin_sqlserver (line 483) | def test_get_plugin_sqlserver(self): method test_get_plugin_case_insensitive (line 488) | def test_get_plugin_case_insensitive(self): method test_get_plugin_unsupported_type (line 498) | def test_get_plugin_unsupported_type(self): method test_get_supported_types (line 503) | def test_get_supported_types(self): method test_register_plugin (line 512) | def test_register_plugin(self): method test_register_plugin_invalid_type (line 533) | def test_register_plugin_invalid_type(self): class TestManagedModeNotImplemented (line 543) | class TestManagedModeNotImplemented: method test_postgresql_managed_mode_not_implemented (line 547) | async def test_postgresql_managed_mode_not_implemented(self, postgresq... method test_sqlserver_managed_mode_not_implemented (line 553) | async def test_sqlserver_managed_mode_not_implemented(self, sqlserver_... class TestCrossPluginConsistency (line 559) | class TestCrossPluginConsistency: method test_all_plugins_have_schema_queries (line 562) | def test_all_plugins_have_schema_queries(self): method test_query_descriptions_not_empty (line 582) | def test_query_descriptions_not_empty(self): class TestBasePluginHelperMethods (line 592) | class TestBasePluginHelperMethods: method test_get_schema_queries (line 596) | def test_get_schema_queries(self, plugin_class): method test_get_performance_queries (line 610) | def test_get_performance_queries(self, plugin_class): method test_get_queries_by_category_internal (line 622) | def test_get_queries_by_category_internal(self, mysql_plugin): method test_get_query_descriptions_excludes_internal (line 629) | def test_get_query_descriptions_excludes_internal(self, mysql_plugin): method test_apply_result_limit (line 637) | def test_apply_result_limit(self, plugin_class): FILE: src/dynamodb-mcp-server/tests/evals/dynamic_evaluators.py function create_dspy_signature (line 16) | def create_dspy_signature(evaluation_config: EvaluationConfig) -> Type[d... function create_result_dataclass (line 53) | def create_result_dataclass(evaluation_config: EvaluationConfig) -> Type: class DynamicEvaluationEngine (line 89) | class DynamicEvaluationEngine: method __init__ (line 92) | def __init__(self): method _get_evaluator (line 98) | def _get_evaluator(self, evaluation_name: str): method _get_result_class (line 107) | def _get_result_class(self, evaluation_name: str): method _load_expert_knowledge (line 115) | def _load_expert_knowledge(self) -> str: method evaluate (line 133) | def evaluate(self, evaluation_name: str, scenario: Dict[str, Any], con... method _process_results (line 165) | def _process_results(self, evaluation_config: EvaluationConfig, raw_re... FILE: src/dynamodb-mcp-server/tests/evals/evaluation_registry.py class DimensionConfig (line 8) | class DimensionConfig: class EvaluationConfig (line 20) | class EvaluationConfig: class EvaluationRegistry (line 30) | class EvaluationRegistry: method __init__ (line 33) | def __init__(self): method _setup_default_evaluations (line 38) | def _setup_default_evaluations(self): method register_evaluation (line 219) | def register_evaluation(self, evaluation_config: EvaluationConfig): method get_evaluation (line 223) | def get_evaluation(self, name: str) -> EvaluationConfig: method list_evaluations (line 229) | def list_evaluations(self) -> List[str]: FILE: src/dynamodb-mcp-server/tests/evals/logging_config.py function setup_evaluation_logging (line 8) | def setup_evaluation_logging( function get_logger (line 51) | def get_logger(name: str) -> logging.Logger: function init_logging (line 75) | def init_logging(level: str = 'INFO', log_file: Optional[str] = None) ->... FILE: src/dynamodb-mcp-server/tests/evals/multiturn_evaluator.py class ConversationTurn (line 25) | class ConversationTurn: class ConversationResult (line 35) | class ConversationResult: function _to_text (line 41) | def _to_text(x) -> str: function extract_requirements_guidance_sections (line 57) | def extract_requirements_guidance_sections(final_guidance): class StrandsConversationHandler (line 78) | class StrandsConversationHandler: method __init__ (line 81) | def __init__(self, model_id: str = ''): method _setup_mcp_client (line 97) | def _setup_mcp_client(self): method _build_scenario (line 108) | def _build_scenario(self, scenario: Dict[str, Any]) -> str: method simulate_conversation (line 132) | async def simulate_conversation( class ComprehensiveEvaluationResult (line 205) | class ComprehensiveEvaluationResult: class EnhancedMultiTurnEvaluator (line 228) | class EnhancedMultiTurnEvaluator: method __init__ (line 231) | def __init__(self, lm_model: str = ''): method evaluate_with_conversation (line 252) | async def evaluate_with_conversation( method evaluate_scenarios (line 327) | def evaluate_scenarios(self, scenario: Dict[str, Any]) -> Dict[str, Any]: method _get_timestamp (line 372) | def _get_timestamp(self) -> str: FILE: src/dynamodb-mcp-server/tests/evals/scenarios.py function get_scenario_by_complexity (line 232) | def get_scenario_by_complexity( function get_scenario_by_name (line 239) | def get_scenario_by_name(name: str) -> Dict[str, Any]: FILE: src/dynamodb-mcp-server/tests/evals/test_dspy_evals.py function run_evaluation (line 27) | def run_evaluation( function sanitize_model_input (line 85) | def sanitize_model_input(model_input: str) -> Optional[str]: function sanitize_scenario_input (line 105) | def sanitize_scenario_input(scenario_input: str) -> Optional[str]: function list_available_scenarios (line 131) | def list_available_scenarios(): function display_evaluation_results (line 142) | def display_evaluation_results(result: Dict[str, Any], debug) -> None: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/conftest.py function repo_generation_tool_path (line 93) | def repo_generation_tool_path(): function sample_schemas (line 104) | def sample_schemas(): function mock_schema_data (line 132) | def mock_schema_data(): function mock_language_config (line 160) | def mock_language_config(): function generation_output_dir (line 202) | def generation_output_dir(tmp_path): function code_generator (line 210) | def code_generator(repo_generation_tool_path): function pre_generated_social_media (line 265) | def pre_generated_social_media(tmp_path_factory, repo_generation_tool_pa... function ensure_clean_environment (line 302) | def ensure_clean_environment(): function pytest_configure (line 315) | def pytest_configure(config): function pytest_collection_modifyitems (line 321) | def pytest_collection_modifyitems(config, items): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/deals/base_repository.py class OptimisticLockException (line 30) | class OptimisticLockException(Exception): method __init__ (line 33) | def __init__(self, entity_name: str, message: str = 'Item was modified... class EntityConfig (line 39) | class EntityConfig: class ConfigurableEntity (line 50) | class ConfigurableEntity(BaseModel): method get_config (line 56) | def get_config(cls) -> EntityConfig: method pk (line 60) | def pk(self) -> KeyType: method sk (line 64) | def sk(self) -> KeyType | None: method build_pk_for_lookup (line 72) | def build_pk_for_lookup(cls, *args, **kwargs) -> KeyType: method build_sk_for_lookup (line 80) | def build_sk_for_lookup(cls, *args, **kwargs) -> KeyType | None: method get_sk_prefix (line 91) | def get_sk_prefix(cls, **kwargs) -> str: class BaseRepository (line 99) | class BaseRepository(Generic[T]): method __init__ (line 102) | def __init__( method create (line 111) | def create(self, entity: T) -> T: method get (line 149) | def get( method update (line 168) | def update(self, entity: T) -> T: method delete (line 212) | def delete(self, pk: KeyType, sk: KeyType | None = None) -> bool: method delete_entity (line 227) | def delete_entity(self, entity: T) -> bool: method _parse_query_response (line 231) | def _parse_query_response( method _parse_query_response_raw (line 261) | def _parse_query_response_raw( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/deals/entities.py class Deal (line 20) | class Deal(ConfigurableEntity): method get_config (line 33) | def get_config(cls) -> EntityConfig: method build_gsi_pk_for_lookup_deals_by_brand (line 39) | def build_gsi_pk_for_lookup_deals_by_brand(cls, brand_id) -> KeyType: method build_gsi_sk_for_lookup_deals_by_brand (line 44) | def build_gsi_sk_for_lookup_deals_by_brand(cls, created_at) -> KeyType: method build_gsi_pk_for_lookup_deals_by_category (line 49) | def build_gsi_pk_for_lookup_deals_by_category(cls, category_id) -> Key... method build_gsi_sk_for_lookup_deals_by_category (line 54) | def build_gsi_sk_for_lookup_deals_by_category(cls, created_at) -> KeyT... method build_gsi_pk_deals_by_brand (line 60) | def build_gsi_pk_deals_by_brand(self) -> KeyType: method build_gsi_sk_deals_by_brand (line 64) | def build_gsi_sk_deals_by_brand(self) -> KeyType: method build_gsi_pk_deals_by_category (line 68) | def build_gsi_pk_deals_by_category(self) -> KeyType: method build_gsi_sk_deals_by_category (line 72) | def build_gsi_sk_deals_by_category(self) -> KeyType: method get_gsi_pk_prefix_deals_by_brand (line 79) | def get_gsi_pk_prefix_deals_by_brand(cls) -> str: method get_gsi_sk_prefix_deals_by_brand (line 84) | def get_gsi_sk_prefix_deals_by_brand(cls) -> str: method get_gsi_pk_prefix_deals_by_category (line 89) | def get_gsi_pk_prefix_deals_by_category(cls) -> str: method get_gsi_sk_prefix_deals_by_category (line 94) | def get_gsi_sk_prefix_deals_by_category(cls) -> str: class User (line 110) | class User(ConfigurableEntity): method get_config (line 119) | def get_config(cls) -> EntityConfig: class Brand (line 134) | class Brand(ConfigurableEntity): method get_config (line 142) | def get_config(cls) -> EntityConfig: class UserWatch (line 157) | class UserWatch(ConfigurableEntity): method get_config (line 168) | def get_config(cls) -> EntityConfig: method build_gsi_pk_for_lookup_watches_by_brand (line 174) | def build_gsi_pk_for_lookup_watches_by_brand(cls, brand_id) -> KeyType: method build_gsi_sk_for_lookup_watches_by_brand (line 179) | def build_gsi_sk_for_lookup_watches_by_brand(cls, user_id) -> KeyType: method build_gsi_pk_for_lookup_watches_by_category (line 184) | def build_gsi_pk_for_lookup_watches_by_category(cls, category_id) -> K... method build_gsi_pk_for_lookup_watches_by_type (line 189) | def build_gsi_pk_for_lookup_watches_by_type(cls, watch_type) -> KeyType: method build_gsi_sk_for_lookup_watches_by_type (line 194) | def build_gsi_sk_for_lookup_watches_by_type(cls, created_at) -> KeyType: method build_gsi_pk_watches_by_brand (line 200) | def build_gsi_pk_watches_by_brand(self) -> KeyType: method build_gsi_sk_watches_by_brand (line 204) | def build_gsi_sk_watches_by_brand(self) -> KeyType: method build_gsi_pk_watches_by_category (line 208) | def build_gsi_pk_watches_by_category(self) -> KeyType: method build_gsi_pk_watches_by_type (line 212) | def build_gsi_pk_watches_by_type(self) -> KeyType: method build_gsi_sk_watches_by_type (line 216) | def build_gsi_sk_watches_by_type(self) -> KeyType: method get_gsi_pk_prefix_watches_by_brand (line 223) | def get_gsi_pk_prefix_watches_by_brand(cls) -> str: method get_gsi_sk_prefix_watches_by_brand (line 228) | def get_gsi_sk_prefix_watches_by_brand(cls) -> str: method get_gsi_pk_prefix_watches_by_category (line 233) | def get_gsi_pk_prefix_watches_by_category(cls) -> str: method get_gsi_pk_prefix_watches_by_type (line 238) | def get_gsi_pk_prefix_watches_by_type(cls) -> str: method get_gsi_sk_prefix_watches_by_type (line 243) | def get_gsi_sk_prefix_watches_by_type(cls) -> str: class UserActivity (line 259) | class UserActivity(ConfigurableEntity): method get_config (line 267) | def get_config(cls) -> EntityConfig: class TrendingDeal (line 282) | class TrendingDeal(ConfigurableEntity): method get_config (line 293) | def get_config(cls) -> EntityConfig: method build_gsi_pk_for_lookup_trending_by_discount (line 299) | def build_gsi_pk_for_lookup_trending_by_discount(cls, brand_id) -> Key... method build_gsi_sk_for_lookup_trending_by_discount (line 304) | def build_gsi_sk_for_lookup_trending_by_discount(cls, discount_percent... method build_gsi_pk_trending_by_discount (line 310) | def build_gsi_pk_trending_by_discount(self) -> KeyType: method build_gsi_sk_trending_by_discount (line 314) | def build_gsi_sk_trending_by_discount(self) -> KeyType: method get_gsi_pk_prefix_trending_by_discount (line 321) | def get_gsi_pk_prefix_trending_by_discount(cls) -> str: method get_gsi_sk_prefix_trending_by_discount (line 326) | def get_gsi_sk_prefix_trending_by_discount(cls) -> str: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/deals/repositories.py class DealRepository (line 9) | class DealRepository(BaseRepository[Deal]): method __init__ (line 12) | def __init__(self, table_name: str = 'Deals'): method create_deal (line 16) | def create_deal(self, deal: Deal) -> Deal: method get_deal (line 20) | def get_deal(self, deal_id: str) -> Deal | None: method update_deal (line 26) | def update_deal(self, deal: Deal) -> Deal: method delete_deal (line 30) | def delete_deal(self, deal_id: str) -> bool: method put_deal (line 35) | def put_deal(self, deal: Deal) -> Deal | None: method get_deals_by_brand (line 47) | def get_deals_by_brand( method get_deals_by_category (line 83) | def get_deals_by_category( method get_recent_deals_by_brand (line 126) | def get_recent_deals_by_brand( class UserRepository (line 166) | class UserRepository(BaseRepository[User]): method __init__ (line 169) | def __init__(self, table_name: str = 'Users'): method create_user (line 173) | def create_user(self, user: User) -> User: method get_user (line 177) | def get_user(self, user_id: str) -> User | None: method update_user (line 183) | def update_user(self, user: User) -> User: method delete_user (line 187) | def delete_user(self, user_id: str) -> bool: method put_user (line 192) | def put_user(self, user: User) -> User | None: class BrandRepository (line 205) | class BrandRepository(BaseRepository[Brand]): method __init__ (line 208) | def __init__(self, table_name: str = 'Brands'): method create_brand (line 212) | def create_brand(self, brand: Brand) -> Brand: method get_brand (line 216) | def get_brand(self, brand_id: str) -> Brand | None: method update_brand (line 222) | def update_brand(self, brand: Brand) -> Brand: method delete_brand (line 226) | def delete_brand(self, brand_id: str) -> bool: method put_brand (line 231) | def put_brand(self, brand: Brand) -> Brand | None: class UserWatchRepository (line 244) | class UserWatchRepository(BaseRepository[UserWatch]): method __init__ (line 247) | def __init__(self, table_name: str = 'UserWatches'): method create_user_watch (line 251) | def create_user_watch(self, user_watch: UserWatch) -> UserWatch: method get_user_watch (line 255) | def get_user_watch(self, user_id: str, watch_key: str) -> UserWatch | ... method update_user_watch (line 261) | def update_user_watch(self, user_watch: UserWatch) -> UserWatch: method delete_user_watch (line 265) | def delete_user_watch(self, user_id: str, watch_key: str) -> bool: method get_user_watches (line 271) | def get_user_watches( method get_brand_watchers (line 304) | def get_brand_watchers( method get_category_watchers (line 341) | def get_category_watchers( method get_watches_by_type (line 384) | def get_watches_by_type( class UserActivityRepository (line 422) | class UserActivityRepository(BaseRepository[UserActivity]): method __init__ (line 425) | def __init__(self, table_name: str = 'UserActivities'): method create_user_activity (line 429) | def create_user_activity(self, user_activity: UserActivity) -> UserAct... method get_user_activity (line 433) | def get_user_activity( method update_user_activity (line 441) | def update_user_activity(self, user_activity: UserActivity) -> UserAct... method delete_user_activity (line 445) | def delete_user_activity(self, user_id: str, timestamp: str, activity_... method get_user_activities (line 451) | def get_user_activities( method get_user_activities_after (line 484) | def get_user_activities_after( class TrendingDealRepository (line 521) | class TrendingDealRepository(BaseRepository[TrendingDeal]): method __init__ (line 524) | def __init__(self, table_name: str = 'TrendingDeals'): method create_trending_deal (line 528) | def create_trending_deal(self, trending_deal: TrendingDeal) -> Trendin... method get_trending_deal (line 532) | def get_trending_deal(self, category_id: str, engagement_score: int) -... method update_trending_deal (line 538) | def update_trending_deal(self, trending_deal: TrendingDeal) -> Trendin... method delete_trending_deal (line 542) | def delete_trending_deal(self, category_id: str, engagement_score: int... method get_trending_by_category (line 548) | def get_trending_by_category( method get_highly_engaged_deals (line 581) | def get_highly_engaged_deals( method get_high_discount_deals (line 617) | def get_high_discount_deals( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/deals/usage_examples.py class UsageExamples (line 21) | class UsageExamples: method __init__ (line 24) | def __init__(self): method run_examples (line 70) | def run_examples(self, include_additional_access_patterns: bool = False): method _test_additional_access_patterns (line 818) | def _test_additional_access_patterns(self, created_entities: dict): function main (line 1105) | def main(): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/ecommerce/base_repository.py class OptimisticLockException (line 30) | class OptimisticLockException(Exception): method __init__ (line 33) | def __init__(self, entity_name: str, message: str = 'Item was modified... class EntityConfig (line 39) | class EntityConfig: class ConfigurableEntity (line 50) | class ConfigurableEntity(BaseModel): method get_config (line 56) | def get_config(cls) -> EntityConfig: method pk (line 60) | def pk(self) -> KeyType: method sk (line 64) | def sk(self) -> KeyType | None: method build_pk_for_lookup (line 72) | def build_pk_for_lookup(cls, *args, **kwargs) -> KeyType: method build_sk_for_lookup (line 80) | def build_sk_for_lookup(cls, *args, **kwargs) -> KeyType | None: method get_sk_prefix (line 91) | def get_sk_prefix(cls, **kwargs) -> str: class BaseRepository (line 99) | class BaseRepository(Generic[T]): method __init__ (line 102) | def __init__( method create (line 111) | def create(self, entity: T) -> T: method get (line 149) | def get( method update (line 168) | def update(self, entity: T) -> T: method delete (line 212) | def delete(self, pk: KeyType, sk: KeyType | None = None) -> bool: method delete_entity (line 227) | def delete_entity(self, entity: T) -> bool: method _parse_query_response (line 231) | def _parse_query_response( method _parse_query_response_raw (line 261) | def _parse_query_response_raw( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/ecommerce/entities.py class User (line 20) | class User(ConfigurableEntity): method get_config (line 30) | def get_config(cls) -> EntityConfig: class UserAddress (line 45) | class UserAddress(ConfigurableEntity): method get_config (line 57) | def get_config(cls) -> EntityConfig: class Product (line 72) | class Product(ConfigurableEntity): method get_config (line 89) | def get_config(cls) -> EntityConfig: class ProductCategory (line 104) | class ProductCategory(ConfigurableEntity): method get_config (line 112) | def get_config(cls) -> EntityConfig: class ProductReview (line 127) | class ProductReview(ConfigurableEntity): method get_config (line 138) | def get_config(cls) -> EntityConfig: class Order (line 153) | class Order(ConfigurableEntity): method get_config (line 170) | def get_config(cls) -> EntityConfig: class OrderItem (line 185) | class OrderItem(ConfigurableEntity): method get_config (line 196) | def get_config(cls) -> EntityConfig: class UserOrderHistory (line 211) | class UserOrderHistory(ConfigurableEntity): method get_config (line 221) | def get_config(cls) -> EntityConfig: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/ecommerce/repositories.py class UserRepository (line 17) | class UserRepository(BaseRepository[User]): method __init__ (line 20) | def __init__(self, table_name: str = 'UserTable'): method create_user (line 24) | def create_user(self, user: User) -> User: method get_user (line 28) | def get_user(self, user_id: str) -> User | None: method update_user (line 34) | def update_user(self, user: User) -> User: method delete_user (line 38) | def delete_user(self, user_id: str) -> bool: method put_user (line 44) | def put_user(self, user: User) -> User | None: method update_user_profile (line 56) | def update_user_profile(self, user_id: str, email: str) -> User | None: class UserAddressRepository (line 87) | class UserAddressRepository(BaseRepository[UserAddress]): method __init__ (line 90) | def __init__(self, table_name: str = 'UserTable'): method create_user_address (line 94) | def create_user_address(self, user_address: UserAddress) -> UserAddress: method get_user_address (line 98) | def get_user_address(self, user_id: str, address_id: str) -> UserAddre... method update_user_address (line 104) | def update_user_address(self, user_address: UserAddress) -> UserAddress: method delete_user_address (line 108) | def delete_user_address(self, user_id: str, address_id: str) -> bool: method get_user_addresses (line 114) | def get_user_addresses( method add_user_address (line 149) | def add_user_address(self, address: UserAddress) -> UserAddress | None: class ProductRepository (line 162) | class ProductRepository(BaseRepository[Product]): method __init__ (line 165) | def __init__(self, table_name: str = 'ProductTable'): method create_product (line 169) | def create_product(self, product: Product) -> Product: method get_product (line 173) | def get_product(self, product_id: str) -> Product | None: method update_product (line 179) | def update_product(self, product: Product) -> Product: method delete_product (line 183) | def delete_product(self, product_id: str) -> bool: method put_product (line 189) | def put_product(self, product: Product) -> Product | None: method update_product_stock (line 201) | def update_product_stock(self, product_id: str, stock_quantity: int) -... class ProductCategoryRepository (line 232) | class ProductCategoryRepository(BaseRepository[ProductCategory]): method __init__ (line 235) | def __init__(self, table_name: str = 'ProductTable'): method create_product_category (line 239) | def create_product_category(self, product_category: ProductCategory) -... method get_product_category (line 243) | def get_product_category(self, category_name: str, product_id: str) ->... method update_product_category (line 249) | def update_product_category(self, product_category: ProductCategory) -... method delete_product_category (line 253) | def delete_product_category(self, category_name: str, product_id: str)... method get_products_by_category (line 259) | def get_products_by_category( method add_product_to_category (line 292) | def add_product_to_category(self, category_item: ProductCategory) -> P... method get_category_products_after_id (line 304) | def get_category_products_after_id( class ProductReviewRepository (line 341) | class ProductReviewRepository(BaseRepository[ProductReview]): method __init__ (line 344) | def __init__(self, table_name: str = 'ProductTable'): method create_product_review (line 348) | def create_product_review(self, product_review: ProductReview) -> Prod... method get_product_review (line 352) | def get_product_review(self, product_id: str, review_id: str) -> Produ... method update_product_review (line 358) | def update_product_review(self, product_review: ProductReview) -> Prod... method delete_product_review (line 362) | def delete_product_review(self, product_id: str, review_id: str) -> bool: method get_product_reviews (line 368) | def get_product_reviews( method put_product_review (line 403) | def put_product_review(self, review: ProductReview, user: User) -> Pro... method get_product_reviews_by_id_prefix (line 415) | def get_product_reviews_by_id_prefix( class OrderRepository (line 454) | class OrderRepository(BaseRepository[Order]): method __init__ (line 457) | def __init__(self, table_name: str = 'OrderTable'): method create_order (line 461) | def create_order(self, order: Order) -> Order: method get_order (line 465) | def get_order(self, order_id: str) -> Order | None: method update_order (line 471) | def update_order(self, order: Order) -> Order: method delete_order (line 475) | def delete_order(self, order_id: str) -> bool: method put_order (line 481) | def put_order(self, order: Order, user: User) -> Order | None: method update_order_status (line 493) | def update_order_status( class OrderItemRepository (line 526) | class OrderItemRepository(BaseRepository[OrderItem]): method __init__ (line 529) | def __init__(self, table_name: str = 'OrderTable'): method create_order_item (line 533) | def create_order_item(self, order_item: OrderItem) -> OrderItem: method get_order_item (line 537) | def get_order_item(self, order_id: str, product_id: str) -> OrderItem ... method update_order_item (line 543) | def update_order_item(self, order_item: OrderItem) -> OrderItem: method delete_order_item (line 547) | def delete_order_item(self, order_id: str, product_id: str) -> bool: method get_order_items (line 553) | def get_order_items( method add_order_item (line 588) | def add_order_item(self, order_item: OrderItem, product: Product) -> O... class UserOrderHistoryRepository (line 601) | class UserOrderHistoryRepository(BaseRepository[UserOrderHistory]): method __init__ (line 604) | def __init__(self, table_name: str = 'OrderTable'): method create_user_order_history (line 608) | def create_user_order_history(self, user_order_history: UserOrderHisto... method get_user_order_history (line 612) | def get_user_order_history( method update_user_order_history (line 620) | def update_user_order_history(self, user_order_history: UserOrderHisto... method delete_user_order_history (line 624) | def delete_user_order_history(self, user_id: str, order_date: str, ord... method get_user_order_history_list (line 630) | def get_user_order_history_list( method get_user_recent_orders (line 663) | def get_user_recent_orders( method add_order_to_user_history (line 698) | def add_order_to_user_history( method get_user_orders_after_date (line 712) | def get_user_orders_after_date( method get_user_orders_in_date_range (line 748) | def get_user_orders_in_date_range( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/ecommerce/usage_examples.py class UsageExamples (line 32) | class UsageExamples: method __init__ (line 35) | def __init__(self): method run_examples (line 90) | def run_examples(self, include_additional_access_patterns: bool = False): method _test_additional_access_patterns (line 1119) | def _test_additional_access_patterns(self, created_entities: dict): function main (line 1543) | def main(): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/elearning/base_repository.py class OptimisticLockException (line 30) | class OptimisticLockException(Exception): method __init__ (line 33) | def __init__(self, entity_name: str, message: str = 'Item was modified... class EntityConfig (line 39) | class EntityConfig: class ConfigurableEntity (line 50) | class ConfigurableEntity(BaseModel): method get_config (line 56) | def get_config(cls) -> EntityConfig: method pk (line 60) | def pk(self) -> KeyType: method sk (line 64) | def sk(self) -> KeyType | None: method build_pk_for_lookup (line 72) | def build_pk_for_lookup(cls, *args, **kwargs) -> KeyType: method build_sk_for_lookup (line 80) | def build_sk_for_lookup(cls, *args, **kwargs) -> KeyType | None: method get_sk_prefix (line 91) | def get_sk_prefix(cls, **kwargs) -> str: class BaseRepository (line 99) | class BaseRepository(Generic[T]): method __init__ (line 102) | def __init__( method create (line 111) | def create(self, entity: T) -> T: method get (line 149) | def get( method update (line 168) | def update(self, entity: T) -> T: method delete (line 212) | def delete(self, pk: KeyType, sk: KeyType | None = None) -> bool: method delete_entity (line 227) | def delete_entity(self, entity: T) -> bool: method _parse_query_response (line 231) | def _parse_query_response( method _parse_query_response_raw (line 261) | def _parse_query_response_raw( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/elearning/entities.py class TenantCertificate (line 18) | class TenantCertificate(ConfigurableEntity): method get_config (line 35) | def get_config(cls) -> EntityConfig: class TenantCourse (line 50) | class TenantCourse(ConfigurableEntity): method get_config (line 68) | def get_config(cls) -> EntityConfig: class TenantEnrollment (line 84) | class TenantEnrollment(ConfigurableEntity): method get_config (line 99) | def get_config(cls) -> EntityConfig: class TenantLesson (line 114) | class TenantLesson(ConfigurableEntity): method get_config (line 131) | def get_config(cls) -> EntityConfig: class TenantOrganization (line 146) | class TenantOrganization(ConfigurableEntity): method get_config (line 158) | def get_config(cls) -> EntityConfig: class TenantProgress (line 175) | class TenantProgress(ConfigurableEntity): method get_config (line 189) | def get_config(cls) -> EntityConfig: class TenantUser (line 204) | class TenantUser(ConfigurableEntity): method get_config (line 218) | def get_config(cls) -> EntityConfig: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/elearning/repositories.py class TenantCertificateRepository (line 16) | class TenantCertificateRepository(BaseRepository[TenantCertificate]): method __init__ (line 19) | def __init__(self, table_name: str = 'ELearningPlatform'): method create_tenant_certificate (line 23) | def create_tenant_certificate( method get_tenant_certificate (line 29) | def get_tenant_certificate( method update_tenant_certificate (line 37) | def update_tenant_certificate( method delete_tenant_certificate (line 43) | def delete_tenant_certificate( method get_user_certificates (line 51) | def get_user_certificates( method issue_course_certificate (line 88) | def issue_course_certificate(self, certificate: TenantCertificate) -> ... method verify_certificate (line 100) | def verify_certificate( class TenantCourseRepository (line 114) | class TenantCourseRepository(BaseRepository[TenantCourse]): method __init__ (line 117) | def __init__(self, table_name: str = 'ELearningPlatform'): method create_tenant_course (line 121) | def create_tenant_course(self, tenant_course: TenantCourse) -> TenantC... method get_tenant_course (line 125) | def get_tenant_course(self, tenant_id: str, course_id: str) -> TenantC... method update_tenant_course (line 131) | def update_tenant_course(self, tenant_course: TenantCourse) -> TenantC... method delete_tenant_course (line 135) | def delete_tenant_course(self, tenant_id: str, course_id: str) -> bool: method put_tenant_course (line 141) | def put_tenant_course(self, course: TenantCourse) -> TenantCourse | None: method update_course_details (line 153) | def update_course_details( class TenantEnrollmentRepository (line 186) | class TenantEnrollmentRepository(BaseRepository[TenantEnrollment]): method __init__ (line 189) | def __init__(self, table_name: str = 'ELearningPlatform'): method create_tenant_enrollment (line 193) | def create_tenant_enrollment(self, tenant_enrollment: TenantEnrollment... method get_tenant_enrollment (line 197) | def get_tenant_enrollment( method update_tenant_enrollment (line 205) | def update_tenant_enrollment(self, tenant_enrollment: TenantEnrollment... method delete_tenant_enrollment (line 209) | def delete_tenant_enrollment( method get_user_enrollments (line 217) | def get_user_enrollments( method enroll_user_in_course (line 254) | def enroll_user_in_course(self, enrollment: TenantEnrollment) -> Tenan... method update_enrollment_progress (line 266) | def update_enrollment_progress( class TenantLessonRepository (line 305) | class TenantLessonRepository(BaseRepository[TenantLesson]): method __init__ (line 308) | def __init__(self, table_name: str = 'ELearningPlatform'): method create_tenant_lesson (line 312) | def create_tenant_lesson(self, tenant_lesson: TenantLesson) -> TenantL... method get_tenant_lesson (line 316) | def get_tenant_lesson( method update_tenant_lesson (line 324) | def update_tenant_lesson(self, tenant_lesson: TenantLesson) -> TenantL... method delete_tenant_lesson (line 328) | def delete_tenant_lesson( method get_course_lessons (line 336) | def get_course_lessons( method get_specific_lesson (line 373) | def get_specific_lesson( method create_course_lesson (line 386) | def create_course_lesson(self, lesson: TenantLesson) -> TenantLesson |... class TenantOrganizationRepository (line 399) | class TenantOrganizationRepository(BaseRepository[TenantOrganization]): method __init__ (line 402) | def __init__(self, table_name: str = 'ELearningPlatform'): method create_tenant_organization (line 406) | def create_tenant_organization( method get_tenant_organization (line 412) | def get_tenant_organization(self, tenant_id: str) -> TenantOrganizatio... method update_tenant_organization (line 418) | def update_tenant_organization( method delete_tenant_organization (line 424) | def delete_tenant_organization(self, tenant_id: str) -> bool: method put_tenant_organization (line 430) | def put_tenant_organization( class TenantProgressRepository (line 445) | class TenantProgressRepository(BaseRepository[TenantProgress]): method __init__ (line 448) | def __init__(self, table_name: str = 'ELearningPlatform'): method create_tenant_progress (line 452) | def create_tenant_progress(self, tenant_progress: TenantProgress) -> T... method get_tenant_progress (line 456) | def get_tenant_progress( method update_tenant_progress (line 464) | def update_tenant_progress(self, tenant_progress: TenantProgress) -> T... method delete_tenant_progress (line 468) | def delete_tenant_progress( method get_user_course_progress (line 476) | def get_user_course_progress( method record_lesson_progress (line 513) | def record_lesson_progress(self, progress: TenantProgress) -> TenantPr... method update_lesson_progress (line 525) | def update_lesson_progress( class TenantUserRepository (line 565) | class TenantUserRepository(BaseRepository[TenantUser]): method __init__ (line 568) | def __init__(self, table_name: str = 'ELearningPlatform'): method create_tenant_user (line 572) | def create_tenant_user(self, tenant_user: TenantUser) -> TenantUser: method get_tenant_user (line 576) | def get_tenant_user(self, tenant_id: str, user_id: str) -> TenantUser ... method update_tenant_user (line 582) | def update_tenant_user(self, tenant_user: TenantUser) -> TenantUser: method delete_tenant_user (line 586) | def delete_tenant_user(self, tenant_id: str, user_id: str) -> bool: method put_tenant_user (line 592) | def put_tenant_user(self, user: TenantUser) -> TenantUser | None: method update_user_profile (line 604) | def update_user_profile( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/elearning/usage_examples.py class UsageExamples (line 29) | class UsageExamples: method __init__ (line 32) | def __init__(self): method run_examples (line 79) | def run_examples(self, include_additional_access_patterns: bool = False): method _test_additional_access_patterns (line 1128) | def _test_additional_access_patterns(self, created_entities: dict): function main (line 1526) | def main(): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/food_delivery/base_repository.py class OptimisticLockException (line 30) | class OptimisticLockException(Exception): method __init__ (line 33) | def __init__(self, entity_name: str, message: str = 'Item was modified... class EntityConfig (line 39) | class EntityConfig: class ConfigurableEntity (line 50) | class ConfigurableEntity(BaseModel): method get_config (line 56) | def get_config(cls) -> EntityConfig: method pk (line 60) | def pk(self) -> KeyType: method sk (line 64) | def sk(self) -> KeyType | None: method build_pk_for_lookup (line 72) | def build_pk_for_lookup(cls, *args, **kwargs) -> KeyType: method build_sk_for_lookup (line 80) | def build_sk_for_lookup(cls, *args, **kwargs) -> KeyType | None: method get_sk_prefix (line 91) | def get_sk_prefix(cls, **kwargs) -> str: class BaseRepository (line 99) | class BaseRepository(Generic[T]): method __init__ (line 102) | def __init__( method create (line 111) | def create(self, entity: T) -> T: method get (line 149) | def get( method update (line 168) | def update(self, entity: T) -> T: method delete (line 212) | def delete(self, pk: KeyType, sk: KeyType | None = None) -> bool: method delete_entity (line 227) | def delete_entity(self, entity: T) -> bool: method _parse_query_response (line 231) | def _parse_query_response( method _parse_query_response_raw (line 261) | def _parse_query_response_raw( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/food_delivery/entities.py class Delivery (line 19) | class Delivery(ConfigurableEntity): method get_config (line 36) | def get_config(cls) -> EntityConfig: class DeliveryEvent (line 51) | class DeliveryEvent(ConfigurableEntity): method get_config (line 60) | def get_config(cls) -> EntityConfig: class Restaurant (line 75) | class Restaurant(ConfigurableEntity): method get_config (line 85) | def get_config(cls) -> EntityConfig: class Driver (line 100) | class Driver(ConfigurableEntity): method get_config (line 112) | def get_config(cls) -> EntityConfig: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/food_delivery/repositories.py class DeliveryRepository (line 9) | class DeliveryRepository(BaseRepository[Delivery]): method __init__ (line 12) | def __init__(self, table_name: str = 'DeliveryTable'): method create_delivery (line 16) | def create_delivery(self, delivery: Delivery) -> Delivery: method get_delivery (line 20) | def get_delivery(self, customer_id: str, order_date: str, delivery_id:... method update_delivery (line 26) | def update_delivery(self, delivery: Delivery) -> Delivery: method delete_delivery (line 30) | def delete_delivery(self, customer_id: str, order_date: str, delivery_... method get_active_customer_deliveries (line 36) | def get_active_customer_deliveries( method get_customer_deliveries_by_fee_range (line 88) | def get_customer_deliveries_by_fee_range( method get_customer_deliveries_by_status (line 139) | def get_customer_deliveries_by_status( method get_deliveries_with_special_instructions (line 193) | def get_deliveries_with_special_instructions( method get_deliveries_with_min_items (line 241) | def get_deliveries_with_min_items( method get_deliveries_with_items_in_range (line 289) | def get_deliveries_with_items_in_range( method get_high_value_active_deliveries (line 340) | def get_high_value_active_deliveries( method put_delivery (line 392) | def put_delivery(self, delivery: Delivery) -> Delivery | None: class DeliveryEventRepository (line 405) | class DeliveryEventRepository(BaseRepository[DeliveryEvent]): method __init__ (line 408) | def __init__(self, table_name: str = 'DeliveryTable'): method create_delivery_event (line 412) | def create_delivery_event(self, delivery_event: DeliveryEvent) -> Deli... method get_delivery_event (line 416) | def get_delivery_event( method update_delivery_event (line 424) | def update_delivery_event(self, delivery_event: DeliveryEvent) -> Deli... method delete_delivery_event (line 428) | def delete_delivery_event(self, delivery_id: str, event_timestamp: str... method get_delivery_events (line 434) | def get_delivery_events( method get_delivery_events_by_type (line 467) | def get_delivery_events_by_type( class RestaurantRepository (line 516) | class RestaurantRepository(BaseRepository[Restaurant]): method __init__ (line 519) | def __init__(self, table_name: str = 'RestaurantTable'): method create_restaurant (line 523) | def create_restaurant(self, restaurant: Restaurant) -> Restaurant: method get_restaurant (line 527) | def get_restaurant(self, restaurant_id: str) -> Restaurant | None: method update_restaurant (line 533) | def update_restaurant(self, restaurant: Restaurant) -> Restaurant: method delete_restaurant (line 537) | def delete_restaurant(self, restaurant_id: str) -> bool: method scan_restaurants_by_cuisine (line 543) | def scan_restaurants_by_cuisine( method scan_high_rated_active_restaurants (line 586) | def scan_high_rated_active_restaurants( class DriverRepository (line 634) | class DriverRepository(BaseRepository[Driver]): method __init__ (line 637) | def __init__(self, table_name: str = 'DriverTable'): method create_driver (line 641) | def create_driver(self, driver: Driver) -> Driver: method get_driver (line 645) | def get_driver(self, driver_id: str) -> Driver | None: method update_driver (line 651) | def update_driver(self, driver: Driver) -> Driver: method delete_driver (line 655) | def delete_driver(self, driver_id: str) -> bool: method scan_drivers_by_skill (line 660) | def scan_drivers_by_skill( method scan_available_experienced_drivers (line 707) | def scan_available_experienced_drivers( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/food_delivery/usage_examples.py class UsageExamples (line 19) | class UsageExamples: method __init__ (line 22) | def __init__(self): method run_examples (line 53) | def run_examples(self, include_additional_access_patterns: bool = False): method _test_additional_access_patterns (line 596) | def _test_additional_access_patterns(self, created_entities: dict): function main (line 869) | def main(): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/gaming_leaderboard/base_repository.py class OptimisticLockException (line 30) | class OptimisticLockException(Exception): method __init__ (line 33) | def __init__(self, entity_name: str, message: str = 'Item was modified... class EntityConfig (line 39) | class EntityConfig: class ConfigurableEntity (line 50) | class ConfigurableEntity(BaseModel): method get_config (line 56) | def get_config(cls) -> EntityConfig: method pk (line 60) | def pk(self) -> KeyType: method sk (line 64) | def sk(self) -> KeyType | None: method build_pk_for_lookup (line 72) | def build_pk_for_lookup(cls, *args, **kwargs) -> KeyType: method build_sk_for_lookup (line 80) | def build_sk_for_lookup(cls, *args, **kwargs) -> KeyType | None: method get_sk_prefix (line 91) | def get_sk_prefix(cls, **kwargs) -> str: class BaseRepository (line 99) | class BaseRepository(Generic[T]): method __init__ (line 102) | def __init__( method create (line 111) | def create(self, entity: T) -> T: method get (line 149) | def get( method update (line 168) | def update(self, entity: T) -> T: method delete (line 212) | def delete(self, pk: KeyType, sk: KeyType | None = None) -> bool: method delete_entity (line 227) | def delete_entity(self, entity: T) -> bool: method _parse_query_response (line 231) | def _parse_query_response( method _parse_query_response_raw (line 261) | def _parse_query_response_raw( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/gaming_leaderboard/entities.py class Game (line 19) | class Game(ConfigurableEntity): method get_config (line 30) | def get_config(cls) -> EntityConfig: class LeaderboardEntry (line 45) | class LeaderboardEntry(ConfigurableEntity): method get_config (line 55) | def get_config(cls) -> EntityConfig: method build_gsi_pk_for_lookup_player_scores_index (line 61) | def build_gsi_pk_for_lookup_player_scores_index(cls, player_id) -> Key... method build_gsi_sk_for_lookup_player_scores_index (line 66) | def build_gsi_sk_for_lookup_player_scores_index(cls, score) -> KeyType: method build_gsi_pk_player_scores_index (line 72) | def build_gsi_pk_player_scores_index(self) -> KeyType: method build_gsi_sk_player_scores_index (line 76) | def build_gsi_sk_player_scores_index(self) -> KeyType: method get_gsi_pk_prefix_player_scores_index (line 83) | def get_gsi_pk_prefix_player_scores_index(cls) -> str: method get_gsi_sk_prefix_player_scores_index (line 88) | def get_gsi_sk_prefix_player_scores_index(cls) -> str: class PlayerAchievement (line 104) | class PlayerAchievement(ConfigurableEntity): method get_config (line 115) | def get_config(cls) -> EntityConfig: method build_gsi_pk_for_lookup_game_achievements_index (line 121) | def build_gsi_pk_for_lookup_game_achievements_index(cls, game_id) -> K... method build_gsi_sk_for_lookup_game_achievements_index (line 126) | def build_gsi_sk_for_lookup_game_achievements_index(cls, points) -> Ke... method build_gsi_pk_game_achievements_index (line 132) | def build_gsi_pk_game_achievements_index(self) -> KeyType: method build_gsi_sk_game_achievements_index (line 136) | def build_gsi_sk_game_achievements_index(self) -> KeyType: method get_gsi_pk_prefix_game_achievements_index (line 143) | def get_gsi_pk_prefix_game_achievements_index(cls) -> str: method get_gsi_sk_prefix_game_achievements_index (line 148) | def get_gsi_sk_prefix_game_achievements_index(cls) -> str: class TournamentEntry (line 164) | class TournamentEntry(ConfigurableEntity): method get_config (line 175) | def get_config(cls) -> EntityConfig: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/gaming_leaderboard/repositories.py class GameRepository (line 8) | class GameRepository(BaseRepository[Game]): method __init__ (line 11) | def __init__(self, table_name: str = 'GameTable'): method create_game (line 15) | def create_game(self, game: Game) -> Game: method get_game (line 19) | def get_game(self, game_id: str) -> Game | None: method update_game (line 25) | def update_game(self, game: Game) -> Game: method delete_game (line 29) | def delete_game(self, game_id: str) -> bool: method list_games (line 35) | def list_games( method get_game_with_verification (line 66) | def get_game_with_verification(self, game_id: str, verification_code: ... class LeaderboardEntryRepository (line 79) | class LeaderboardEntryRepository(BaseRepository[LeaderboardEntry]): method __init__ (line 82) | def __init__(self, table_name: str = 'LeaderboardTable'): method create_leaderboard_entry (line 86) | def create_leaderboard_entry(self, leaderboard_entry: LeaderboardEntry... method get_leaderboard_entry (line 90) | def get_leaderboard_entry(self, game_id: str, score: int) -> Leaderboa... method update_leaderboard_entry (line 96) | def update_leaderboard_entry(self, leaderboard_entry: LeaderboardEntry... method delete_leaderboard_entry (line 100) | def delete_leaderboard_entry(self, game_id: str, score: int) -> bool: method get_top_scores (line 106) | def get_top_scores( method get_player_scores (line 140) | def get_player_scores( method submit_score (line 176) | def submit_score(self, entry: LeaderboardEntry) -> LeaderboardEntry | ... class PlayerAchievementRepository (line 189) | class PlayerAchievementRepository(BaseRepository[PlayerAchievement]): method __init__ (line 192) | def __init__(self, table_name: str = 'AchievementTable'): method create_player_achievement (line 196) | def create_player_achievement( method get_player_achievement (line 202) | def get_player_achievement( method update_player_achievement (line 210) | def update_player_achievement( method delete_player_achievement (line 216) | def delete_player_achievement(self, player_id: str, achievement_id: st... method get_player_achievements (line 222) | def get_player_achievements( method get_game_achievements (line 255) | def get_game_achievements( method unlock_achievement (line 291) | def unlock_achievement(self, achievement: PlayerAchievement) -> Player... class TournamentEntryRepository (line 304) | class TournamentEntryRepository(BaseRepository[TournamentEntry]): method __init__ (line 307) | def __init__(self, table_name: str = 'TournamentTable'): method create_tournament_entry (line 311) | def create_tournament_entry(self, tournament_entry: TournamentEntry) -... method get_tournament_entry (line 315) | def get_tournament_entry(self, tournament_id: str, ranking: int) -> To... method update_tournament_entry (line 321) | def update_tournament_entry(self, tournament_entry: TournamentEntry) -... method delete_tournament_entry (line 325) | def delete_tournament_entry(self, tournament_id: str, ranking: int) ->... method get_tournament_rankings (line 331) | def get_tournament_rankings( method update_ranking (line 364) | def update_ranking(self, tournament_id: str, ranking: int) -> Tourname... FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/gaming_leaderboard/usage_examples.py class UsageExamples (line 19) | class UsageExamples: method __init__ (line 22) | def __init__(self): method run_examples (line 54) | def run_examples(self, include_additional_access_patterns: bool = False): method _test_additional_access_patterns (line 589) | def _test_additional_access_patterns(self, created_entities: dict): function main (line 777) | def main(): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/package_delivery/base_repository.py class OptimisticLockException (line 30) | class OptimisticLockException(Exception): method __init__ (line 33) | def __init__(self, entity_name: str, message: str = 'Item was modified... class EntityConfig (line 39) | class EntityConfig: class ConfigurableEntity (line 50) | class ConfigurableEntity(BaseModel): method get_config (line 56) | def get_config(cls) -> EntityConfig: method pk (line 60) | def pk(self) -> KeyType: method sk (line 64) | def sk(self) -> KeyType | None: method build_pk_for_lookup (line 72) | def build_pk_for_lookup(cls, *args, **kwargs) -> KeyType: method build_sk_for_lookup (line 80) | def build_sk_for_lookup(cls, *args, **kwargs) -> KeyType | None: method get_sk_prefix (line 91) | def get_sk_prefix(cls, **kwargs) -> str: class BaseRepository (line 99) | class BaseRepository(Generic[T]): method __init__ (line 102) | def __init__( method create (line 111) | def create(self, entity: T) -> T: method get (line 149) | def get( method update (line 168) | def update(self, entity: T) -> T: method delete (line 212) | def delete(self, pk: KeyType, sk: KeyType | None = None) -> bool: method delete_entity (line 227) | def delete_entity(self, entity: T) -> bool: method _parse_query_response (line 231) | def _parse_query_response( method _parse_query_response_raw (line 261) | def _parse_query_response_raw( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/package_delivery/entities.py class Recipient (line 20) | class Recipient(ConfigurableEntity): method get_config (line 29) | def get_config(cls) -> EntityConfig: class Courier (line 44) | class Courier(ConfigurableEntity): method get_config (line 54) | def get_config(cls) -> EntityConfig: class Product (line 69) | class Product(ConfigurableEntity): method get_config (line 80) | def get_config(cls) -> EntityConfig: method build_gsi_pk_for_lookup_products_by_category (line 86) | def build_gsi_pk_for_lookup_products_by_category(cls, city) -> KeyType: method build_gsi_sk_for_lookup_products_by_category (line 91) | def build_gsi_sk_for_lookup_products_by_category(cls, category, sort_k... method build_gsi_pk_products_by_category (line 100) | def build_gsi_pk_products_by_category(self) -> KeyType: method build_gsi_sk_products_by_category (line 104) | def build_gsi_sk_products_by_category(self) -> tuple: method get_gsi_pk_prefix_products_by_category (line 114) | def get_gsi_pk_prefix_products_by_category(cls) -> str: method get_gsi_sk_prefix_products_by_category (line 119) | def get_gsi_sk_prefix_products_by_category(cls) -> str: class Rating (line 135) | class Rating(ConfigurableEntity): method get_config (line 145) | def get_config(cls) -> EntityConfig: class WarehouseProfile (line 160) | class WarehouseProfile(ConfigurableEntity): method get_config (line 172) | def get_config(cls) -> EntityConfig: method build_gsi_pk_for_lookup_warehouses_by_city (line 178) | def build_gsi_pk_for_lookup_warehouses_by_city(cls, city) -> KeyType: method build_gsi_sk_for_lookup_warehouses_by_city (line 183) | def build_gsi_sk_for_lookup_warehouses_by_city(cls, category, rating) ... method build_gsi_pk_for_lookup_warehouses_by_name (line 191) | def build_gsi_pk_for_lookup_warehouses_by_name(cls, city) -> KeyType: method build_gsi_sk_for_lookup_warehouses_by_name (line 196) | def build_gsi_sk_for_lookup_warehouses_by_name(cls, name) -> KeyType: method build_gsi_pk_warehouses_by_city (line 202) | def build_gsi_pk_warehouses_by_city(self) -> KeyType: method build_gsi_sk_warehouses_by_city (line 206) | def build_gsi_sk_warehouses_by_city(self) -> tuple: method build_gsi_pk_warehouses_by_name (line 213) | def build_gsi_pk_warehouses_by_name(self) -> KeyType: method build_gsi_sk_warehouses_by_name (line 217) | def build_gsi_sk_warehouses_by_name(self) -> KeyType: method get_gsi_pk_prefix_warehouses_by_city (line 224) | def get_gsi_pk_prefix_warehouses_by_city(cls) -> str: method get_gsi_sk_prefix_warehouses_by_city (line 229) | def get_gsi_sk_prefix_warehouses_by_city(cls) -> str: method get_gsi_pk_prefix_warehouses_by_name (line 234) | def get_gsi_pk_prefix_warehouses_by_name(cls) -> str: method get_gsi_sk_prefix_warehouses_by_name (line 239) | def get_gsi_sk_prefix_warehouses_by_name(cls) -> str: class Shipment (line 255) | class Shipment(ConfigurableEntity): method get_config (line 273) | def get_config(cls) -> EntityConfig: method build_gsi_pk_for_lookup_shipments_by_recipient (line 279) | def build_gsi_pk_for_lookup_shipments_by_recipient(cls, recipient_id) ... method build_gsi_sk_for_lookup_shipments_by_recipient (line 284) | def build_gsi_sk_for_lookup_shipments_by_recipient(cls, status, create... method build_gsi_pk_for_lookup_shipments_by_warehouse (line 292) | def build_gsi_pk_for_lookup_shipments_by_warehouse(cls, warehouse_id) ... method build_gsi_sk_for_lookup_shipments_by_warehouse (line 297) | def build_gsi_sk_for_lookup_shipments_by_warehouse(cls, status, create... method build_gsi_pk_for_lookup_shipments_by_courier (line 305) | def build_gsi_pk_for_lookup_shipments_by_courier(cls, courier_id) -> K... method build_gsi_sk_for_lookup_shipments_by_courier (line 310) | def build_gsi_sk_for_lookup_shipments_by_courier(cls, status, created_... method build_gsi_pk_for_lookup_available_shipments_by_city (line 318) | def build_gsi_pk_for_lookup_available_shipments_by_city(cls, available... method build_gsi_sk_for_lookup_available_shipments_by_city (line 323) | def build_gsi_sk_for_lookup_available_shipments_by_city(cls, created_a... method build_gsi_pk_for_lookup_courier_active_delivery (line 328) | def build_gsi_pk_for_lookup_courier_active_delivery(cls, active_delive... method build_gsi_pk_shipments_by_recipient (line 334) | def build_gsi_pk_shipments_by_recipient(self) -> KeyType: method build_gsi_sk_shipments_by_recipient (line 338) | def build_gsi_sk_shipments_by_recipient(self) -> tuple: method build_gsi_pk_shipments_by_warehouse (line 345) | def build_gsi_pk_shipments_by_warehouse(self) -> KeyType: method build_gsi_sk_shipments_by_warehouse (line 349) | def build_gsi_sk_shipments_by_warehouse(self) -> tuple: method build_gsi_pk_shipments_by_courier (line 356) | def build_gsi_pk_shipments_by_courier(self) -> KeyType: method build_gsi_sk_shipments_by_courier (line 360) | def build_gsi_sk_shipments_by_courier(self) -> tuple: method build_gsi_pk_available_shipments_by_city (line 367) | def build_gsi_pk_available_shipments_by_city(self) -> KeyType: method build_gsi_sk_available_shipments_by_city (line 371) | def build_gsi_sk_available_shipments_by_city(self) -> KeyType: method build_gsi_pk_courier_active_delivery (line 375) | def build_gsi_pk_courier_active_delivery(self) -> KeyType: method get_gsi_pk_prefix_shipments_by_recipient (line 382) | def get_gsi_pk_prefix_shipments_by_recipient(cls) -> str: method get_gsi_sk_prefix_shipments_by_recipient (line 387) | def get_gsi_sk_prefix_shipments_by_recipient(cls) -> str: method get_gsi_pk_prefix_shipments_by_warehouse (line 392) | def get_gsi_pk_prefix_shipments_by_warehouse(cls) -> str: method get_gsi_sk_prefix_shipments_by_warehouse (line 397) | def get_gsi_sk_prefix_shipments_by_warehouse(cls) -> str: method get_gsi_pk_prefix_shipments_by_courier (line 402) | def get_gsi_pk_prefix_shipments_by_courier(cls) -> str: method get_gsi_sk_prefix_shipments_by_courier (line 407) | def get_gsi_sk_prefix_shipments_by_courier(cls) -> str: method get_gsi_pk_prefix_available_shipments_by_city (line 412) | def get_gsi_pk_prefix_available_shipments_by_city(cls) -> str: method get_gsi_sk_prefix_available_shipments_by_city (line 417) | def get_gsi_sk_prefix_available_shipments_by_city(cls) -> str: method get_gsi_pk_prefix_courier_active_delivery (line 422) | def get_gsi_pk_prefix_courier_active_delivery(cls) -> str: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/package_delivery/repositories.py class RecipientRepository (line 10) | class RecipientRepository(BaseRepository[Recipient]): method __init__ (line 13) | def __init__(self, table_name: str = 'Recipients'): method create_recipient (line 17) | def create_recipient(self, recipient: Recipient) -> Recipient: method get_recipient (line 21) | def get_recipient(self, recipient_id: str) -> Recipient | None: method update_recipient (line 27) | def update_recipient(self, recipient: Recipient) -> Recipient: method delete_recipient (line 31) | def delete_recipient(self, recipient_id: str) -> bool: method put_recipient (line 36) | def put_recipient(self, recipient: Recipient) -> Recipient | None: class CourierRepository (line 49) | class CourierRepository(BaseRepository[Courier]): method __init__ (line 52) | def __init__(self, table_name: str = 'Couriers'): method create_courier (line 56) | def create_courier(self, courier: Courier) -> Courier: method get_courier (line 60) | def get_courier(self, courier_id: str) -> Courier | None: method update_courier (line 66) | def update_courier(self, courier: Courier) -> Courier: method delete_courier (line 70) | def delete_courier(self, courier_id: str) -> bool: method register_courier (line 75) | def register_courier(self, courier: Courier) -> Courier | None: class ProductRepository (line 88) | class ProductRepository(BaseRepository[Product]): method __init__ (line 91) | def __init__(self, table_name: str = 'Warehouses'): method create_product (line 95) | def create_product(self, product: Product) -> Product: method get_product (line 99) | def get_product(self, warehouse_id: str, category: str, product_id: st... method update_product (line 105) | def update_product(self, product: Product) -> Product: method delete_product (line 109) | def delete_product(self, warehouse_id: str, category: str, product_id:... method upsert_product (line 115) | def upsert_product(self, product: Product) -> Product | None: method delete_product_with_warehouse_id_and_sort_key (line 127) | def delete_product_with_warehouse_id_and_sort_key( method get_warehouse_products (line 145) | def get_warehouse_products( method get_products_by_city_category (line 184) | def get_products_by_city_category( class RatingRepository (line 231) | class RatingRepository(BaseRepository[Rating]): method __init__ (line 234) | def __init__(self, table_name: str = 'Warehouses'): method create_rating (line 238) | def create_rating(self, rating: Rating) -> Rating: method get_rating (line 242) | def get_rating(self, warehouse_id: str, created_at: str, rating_id: st... method update_rating (line 248) | def update_rating(self, rating: Rating) -> Rating: method delete_rating (line 252) | def delete_rating(self, warehouse_id: str, created_at: str, rating_id:... method put_rating (line 258) | def put_rating(self, rating: Rating) -> Rating | None: method get_warehouse_ratings (line 270) | def get_warehouse_ratings( class WarehouseProfileRepository (line 310) | class WarehouseProfileRepository(BaseRepository[WarehouseProfile]): method __init__ (line 313) | def __init__(self, table_name: str = 'Warehouses'): method create_warehouse_profile (line 317) | def create_warehouse_profile(self, warehouse_profile: WarehouseProfile... method get_warehouse_profile (line 321) | def get_warehouse_profile(self, warehouse_id: str) -> WarehouseProfile... method update_warehouse_profile (line 327) | def update_warehouse_profile(self, warehouse_profile: WarehouseProfile... method delete_warehouse_profile (line 331) | def delete_warehouse_profile(self, warehouse_id: str) -> bool: method create_warehouse (line 337) | def create_warehouse(self, warehouse_profile: WarehouseProfile) -> War... method update_warehouse_profile_with_warehouse_id_and_name (line 349) | def update_warehouse_profile_with_warehouse_id_and_name( method get_warehouses_by_city_category (line 381) | def get_warehouses_by_city_category( method get_warehouses_by_city_category_rating (line 427) | def get_warehouses_by_city_category_rating( method search_warehouses_by_name (line 477) | def search_warehouses_by_name( class ShipmentRepository (line 518) | class ShipmentRepository(BaseRepository[Shipment]): method __init__ (line 521) | def __init__(self, table_name: str = 'Shipments'): method create_shipment (line 525) | def create_shipment(self, shipment: Shipment) -> Shipment: method get_shipment (line 529) | def get_shipment(self, shipment_id: str) -> Shipment | None: method update_shipment (line 535) | def update_shipment(self, shipment: Shipment) -> Shipment: method delete_shipment (line 539) | def delete_shipment(self, shipment_id: str) -> bool: method put_shipment (line 544) | def put_shipment(self, shipment: Shipment) -> Shipment | None: method update_shipment_status (line 556) | def update_shipment_status(self, shipment_id: str, status: str) -> Shi... method accept_delivery (line 584) | def accept_delivery( method update_delivery_status (line 614) | def update_delivery_status(self, shipment_id: str, status: str) -> Shi... method get_recipient_shipments (line 642) | def get_recipient_shipments( method get_recipient_shipments_by_status (line 679) | def get_recipient_shipments_by_status( method get_warehouse_shipments (line 719) | def get_warehouse_shipments( method get_warehouse_shipments_by_status (line 759) | def get_warehouse_shipments_by_status( method get_courier_shipments (line 799) | def get_courier_shipments( method get_courier_shipments_by_status (line 836) | def get_courier_shipments_by_status( method get_available_shipments_by_city (line 876) | def get_available_shipments_by_city( method get_courier_active_delivery (line 913) | def get_courier_active_delivery( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/package_delivery/usage_examples.py class UsageExamples (line 21) | class UsageExamples: method __init__ (line 24) | def __init__(self): method run_examples (line 68) | def run_examples(self, include_additional_access_patterns: bool = False): method _test_additional_access_patterns (line 857) | def _test_additional_access_patterns(self, created_entities: dict): function main (line 1328) | def main(): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/saas/base_repository.py class OptimisticLockException (line 30) | class OptimisticLockException(Exception): method __init__ (line 33) | def __init__(self, entity_name: str, message: str = 'Item was modified... class EntityConfig (line 39) | class EntityConfig: class ConfigurableEntity (line 50) | class ConfigurableEntity(BaseModel): method get_config (line 56) | def get_config(cls) -> EntityConfig: method pk (line 60) | def pk(self) -> KeyType: method sk (line 64) | def sk(self) -> KeyType | None: method build_pk_for_lookup (line 72) | def build_pk_for_lookup(cls, *args, **kwargs) -> KeyType: method build_sk_for_lookup (line 80) | def build_sk_for_lookup(cls, *args, **kwargs) -> KeyType | None: method get_sk_prefix (line 91) | def get_sk_prefix(cls, **kwargs) -> str: class BaseRepository (line 99) | class BaseRepository(Generic[T]): method __init__ (line 102) | def __init__( method create (line 111) | def create(self, entity: T) -> T: method get (line 149) | def get( method update (line 168) | def update(self, entity: T) -> T: method delete (line 212) | def delete(self, pk: KeyType, sk: KeyType | None = None) -> bool: method delete_entity (line 227) | def delete_entity(self, entity: T) -> bool: method _parse_query_response (line 231) | def _parse_query_response( method _parse_query_response_raw (line 261) | def _parse_query_response_raw( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/saas/entities.py class Organization (line 20) | class Organization(ConfigurableEntity): method get_config (line 34) | def get_config(cls) -> EntityConfig: class OrganizationInvite (line 49) | class OrganizationInvite(ConfigurableEntity): method get_config (line 61) | def get_config(cls) -> EntityConfig: class OrganizationMember (line 76) | class OrganizationMember(ConfigurableEntity): method get_config (line 89) | def get_config(cls) -> EntityConfig: class OrganizationProject (line 104) | class OrganizationProject(ConfigurableEntity): method get_config (line 116) | def get_config(cls) -> EntityConfig: class Project (line 131) | class Project(ConfigurableEntity): method get_config (line 149) | def get_config(cls) -> EntityConfig: class ProjectMilestone (line 164) | class ProjectMilestone(ConfigurableEntity): method get_config (line 176) | def get_config(cls) -> EntityConfig: class ProjectTask (line 191) | class ProjectTask(ConfigurableEntity): method get_config (line 203) | def get_config(cls) -> EntityConfig: class Task (line 218) | class Task(ConfigurableEntity): method get_config (line 237) | def get_config(cls) -> EntityConfig: class TaskComment (line 252) | class TaskComment(ConfigurableEntity): method get_config (line 264) | def get_config(cls) -> EntityConfig: class UserTask (line 279) | class UserTask(ConfigurableEntity): method get_config (line 291) | def get_config(cls) -> EntityConfig: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/saas/repositories.py class OrganizationRepository (line 20) | class OrganizationRepository(BaseRepository[Organization]): method __init__ (line 23) | def __init__(self, table_name: str = 'OrganizationTable'): method create_organization (line 27) | def create_organization(self, organization: Organization) -> Organizat... method get_organization (line 31) | def get_organization(self, org_id: str) -> Organization | None: method update_organization (line 37) | def update_organization(self, organization: Organization) -> Organizat... method delete_organization (line 41) | def delete_organization(self, org_id: str) -> bool: method put_organization (line 47) | def put_organization(self, organization: Organization) -> Organization... method update_organization_plan (line 59) | def update_organization_plan( class OrganizationInviteRepository (line 92) | class OrganizationInviteRepository(BaseRepository[OrganizationInvite]): method __init__ (line 95) | def __init__(self, table_name: str = 'OrganizationTable'): method create_organization_invite (line 99) | def create_organization_invite( method get_organization_invite (line 105) | def get_organization_invite(self, org_id: str, invite_id: str) -> Orga... method update_organization_invite (line 111) | def update_organization_invite( method delete_organization_invite (line 117) | def delete_organization_invite(self, org_id: str, invite_id: str) -> b... method get_organization_invites (line 123) | def get_organization_invites( method put_organization_invite (line 158) | def put_organization_invite( class OrganizationMemberRepository (line 173) | class OrganizationMemberRepository(BaseRepository[OrganizationMember]): method __init__ (line 176) | def __init__(self, table_name: str = 'OrganizationTable'): method create_organization_member (line 180) | def create_organization_member( method get_organization_member (line 186) | def get_organization_member(self, org_id: str, user_id: str) -> Organi... method update_organization_member (line 192) | def update_organization_member( method delete_organization_member (line 198) | def delete_organization_member(self, org_id: str, user_id: str) -> bool: method get_organization_members (line 204) | def get_organization_members( method add_organization_member (line 239) | def add_organization_member(self, member: OrganizationMember) -> Organ... method update_member_role (line 251) | def update_member_role( class OrganizationProjectRepository (line 284) | class OrganizationProjectRepository(BaseRepository[OrganizationProject]): method __init__ (line 287) | def __init__(self, table_name: str = 'ProjectTable'): method create_organization_project (line 291) | def create_organization_project( method get_organization_project (line 297) | def get_organization_project( method update_organization_project (line 305) | def update_organization_project( method delete_organization_project (line 311) | def delete_organization_project(self, org_id: str, created_at: str, pr... method get_organization_projects (line 317) | def get_organization_projects( method add_project_to_organization (line 350) | def add_project_to_organization( class ProjectRepository (line 365) | class ProjectRepository(BaseRepository[Project]): method __init__ (line 368) | def __init__(self, table_name: str = 'ProjectTable'): method create_project (line 372) | def create_project(self, project: Project) -> Project: method get_project (line 376) | def get_project(self, project_id: str) -> Project | None: method update_project (line 382) | def update_project(self, project: Project) -> Project: method delete_project (line 386) | def delete_project(self, project_id: str) -> bool: method put_project (line 392) | def put_project(self, project: Project, organization: Organization) ->... method update_project_status (line 404) | def update_project_status( class ProjectMilestoneRepository (line 437) | class ProjectMilestoneRepository(BaseRepository[ProjectMilestone]): method __init__ (line 440) | def __init__(self, table_name: str = 'ProjectTable'): method create_project_milestone (line 444) | def create_project_milestone(self, project_milestone: ProjectMilestone... method get_project_milestone (line 448) | def get_project_milestone(self, project_id: str, milestone_id: str) ->... method update_project_milestone (line 454) | def update_project_milestone(self, project_milestone: ProjectMilestone... method delete_project_milestone (line 458) | def delete_project_milestone(self, project_id: str, milestone_id: str)... method get_project_milestones (line 464) | def get_project_milestones( method put_project_milestone (line 499) | def put_project_milestone(self, milestone: ProjectMilestone) -> Projec... class ProjectTaskRepository (line 512) | class ProjectTaskRepository(BaseRepository[ProjectTask]): method __init__ (line 515) | def __init__(self, table_name: str = 'TaskTable'): method create_project_task (line 519) | def create_project_task(self, project_task: ProjectTask) -> ProjectTask: method get_project_task (line 523) | def get_project_task( method update_project_task (line 531) | def update_project_task(self, project_task: ProjectTask) -> ProjectTask: method delete_project_task (line 535) | def delete_project_task( method get_project_tasks (line 543) | def get_project_tasks( method get_project_tasks_by_status (line 576) | def get_project_tasks_by_status( method add_task_to_project (line 611) | def add_task_to_project(self, project_task: ProjectTask) -> ProjectTas... class TaskRepository (line 624) | class TaskRepository(BaseRepository[Task]): method __init__ (line 627) | def __init__(self, table_name: str = 'TaskTable'): method create_task (line 631) | def create_task(self, task: Task) -> Task: method get_task (line 635) | def get_task(self, task_id: str) -> Task | None: method update_task (line 641) | def update_task(self, task: Task) -> Task: method delete_task (line 645) | def delete_task(self, task_id: str) -> bool: method put_task (line 651) | def put_task(self, task: Task, project: Project) -> Task | None: method update_task_status (line 663) | def update_task_status( class TaskCommentRepository (line 696) | class TaskCommentRepository(BaseRepository[TaskComment]): method __init__ (line 699) | def __init__(self, table_name: str = 'TaskTable'): method create_task_comment (line 703) | def create_task_comment(self, task_comment: TaskComment) -> TaskComment: method get_task_comment (line 707) | def get_task_comment( method update_task_comment (line 715) | def update_task_comment(self, task_comment: TaskComment) -> TaskComment: method delete_task_comment (line 719) | def delete_task_comment(self, task_id: str, created_at: str, comment_i... method get_task_comments (line 725) | def get_task_comments( method add_task_comment (line 760) | def add_task_comment( class UserTaskRepository (line 775) | class UserTaskRepository(BaseRepository[UserTask]): method __init__ (line 778) | def __init__(self, table_name: str = 'TaskTable'): method create_user_task (line 782) | def create_user_task(self, user_task: UserTask) -> UserTask: method get_user_task (line 786) | def get_user_task( method update_user_task (line 794) | def update_user_task(self, user_task: UserTask) -> UserTask: method delete_user_task (line 798) | def delete_user_task(self, user_id: str, status: str, due_date: str, t... method get_user_tasks (line 804) | def get_user_tasks( method get_user_active_tasks (line 837) | def get_user_active_tasks( method assign_task_to_user (line 872) | def assign_task_to_user( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/saas/usage_examples.py class UsageExamples (line 36) | class UsageExamples: method __init__ (line 39) | def __init__(self): method run_examples (line 106) | def run_examples(self, include_additional_access_patterns: bool = False): method _test_additional_access_patterns (line 1480) | def _test_additional_access_patterns(self, created_entities: dict): function main (line 1967) | def main(): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/social_media/base_repository.py class OptimisticLockException (line 30) | class OptimisticLockException(Exception): method __init__ (line 33) | def __init__(self, entity_name: str, message: str = 'Item was modified... class EntityConfig (line 39) | class EntityConfig: class ConfigurableEntity (line 50) | class ConfigurableEntity(BaseModel): method get_config (line 56) | def get_config(cls) -> EntityConfig: method pk (line 60) | def pk(self) -> KeyType: method sk (line 64) | def sk(self) -> KeyType | None: method build_pk_for_lookup (line 72) | def build_pk_for_lookup(cls, *args, **kwargs) -> KeyType: method build_sk_for_lookup (line 80) | def build_sk_for_lookup(cls, *args, **kwargs) -> KeyType | None: method get_sk_prefix (line 91) | def get_sk_prefix(cls, **kwargs) -> str: class BaseRepository (line 99) | class BaseRepository(Generic[T]): method __init__ (line 102) | def __init__( method create (line 111) | def create(self, entity: T) -> T: method get (line 149) | def get( method update (line 168) | def update(self, entity: T) -> T: method delete (line 212) | def delete(self, pk: KeyType, sk: KeyType | None = None) -> bool: method delete_entity (line 227) | def delete_entity(self, entity: T) -> bool: method _parse_query_response (line 231) | def _parse_query_response( method _parse_query_response_raw (line 261) | def _parse_query_response_raw( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/social_media/entities.py class Comment (line 18) | class Comment(ConfigurableEntity): method get_config (line 27) | def get_config(cls) -> EntityConfig: class Follow (line 42) | class Follow(ConfigurableEntity): method get_config (line 49) | def get_config(cls) -> EntityConfig: class Like (line 64) | class Like(ConfigurableEntity): method get_config (line 72) | def get_config(cls) -> EntityConfig: class Post (line 87) | class Post(ConfigurableEntity): method get_config (line 96) | def get_config(cls) -> EntityConfig: class UserProfile (line 111) | class UserProfile(ConfigurableEntity): method get_config (line 118) | def get_config(cls) -> EntityConfig: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/social_media/repositories.py class CommentRepository (line 9) | class CommentRepository(BaseRepository[Comment]): method __init__ (line 12) | def __init__(self, table_name: str = 'SocialMedia'): method create_comment (line 16) | def create_comment(self, comment: Comment) -> Comment: method get_comment (line 20) | def get_comment(self, user_id: str, post_id: str, comment_id: str) -> ... method update_comment (line 26) | def update_comment(self, comment: Comment) -> Comment: method delete_comment (line 30) | def delete_comment(self, user_id: str, post_id: str, comment_id: str) ... method get_post_comments (line 36) | def get_post_comments( method add_comment (line 73) | def add_comment(self, comment: Comment) -> Comment | None: method get_comments_for_post_range (line 85) | def get_comments_for_post_range( class FollowRepository (line 126) | class FollowRepository(BaseRepository[Follow]): method __init__ (line 129) | def __init__(self, table_name: str = 'SocialMedia'): method create_follow (line 133) | def create_follow(self, follow: Follow) -> Follow: method get_follow (line 137) | def get_follow(self, user_id: str, follower_id: str) -> Follow | None: method update_follow (line 143) | def update_follow(self, follow: Follow) -> Follow: method delete_follow (line 147) | def delete_follow(self, user_id: str, follower_id: str) -> bool: method follow_user (line 153) | def follow_user(self, follow: Follow) -> Follow | None: method unfollow_user (line 165) | def unfollow_user(self, user_id: str, follower_id: str) -> Follow | None: method get_user_followers (line 181) | def get_user_followers( method get_user_following (line 210) | def get_user_following( class LikeRepository (line 246) | class LikeRepository(BaseRepository[Like]): method __init__ (line 249) | def __init__(self, table_name: str = 'SocialMedia'): method create_like (line 253) | def create_like(self, like: Like) -> Like: method get_like (line 257) | def get_like(self, user_id: str, post_id: str, liker_user_id: str) -> ... method update_like (line 263) | def update_like(self, like: Like) -> Like: method delete_like (line 267) | def delete_like(self, user_id: str, post_id: str, liker_user_id: str) ... method like_post (line 273) | def like_post(self, like: Like) -> Like | None: method unlike_post (line 285) | def unlike_post(self, user_id: str, post_id: str, liker_user_id: str) ... method get_post_likes (line 301) | def get_post_likes( method get_likes_after_prefix (line 338) | def get_likes_after_prefix( class PostRepository (line 377) | class PostRepository(BaseRepository[Post]): method __init__ (line 380) | def __init__(self, table_name: str = 'SocialMedia'): method create_post (line 384) | def create_post(self, post: Post) -> Post: method get_post (line 388) | def get_post(self, user_id: str, post_id: str) -> Post | None: method update_post (line 394) | def update_post(self, post: Post) -> Post: method delete_post (line 398) | def delete_post(self, user_id: str, post_id: str) -> bool: method put_post (line 404) | def put_post(self, post: Post) -> Post | None: method get_user_posts (line 416) | def get_user_posts( method get_user_posts_by_prefix (line 451) | def get_user_posts_by_prefix( class UserProfileRepository (line 490) | class UserProfileRepository(BaseRepository[UserProfile]): method __init__ (line 493) | def __init__(self, table_name: str = 'SocialMedia'): method create_user_profile (line 497) | def create_user_profile(self, user_profile: UserProfile) -> UserProfile: method get_user_profile (line 501) | def get_user_profile(self, user_id: str) -> UserProfile | None: method update_user_profile (line 507) | def update_user_profile(self, user_profile: UserProfile) -> UserProfile: method delete_user_profile (line 511) | def delete_user_profile(self, user_id: str) -> bool: method get_user_profile_and_posts (line 517) | def get_user_profile_and_posts( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/social_media/usage_examples.py class UsageExamples (line 19) | class UsageExamples: method __init__ (line 22) | def __init__(self): method run_examples (line 57) | def run_examples(self, include_additional_access_patterns: bool = False): method _test_additional_access_patterns (line 669) | def _test_additional_access_patterns(self, created_entities: dict): function main (line 951) | def main(): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/user_analytics/base_repository.py class OptimisticLockException (line 30) | class OptimisticLockException(Exception): method __init__ (line 33) | def __init__(self, entity_name: str, message: str = 'Item was modified... class EntityConfig (line 39) | class EntityConfig: class ConfigurableEntity (line 50) | class ConfigurableEntity(BaseModel): method get_config (line 56) | def get_config(cls) -> EntityConfig: method pk (line 60) | def pk(self) -> KeyType: method sk (line 64) | def sk(self) -> KeyType | None: method build_pk_for_lookup (line 72) | def build_pk_for_lookup(cls, *args, **kwargs) -> KeyType: method build_sk_for_lookup (line 80) | def build_sk_for_lookup(cls, *args, **kwargs) -> KeyType | None: method get_sk_prefix (line 91) | def get_sk_prefix(cls, **kwargs) -> str: class BaseRepository (line 99) | class BaseRepository(Generic[T]): method __init__ (line 102) | def __init__( method create (line 111) | def create(self, entity: T) -> T: method get (line 149) | def get( method update (line 168) | def update(self, entity: T) -> T: method delete (line 212) | def delete(self, pk: KeyType, sk: KeyType | None = None) -> bool: method delete_entity (line 227) | def delete_entity(self, entity: T) -> bool: method _parse_query_response (line 231) | def _parse_query_response( method _parse_query_response_raw (line 261) | def _parse_query_response_raw( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/user_analytics/entities.py class User (line 18) | class User(ConfigurableEntity): method get_config (line 33) | def get_config(cls) -> EntityConfig: method build_gsi_pk_for_lookup_status_index (line 39) | def build_gsi_pk_for_lookup_status_index(cls, status) -> KeyType: method build_gsi_sk_for_lookup_status_index (line 44) | def build_gsi_sk_for_lookup_status_index(cls, last_active) -> KeyType: method build_gsi_pk_for_lookup_location_index (line 49) | def build_gsi_pk_for_lookup_location_index(cls, country) -> KeyType: method build_gsi_sk_for_lookup_location_index (line 54) | def build_gsi_sk_for_lookup_location_index(cls, city) -> KeyType: method build_gsi_pk_for_lookup_engagement_index (line 59) | def build_gsi_pk_for_lookup_engagement_index(cls, engagement_level) ->... method build_gsi_sk_for_lookup_engagement_index (line 64) | def build_gsi_sk_for_lookup_engagement_index(cls, session_count) -> Ke... method build_gsi_pk_for_lookup_age_group_index (line 69) | def build_gsi_pk_for_lookup_age_group_index(cls, age_group) -> KeyType: method build_gsi_sk_for_lookup_age_group_index (line 74) | def build_gsi_sk_for_lookup_age_group_index(cls, signup_date) -> KeyType: method build_gsi_pk_status_index (line 80) | def build_gsi_pk_status_index(self) -> KeyType: method build_gsi_sk_status_index (line 84) | def build_gsi_sk_status_index(self) -> KeyType: method build_gsi_pk_location_index (line 88) | def build_gsi_pk_location_index(self) -> KeyType: method build_gsi_sk_location_index (line 92) | def build_gsi_sk_location_index(self) -> KeyType: method build_gsi_pk_engagement_index (line 96) | def build_gsi_pk_engagement_index(self) -> KeyType: method build_gsi_sk_engagement_index (line 100) | def build_gsi_sk_engagement_index(self) -> KeyType: method build_gsi_pk_age_group_index (line 104) | def build_gsi_pk_age_group_index(self) -> KeyType: method build_gsi_sk_age_group_index (line 108) | def build_gsi_sk_age_group_index(self) -> KeyType: method get_gsi_pk_prefix_status_index (line 115) | def get_gsi_pk_prefix_status_index(cls) -> str: method get_gsi_sk_prefix_status_index (line 120) | def get_gsi_sk_prefix_status_index(cls) -> str: method get_gsi_pk_prefix_location_index (line 125) | def get_gsi_pk_prefix_location_index(cls) -> str: method get_gsi_sk_prefix_location_index (line 130) | def get_gsi_sk_prefix_location_index(cls) -> str: method get_gsi_pk_prefix_engagement_index (line 135) | def get_gsi_pk_prefix_engagement_index(cls) -> str: method get_gsi_sk_prefix_engagement_index (line 140) | def get_gsi_sk_prefix_engagement_index(cls) -> str: method get_gsi_pk_prefix_age_group_index (line 145) | def get_gsi_pk_prefix_age_group_index(cls) -> str: method get_gsi_sk_prefix_age_group_index (line 150) | def get_gsi_sk_prefix_age_group_index(cls) -> str: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/user_analytics/repositories.py class UserRepository (line 8) | class UserRepository(BaseRepository[User]): method __init__ (line 11) | def __init__(self, table_name: str = 'UserAnalytics'): method create_user (line 15) | def create_user(self, user: User) -> User: method get_user (line 19) | def get_user(self, user_id: str) -> User | None: method update_user (line 25) | def update_user(self, user: User) -> User: method delete_user (line 29) | def delete_user(self, user_id: str) -> bool: method get_active_users (line 35) | def get_active_users( method get_recent_active_users (line 71) | def get_recent_active_users( method get_users_by_location (line 110) | def get_users_by_location( method get_users_by_country_prefix (line 148) | def get_users_by_country_prefix( method get_users_by_engagement_level (line 187) | def get_users_by_engagement_level( method get_highly_engaged_users_by_session_range (line 223) | def get_highly_engaged_users_by_session_range( method get_users_by_age_group (line 264) | def get_users_by_age_group( method get_recent_signups_by_age_group (line 300) | def get_recent_signups_by_age_group( method get_users_signup_date_range (line 339) | def get_users_signup_date_range( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/user_analytics/usage_examples.py class UsageExamples (line 13) | class UsageExamples: method __init__ (line 16) | def __init__(self): method run_examples (line 27) | def run_examples(self, include_additional_access_patterns: bool = False): method _test_additional_access_patterns (line 175) | def _test_additional_access_patterns(self, created_entities: dict): function main (line 332) | def main(): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/user_registration/base_repository.py class OptimisticLockException (line 30) | class OptimisticLockException(Exception): method __init__ (line 33) | def __init__(self, entity_name: str, message: str = 'Item was modified... class EntityConfig (line 39) | class EntityConfig: class ConfigurableEntity (line 50) | class ConfigurableEntity(BaseModel): method get_config (line 56) | def get_config(cls) -> EntityConfig: method pk (line 60) | def pk(self) -> KeyType: method sk (line 64) | def sk(self) -> KeyType | None: method build_pk_for_lookup (line 72) | def build_pk_for_lookup(cls, *args, **kwargs) -> KeyType: method build_sk_for_lookup (line 80) | def build_sk_for_lookup(cls, *args, **kwargs) -> KeyType | None: method get_sk_prefix (line 91) | def get_sk_prefix(cls, **kwargs) -> str: class BaseRepository (line 99) | class BaseRepository(Generic[T]): method __init__ (line 102) | def __init__( method create (line 111) | def create(self, entity: T) -> T: method get (line 149) | def get( method update (line 168) | def update(self, entity: T) -> T: method delete (line 212) | def delete(self, pk: KeyType, sk: KeyType | None = None) -> bool: method delete_entity (line 227) | def delete_entity(self, entity: T) -> bool: method _parse_query_response (line 231) | def _parse_query_response( method _parse_query_response_raw (line 261) | def _parse_query_response_raw( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/user_registration/entities.py class User (line 18) | class User(ConfigurableEntity): method get_config (line 25) | def get_config(cls) -> EntityConfig: class EmailLookup (line 40) | class EmailLookup(ConfigurableEntity): method get_config (line 45) | def get_config(cls) -> EntityConfig: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/user_registration/repositories.py class UserRepository (line 8) | class UserRepository(BaseRepository[User]): method __init__ (line 11) | def __init__(self, table_name: str = 'Users'): method create_user (line 15) | def create_user(self, user: User) -> User: method get_user (line 19) | def get_user(self, user_id: str) -> User | None: method update_user (line 25) | def update_user(self, user: User) -> User: method delete_user (line 29) | def delete_user(self, user_id: str) -> bool: class EmailLookupRepository (line 35) | class EmailLookupRepository(BaseRepository[EmailLookup]): method __init__ (line 38) | def __init__(self, table_name: str = 'EmailLookup'): method create_email_lookup (line 42) | def create_email_lookup(self, email_lookup: EmailLookup) -> EmailLookup: method get_email_lookup (line 46) | def get_email_lookup(self, email: str) -> EmailLookup | None: method update_email_lookup (line 52) | def update_email_lookup(self, email_lookup: EmailLookup) -> EmailLookup: method delete_email_lookup (line 56) | def delete_email_lookup(self, email: str) -> bool: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/user_registration/transaction_service.py class TransactionService (line 21) | class TransactionService: method __init__ (line 32) | def __init__(self, dynamodb_resource: boto3.resource): method register_user (line 42) | def register_user(self, user: User, email_lookup: EmailLookup) -> bool: method delete_user_with_email (line 108) | def delete_user_with_email(self, user_id: str, email: str) -> bool: method get_user_and_email (line 170) | def get_user_and_email(self, user_id: str, email: str) -> dict[str, Any]: FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/fixtures/expected_outputs/python/user_registration/usage_examples.py class UsageExamples (line 24) | class UsageExamples: method __init__ (line 27) | def __init__(self): method run_examples (line 56) | def run_examples(self, include_additional_access_patterns: bool = False): method _test_additional_access_patterns (line 299) | def _test_additional_access_patterns(self, created_entities: dict): method _test_cross_table_patterns (line 307) | def _test_cross_table_patterns(self, created_entities: dict): function main (line 544) | def main(): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/integration/test_cli_integration.py class TestCLIIntegration (line 8) | class TestCLIIntegration: method _run_cli (line 11) | def _run_cli(self, repo_generation_tool_path, args): method test_cli_help_command (line 23) | def test_cli_help_command(self, repo_generation_tool_path): method test_cli_with_all_options (line 34) | def test_cli_with_all_options(self, tmp_path, sample_schemas, repo_gen... method test_cli_error_handling_nonexistent_schema (line 61) | def test_cli_error_handling_nonexistent_schema(self, tmp_path, repo_ge... method test_cli_validation_only_mode (line 74) | def test_cli_validation_only_mode(self, sample_schemas, repo_generatio... method test_cli_invalid_schema_validation (line 85) | def test_cli_invalid_schema_validation(self, sample_schemas, repo_gene... method test_cli_custom_output_directory (line 96) | def test_cli_custom_output_directory( method test_cli_no_lint_option (line 119) | def test_cli_no_lint_option(self, tmp_path, sample_schemas, repo_gener... method test_cli_language_option (line 142) | def test_cli_language_option(self, tmp_path, sample_schemas, repo_gene... method test_cli_generator_option (line 165) | def test_cli_generator_option(self, tmp_path, sample_schemas, repo_gen... method test_cli_output_messages (line 187) | def test_cli_output_messages(self, tmp_path, sample_schemas, repo_gene... FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/integration/test_consistent_read_integration.py class TestConsistentReadIntegration (line 13) | class TestConsistentReadIntegration: method test_schema_with_consistent_read_generates_correct_code (line 16) | def test_schema_with_consistent_read_generates_correct_code( method test_validation_catches_gsi_violations (line 81) | def test_validation_catches_gsi_violations(self, generation_output_dir... method test_generated_code_can_be_imported (line 163) | def test_generated_code_can_be_imported( method test_access_pattern_mapping_includes_consistent_read (line 227) | def test_access_pattern_mapping_includes_consistent_read( method test_validation_accepts_valid_consistent_read_configurations (line 292) | def test_validation_accepts_valid_consistent_read_configurations( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/integration/test_filter_expression_generation.py class TestFilterExpressionGeneration (line 11) | class TestFilterExpressionGeneration: method test_food_delivery_schema_generates_successfully (line 14) | def test_food_delivery_schema_generates_successfully( method test_repositories_contain_filter_params_in_signatures (line 24) | def test_repositories_contain_filter_params_in_signatures( method test_repositories_contain_filter_docstrings (line 47) | def test_repositories_contain_filter_docstrings( method test_repositories_contain_filter_implementation_hints (line 61) | def test_repositories_contain_filter_implementation_hints( method test_all_filter_variants_present (line 77) | def test_all_filter_variants_present( method test_access_pattern_mapping_includes_filter_metadata (line 103) | def test_access_pattern_mapping_includes_filter_metadata( method test_no_regressions_on_non_filter_patterns (line 130) | def test_no_regressions_on_non_filter_patterns( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/integration/test_gsi_pipeline_integration.py class TestGSIPipelineIntegration (line 12) | class TestGSIPipelineIntegration: method test_user_analytics_gsi_generation (line 15) | def test_user_analytics_gsi_generation(self, generation_output_dir, co... method test_gsi_entity_structure_generation (line 55) | def test_gsi_entity_structure_generation(self, generation_output_dir, ... method test_gsi_repository_method_generation (line 102) | def test_gsi_repository_method_generation(self, generation_output_dir,... method test_gsi_method_documentation_generation (line 147) | def test_gsi_method_documentation_generation(self, generation_output_d... method test_gsi_sample_data_generation (line 189) | def test_gsi_sample_data_generation(self, generation_output_dir, code_... method test_generated_gsi_code_imports_successfully (line 230) | def test_generated_gsi_code_imports_successfully(self, generation_outp... method _verify_python_syntax (line 294) | def _verify_python_syntax(self, file_path: Path): class TestGSIValidationIntegration (line 306) | class TestGSIValidationIntegration: method test_valid_gsi_schema_passes_validation (line 309) | def test_valid_gsi_schema_passes_validation(self, code_generator, tmp_... method test_invalid_gsi_schema_fails_validation (line 324) | def test_invalid_gsi_schema_fails_validation(self, code_generator, tmp... method test_gsi_error_recovery_and_reporting (line 360) | def test_gsi_error_recovery_and_reporting(self, code_generator, tmp_pa... method test_invalid_multi_attribute_keys_schema_fails_validation (line 393) | def test_invalid_multi_attribute_keys_schema_fails_validation(self, co... class TestGSIComprehensiveIntegration (line 429) | class TestGSIComprehensiveIntegration: method test_gsi_access_pattern_mapping_generation (line 432) | def test_gsi_access_pattern_mapping_generation(self, generation_output... method test_end_to_end_gsi_pipeline_with_sample_usage (line 483) | def test_end_to_end_gsi_pipeline_with_sample_usage( method _verify_python_syntax (line 543) | def _verify_python_syntax(self, file_path: Path): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/integration/test_python_code_generation_pipeline.py class TestPythonCodeGenerationPipeline (line 22) | class TestPythonCodeGenerationPipeline: method test_social_media_app_generation (line 25) | def test_social_media_app_generation( method test_ecommerce_multi_table_generation (line 61) | def test_ecommerce_multi_table_generation( method test_validation_only_mode (line 92) | def test_validation_only_mode(self, sample_schemas, code_generator, tm... method test_invalid_schema_handling (line 108) | def test_invalid_schema_handling(self, sample_schemas, code_generator,... method test_generated_code_imports_successfully (line 127) | def test_generated_code_imports_successfully( method test_multiple_schemas_parallel (line 171) | def test_multiple_schemas_parallel(self, tmp_path, sample_schemas, cod... method test_gsi_projection_keys_only_returns_dict (line 193) | def test_gsi_projection_keys_only_returns_dict( method test_gsi_projection_include_safe_returns_entity (line 208) | def test_gsi_projection_include_safe_returns_entity( method test_gsi_projection_include_unsafe_returns_dict (line 224) | def test_gsi_projection_include_unsafe_returns_dict( method test_gsi_projection_all_returns_entity (line 239) | def test_gsi_projection_all_returns_entity( method test_access_pattern_mapping_includes_projection (line 253) | def test_access_pattern_mapping_includes_projection( method _verify_python_syntax (line 280) | def _verify_python_syntax(self, file_path: Path): class TestSchemaValidationIntegration (line 292) | class TestSchemaValidationIntegration: method test_all_valid_schemas_pass_validation (line 295) | def test_all_valid_schemas_pass_validation(self, sample_schemas, code_... method test_all_invalid_schemas_fail_validation (line 323) | def test_all_invalid_schemas_fail_validation(self, sample_schemas, cod... class TestUsageDataValidationIntegration (line 349) | class TestUsageDataValidationIntegration: method get_schema_entities (line 352) | def get_schema_entities(self, schema_file_path: str): method test_all_valid_usage_data_files_pass_validation (line 361) | def test_all_valid_usage_data_files_pass_validation(self, sample_schem... method test_comprehensive_invalid_usage_data_scenarios (line 402) | def test_comprehensive_invalid_usage_data_scenarios(self, sample_schem... method test_usage_data_validation_with_different_schemas (line 442) | def test_usage_data_validation_with_different_schemas(self, sample_sch... method test_usage_data_validation_error_reporting (line 481) | def test_usage_data_validation_error_reporting(self, sample_schemas, t... method test_usage_data_auto_detection_robustness (line 536) | def test_usage_data_auto_detection_robustness(self, sample_schemas, tm... class TestComprehensiveGeneration (line 567) | class TestComprehensiveGeneration: method test_all_sample_schemas_generation (line 570) | def test_all_sample_schemas_generation(self, tmp_path, sample_schemas,... class TestPerformanceOptimizedGeneration (line 596) | class TestPerformanceOptimizedGeneration: method test_with_pre_generated_output (line 599) | def test_with_pre_generated_output(self, pre_generated_social_media): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/integration/test_python_snapshot_generation.py class TestPythonSnapshotGeneration (line 12) | class TestPythonSnapshotGeneration: method test_social_media_snapshot (line 15) | def test_social_media_snapshot(self, generation_output_dir, sample_sch... method test_ecommerce_snapshot (line 42) | def test_ecommerce_snapshot(self, generation_output_dir, sample_schema... method test_elearning_snapshot (line 67) | def test_elearning_snapshot(self, generation_output_dir, sample_schema... method test_gaming_leaderboard_snapshot (line 92) | def test_gaming_leaderboard_snapshot( method test_saas_snapshot (line 119) | def test_saas_snapshot(self, generation_output_dir, sample_schemas, co... method test_user_analytics_snapshot (line 144) | def test_user_analytics_snapshot(self, generation_output_dir, sample_s... method test_deals_snapshot (line 169) | def test_deals_snapshot(self, generation_output_dir, sample_schemas, c... method test_user_registration_snapshot (line 194) | def test_user_registration_snapshot( method test_package_delivery_snapshot (line 222) | def test_package_delivery_snapshot( method _compare_with_snapshot (line 248) | def _compare_with_snapshot( method _create_snapshot (line 276) | def _create_snapshot(self, snapshot_file: Path, generated_file: Path): method _assert_files_match (line 292) | def _assert_files_match( method _assert_json_files_match (line 309) | def _assert_json_files_match( method _fail_with_diff (line 329) | def _fail_with_diff( class TestPythonSnapshotManagement (line 367) | class TestPythonSnapshotManagement: method test_snapshot_directory_structure (line 370) | def test_snapshot_directory_structure(self): method test_json_snapshots_are_valid (line 407) | def test_json_snapshots_are_valid(self): method test_python_snapshots_have_valid_syntax (line 425) | def test_python_snapshots_have_valid_syntax(self): function pytest_configure (line 446) | def pytest_configure(config): function pytest_collection_modifyitems (line 451) | def pytest_collection_modifyitems(config, items): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/integration/test_sparse_gsi_integration.py class TestSparseGSIIntegration (line 7) | class TestSparseGSIIntegration: method test_generated_base_repository_uses_exclude_none (line 10) | def test_generated_base_repository_uses_exclude_none( method test_sparse_gsi_with_optional_key_field (line 28) | def test_sparse_gsi_with_optional_key_field( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/integration/test_transaction_service_generation.py class TestTransactionServiceGeneration (line 11) | class TestTransactionServiceGeneration: method test_generate_transaction_service_with_user_registration (line 14) | def test_generate_transaction_service_with_user_registration( method test_transaction_service_content (line 45) | def test_transaction_service_content( method test_access_pattern_mapping_includes_transactions (line 107) | def test_access_pattern_mapping_includes_transactions( method test_no_transaction_service_without_patterns (line 159) | def test_no_transaction_service_without_patterns( method test_transaction_service_method_signatures (line 179) | def test_transaction_service_method_signatures( method test_transaction_service_linting_passes (line 200) | def test_transaction_service_linting_passes( method test_usage_examples_include_transactions (line 213) | def test_usage_examples_include_transactions( method _verify_python_syntax (line 260) | def _verify_python_syntax(self, file_path: Path): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/scripts/manage_snapshots.py function get_project_root (line 12) | def get_project_root(): function get_snapshots_dir (line 17) | def get_snapshots_dir(language: str = 'python'): function get_repo_generation_tool_path (line 29) | def get_repo_generation_tool_path(): function get_sample_schemas (line 34) | def get_sample_schemas(): function generate_code (line 72) | def generate_code(schema_path: Path, output_dir: Path, **kwargs) -> subp... function create_snapshots (line 108) | def create_snapshots(schema_names: list[str] = None, language: str = 'py... function delete_snapshots (line 180) | def delete_snapshots(schema_names: list[str] = None, language: str = 'py... function list_snapshots (line 196) | def list_snapshots(language: str = None): function validate_snapshots (line 244) | def validate_snapshots(): function run_snapshot_tests (line 280) | def run_snapshot_tests(): function main (line 298) | def main(): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_access_pattern_mapper.py class TestAccessPatternMapper (line 11) | class TestAccessPatternMapper: method mapper (line 15) | def mapper(self, mock_language_config): method sample_entities (line 20) | def sample_entities(self): method test_mapper_initialization (line 72) | def test_mapper_initialization(self, mock_language_config): method test_generate_mapping_structure (line 78) | def test_generate_mapping_structure(self, mapper, sample_entities): method test_empty_access_patterns (line 96) | def test_empty_access_patterns(self, mapper): method test_multiple_patterns (line 111) | def test_multiple_patterns(self, mapper): method test_optional_fields (line 146) | def test_optional_fields(self, mapper): method test_with_type_mapper (line 172) | def test_with_type_mapper(self, mock_language_config): method test_putitem_pattern_renamed_on_crud_conflict (line 209) | def test_putitem_pattern_renamed_on_crud_conflict(self, mapper, sample... method test_operation_types_preserved (line 222) | def test_operation_types_preserved(self, mapper, sample_entities): method test_entity_association (line 229) | def test_entity_association(self, mapper, sample_entities): method test_pattern_id_preservation (line 237) | def test_pattern_id_preservation(self, mapper, sample_entities): method test_consistent_read_behavior (line 244) | def test_consistent_read_behavior(self, mapper): method test_mixed_data_return_type_with_type_mapper (line 330) | def test_mixed_data_return_type_with_type_mapper(self, mock_language_c... method test_mixed_data_with_non_query_operation (line 372) | def test_mixed_data_with_non_query_operation(self, mock_language_config): class TestAccessPatternMapperFilterExpression (line 403) | class TestAccessPatternMapperFilterExpression: method mapper (line 407) | def mapper(self, mock_language_config): method test_mapping_includes_filter_expression_when_present (line 411) | def test_mapping_includes_filter_expression_when_present(self, mapper): method test_mapping_omits_filter_expression_when_absent (line 452) | def test_mapping_omits_filter_expression_when_absent(self, mapper): method test_mapping_preserves_filter_expression_structure (line 476) | def test_mapping_preserves_filter_expression_structure(self, mapper): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_codegen.py class TestGenerate (line 29) | class TestGenerate: method valid_schema_file (line 33) | def valid_schema_file(self, tmp_path): method invalid_schema_file (line 61) | def invalid_schema_file(self, tmp_path): method test_generate_file_not_found (line 79) | def test_generate_file_not_found(self): method test_generate_unsupported_language (line 86) | def test_generate_unsupported_language(self, valid_schema_file, tmp_pa... method test_generate_validation_failure (line 97) | def test_generate_validation_failure(self, invalid_schema_file, tmp_pa... method test_generate_validate_only_mode (line 105) | def test_generate_validate_only_mode(self, valid_schema_file, tmp_path): method test_generate_successful_generation (line 115) | def test_generate_successful_generation(self, valid_schema_file, tmp_p... method test_generate_default_output_directory (line 135) | def test_generate_default_output_directory(self, valid_schema_file, tm... method test_generate_edge_cases (line 169) | def test_generate_edge_cases(self, valid_schema_file, tmp_path): method test_generation_result_formatting (line 197) | def test_generation_result_formatting(self, tmp_path): method test_run_linter_no_config (line 248) | def test_run_linter_no_config(self, tmp_path): method test_run_linter_no_config_file (line 264) | def test_run_linter_no_config_file(self, tmp_path): method test_run_linter_command_not_found (line 286) | def test_run_linter_command_not_found(self, tmp_path): method test_run_linter_success_with_formatter (line 315) | def test_run_linter_success_with_formatter(self, tmp_path): method test_run_linter_error_handling (line 346) | def test_run_linter_error_handling(self, tmp_path): method test_main_function_scenarios (line 400) | def test_main_function_scenarios(self, valid_schema_file, tmp_path, mo... method test_generate_linting_scenarios (line 431) | def test_generate_linting_scenarios(self, valid_schema_file, tmp_path): method test_run_linter_format_command_scenarios (line 484) | def test_run_linter_format_command_scenarios(self, tmp_path): method test_generation_result_with_warnings (line 532) | def test_generation_result_with_warnings(self): method test_generation_result_cli_format_no_sample_usage (line 547) | def test_generation_result_cli_format_no_sample_usage(self): method test_generation_result_format_result_method (line 559) | def test_generation_result_format_result_method(self): method test_supported_languages_have_dal_implementation_prompts (line 578) | def test_supported_languages_have_dal_implementation_prompts(self): method test_validate_linter_command_allows_ruff (line 601) | def test_validate_linter_command_allows_ruff(self): method test_validate_linter_command_allows_ruff_exe (line 607) | def test_validate_linter_command_allows_ruff_exe(self): method test_validate_linter_command_blocks_disallowed_commands (line 612) | def test_validate_linter_command_blocks_disallowed_commands(self): method test_validate_linter_command_blocks_path_traversal (line 626) | def test_validate_linter_command_blocks_path_traversal(self): method test_validate_linter_command_invalid_input (line 632) | def test_validate_linter_command_invalid_input(self): method test_run_linter_validates_commands (line 646) | def test_run_linter_validates_commands(self, tmp_path): method test_generate_blocks_path_traversal (line 678) | def test_generate_blocks_path_traversal(self): method test_generate_blocks_absolute_path_outside_allowed (line 686) | def test_generate_blocks_absolute_path_outside_allowed(self, tmp_path): method test_generate_allows_path_in_allowed_dirs (line 702) | def test_generate_allows_path_in_allowed_dirs(self, tmp_path): method test_generate_resolves_relative_paths (line 736) | def test_generate_resolves_relative_paths(self, tmp_path, monkeypatch): method test_generate_blocks_symlink_escape (line 771) | def test_generate_blocks_symlink_escape(self, tmp_path, monkeypatch): method test_generate_with_usage_data_path (line 796) | def test_generate_with_usage_data_path(self, valid_schema_file, tmp_pa... method test_generate_with_invalid_usage_data_path (line 820) | def test_generate_with_invalid_usage_data_path(self, valid_schema_file... method test_main_with_usage_data_path_argument (line 833) | def test_main_with_usage_data_path_argument(self, valid_schema_file, t... method test_generate_with_usage_data_validation_success (line 867) | def test_generate_with_usage_data_validation_success(self, valid_schem... method test_generate_with_usage_data_validation_failure (line 895) | def test_generate_with_usage_data_validation_failure(self, valid_schem... method test_generate_with_usage_data_validation_warnings (line 920) | def test_generate_with_usage_data_validation_warnings(self, valid_sche... method test_generate_format_result_includes_usage_data_validation (line 952) | def test_generate_format_result_includes_usage_data_validation( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_cross_table_validation.py class TestCrossTableValidation (line 14) | class TestCrossTableValidation: method validator (line 18) | def validator(self): method _validate_schema_dict (line 22) | def _validate_schema_dict(self, validator, schema_dict): method valid_cross_table_schema (line 33) | def valid_cross_table_schema(self): method test_validate_valid_cross_table_schema (line 99) | def test_validate_valid_cross_table_schema(self, validator, valid_cros... method test_validate_user_registration_schema_fixture (line 107) | def test_validate_user_registration_schema_fixture(self, validator): method test_validate_cross_table_patterns_not_list (line 133) | def test_validate_cross_table_patterns_not_list(self, validator): method test_validate_empty_cross_table_patterns (line 157) | def test_validate_empty_cross_table_patterns(self, validator): method test_validate_invalid_operation_type (line 179) | def test_validate_invalid_operation_type(self, validator, valid_cross_... method test_validate_table_not_found (line 187) | def test_validate_table_not_found(self, validator, valid_cross_table_s... method test_validate_entity_not_found (line 197) | def test_validate_entity_not_found(self, validator, valid_cross_table_... method test_validate_action_incompatible_with_transact_get (line 207) | def test_validate_action_incompatible_with_transact_get( method test_validate_action_compatible_with_transact_write (line 220) | def test_validate_action_compatible_with_transact_write( method test_validate_pattern_id_uniqueness_across_tables (line 246) | def test_validate_pattern_id_uniqueness_across_tables(self, validator): method test_validate_entity_parameter_with_valid_entity_type (line 289) | def test_validate_entity_parameter_with_valid_entity_type( method test_validate_entity_parameter_missing_entity_type (line 297) | def test_validate_entity_parameter_missing_entity_type( method test_validate_entity_parameter_invalid_entity_type (line 314) | def test_validate_entity_parameter_invalid_entity_type( method test_validate_primitive_parameter_types (line 327) | def test_validate_primitive_parameter_types(self, validator, valid_cro... method test_validate_invalid_parameter_type (line 344) | def test_validate_invalid_parameter_type(self, validator, valid_cross_... method test_validate_duplicate_parameter_names (line 354) | def test_validate_duplicate_parameter_names(self, validator, valid_cro... method test_validate_parameters_not_list (line 365) | def test_validate_parameters_not_list(self, validator, valid_cross_tab... method test_validate_empty_parameters_list (line 373) | def test_validate_empty_parameters_list(self, validator, valid_cross_t... method test_validate_parameter_missing_required_fields (line 381) | def test_validate_parameter_missing_required_fields(self, validator, v... method test_validate_multiple_errors_reported_together (line 400) | def test_validate_multiple_errors_reported_together(self, validator): method test_validate_parameter_type_mismatch_with_field (line 486) | def test_validate_parameter_type_mismatch_with_field(self, validator): method test_validate_cross_table_pattern_not_dict (line 531) | def test_validate_cross_table_pattern_not_dict(self, validator): method test_validate_pattern_id_not_integer (line 553) | def test_validate_pattern_id_not_integer(self, validator, valid_cross_... method test_validate_entities_involved_not_list (line 561) | def test_validate_entities_involved_not_list(self, validator, valid_cr... method test_validate_entities_involved_empty (line 569) | def test_validate_entities_involved_empty(self, validator, valid_cross... method test_validate_entity_involvement_not_dict (line 577) | def test_validate_entity_involvement_not_dict(self, validator, valid_c... FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_file_utils.py class TestFileUtils (line 11) | class TestFileUtils: method test_load_json_file_success (line 14) | def test_load_json_file_success(self, tmp_path): method test_load_json_file_file_not_found (line 23) | def test_load_json_file_file_not_found(self): method test_load_json_file_invalid_json (line 28) | def test_load_json_file_invalid_json(self, tmp_path): method test_load_json_file_permission_error (line 36) | def test_load_json_file_permission_error(self): method test_validate_and_resolve_path_valid_file (line 43) | def test_validate_and_resolve_path_valid_file(self, tmp_path): method test_validate_and_resolve_path_file_not_found (line 51) | def test_validate_and_resolve_path_file_not_found(self, tmp_path): method test_validate_and_resolve_path_directory_not_file (line 58) | def test_validate_and_resolve_path_directory_not_file(self, tmp_path): method test_validate_and_resolve_path_absolute_path_disallowed (line 66) | def test_validate_and_resolve_path_absolute_path_disallowed(self, tmp_... method test_validate_and_resolve_path_path_traversal_detection (line 74) | def test_validate_and_resolve_path_path_traversal_detection(self, tmp_... method test_validate_and_resolve_path_relative_path_within_base (line 90) | def test_validate_and_resolve_path_relative_path_within_base(self, tmp... method test_validate_and_resolve_path_with_custom_base_dir (line 114) | def test_validate_and_resolve_path_with_custom_base_dir(self, tmp_path): method test_validate_and_resolve_path_os_error_handling (line 128) | def test_validate_and_resolve_path_os_error_handling(self): method test_validate_and_resolve_path_custom_file_type_errors (line 135) | def test_validate_and_resolve_path_custom_file_type_errors(self, tmp_p... method test_load_json_file_with_encoding (line 154) | def test_load_json_file_with_encoding(self, tmp_path): method test_load_json_file_empty_file (line 163) | def test_load_json_file_empty_file(self, tmp_path): method test_validate_and_resolve_path_symlink_handling (line 171) | def test_validate_and_resolve_path_symlink_handling(self, tmp_path): method test_validate_and_resolve_path_case_sensitivity (line 189) | def test_validate_and_resolve_path_case_sensitivity(self, tmp_path): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_filter_expression_codegen.py function generated_repositories (line 20) | def generated_repositories(): class TestFilterExpressionCodeGeneration (line 49) | class TestFilterExpressionCodeGeneration: method test_comparison_filter_in_signature (line 52) | def test_comparison_filter_in_signature(self, generated_repositories): method test_between_filter_in_signature (line 62) | def test_between_filter_in_signature(self, generated_repositories): method test_in_filter_in_signature (line 69) | def test_in_filter_in_signature(self, generated_repositories): method test_filter_expression_in_docstring (line 77) | def test_filter_expression_in_docstring(self, generated_repositories): method test_filter_note_in_docstring (line 82) | def test_filter_note_in_docstring(self, generated_repositories): method test_attribute_exists_renders_without_value (line 88) | def test_attribute_exists_renders_without_value(self, generated_reposi... method test_size_function_renders_correctly (line 94) | def test_size_function_renders_correctly(self, generated_repositories): method test_size_between_renders_correctly (line 99) | def test_size_between_renders_correctly(self, generated_repositories): method test_contains_function_renders_correctly (line 104) | def test_contains_function_renders_correctly(self, generated_repositor... method test_begins_with_function_renders_correctly (line 109) | def test_begins_with_function_renders_correctly(self, generated_reposi... method test_in_operator_renders_correctly (line 114) | def test_in_operator_renders_correctly(self, generated_repositories): method test_between_operator_renders_correctly (line 119) | def test_between_operator_renders_correctly(self, generated_repositori... method test_or_logical_operator_renders (line 124) | def test_or_logical_operator_renders(self, generated_repositories): method test_expression_attribute_names_in_hints (line 130) | def test_expression_attribute_names_in_hints(self, generated_repositor... method test_expression_attribute_values_in_hints (line 136) | def test_expression_attribute_values_in_hints(self, generated_reposito... method test_filter_expression_in_todo_comment (line 142) | def test_filter_expression_in_todo_comment(self, generated_repositories): class TestFilterExpressionInMapping (line 149) | class TestFilterExpressionInMapping: method test_mapping_includes_filter_expression (line 152) | def test_mapping_includes_filter_expression(self, generated_repositori... method test_mapping_omits_filter_expression_when_absent (line 159) | def test_mapping_omits_filter_expression_when_absent(self, generated_r... method test_mapping_preserves_all_conditions (line 165) | def test_mapping_preserves_all_conditions(self, generated_repositories): function generated_with_usage_data (line 185) | def generated_with_usage_data(): class TestFilterValuesInUsageExamples (line 213) | class TestFilterValuesInUsageExamples: method test_filter_value_excluded_status_passed (line 216) | def test_filter_value_excluded_status_passed(self, generated_with_usag... method test_filter_value_min_total_passed (line 220) | def test_filter_value_min_total_passed(self, generated_with_usage_data): method test_filter_value_skill_tag_passed (line 227) | def test_filter_value_skill_tag_passed(self, generated_with_usage_data): method test_filter_value_name_prefix_passed (line 231) | def test_filter_value_name_prefix_passed(self, generated_with_usage_da... method test_filter_value_cuisine_keyword_passed (line 235) | def test_filter_value_cuisine_keyword_passed(self, generated_with_usag... FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_filter_expression_validator.py function validator (line 19) | def validator(): class TestFilterExpressionValidatorComparison (line 25) | class TestFilterExpressionValidatorComparison: method test_valid_equals (line 28) | def test_valid_equals(self, validator): method test_valid_not_equals (line 39) | def test_valid_not_equals(self, validator): method test_valid_gte (line 50) | def test_valid_gte(self, validator): method test_valid_lt (line 61) | def test_valid_lt(self, validator): method test_comparison_missing_param (line 72) | def test_comparison_missing_param(self, validator): class TestFilterExpressionValidatorBetween (line 86) | class TestFilterExpressionValidatorBetween: method test_valid_between (line 89) | def test_valid_between(self, validator): method test_between_missing_param2 (line 109) | def test_between_missing_param2(self, validator): method test_between_missing_both_params (line 121) | def test_between_missing_both_params(self, validator): class TestFilterExpressionValidatorIn (line 134) | class TestFilterExpressionValidatorIn: method test_valid_in (line 137) | def test_valid_in(self, validator): method test_in_missing_params (line 148) | def test_in_missing_params(self, validator): method test_in_empty_params (line 160) | def test_in_empty_params(self, validator): class TestFilterExpressionValidatorFunctions (line 173) | class TestFilterExpressionValidatorFunctions: method test_valid_contains (line 176) | def test_valid_contains(self, validator): method test_valid_begins_with (line 187) | def test_valid_begins_with(self, validator): method test_valid_attribute_exists (line 198) | def test_valid_attribute_exists(self, validator): method test_valid_attribute_not_exists (line 209) | def test_valid_attribute_not_exists(self, validator): method test_contains_missing_param (line 220) | def test_contains_missing_param(self, validator): method test_begins_with_missing_param (line 232) | def test_begins_with_missing_param(self, validator): class TestFilterExpressionValidatorSize (line 246) | class TestFilterExpressionValidatorSize: method test_valid_size_comparison (line 249) | def test_valid_size_comparison(self, validator): method test_valid_size_between (line 264) | def test_valid_size_between(self, validator): method test_size_missing_operator (line 285) | def test_size_missing_operator(self, validator): class TestFilterExpressionValidatorFieldValidation (line 299) | class TestFilterExpressionValidatorFieldValidation: method test_unknown_field (line 302) | def test_unknown_field(self, validator): method test_unknown_field_with_suggestion (line 314) | def test_unknown_field_with_suggestion(self, validator): method test_key_attribute_partition_key (line 326) | def test_key_attribute_partition_key(self, validator): method test_key_attribute_sort_key (line 341) | def test_key_attribute_sort_key(self, validator): method test_scan_allows_key_attribute_partition_key (line 355) | def test_scan_allows_key_attribute_partition_key(self, validator): method test_scan_allows_key_attribute_sort_key (line 366) | def test_scan_allows_key_attribute_sort_key(self, validator): class TestFilterExpressionValidatorOperationAndLogic (line 379) | class TestFilterExpressionValidatorOperationAndLogic: method test_invalid_operation_getitem (line 382) | def test_invalid_operation_getitem(self, validator): method test_invalid_operation_putitem (line 394) | def test_invalid_operation_putitem(self, validator): method test_valid_logical_and (line 405) | def test_valid_logical_and(self, validator): method test_valid_logical_or (line 422) | def test_valid_logical_or(self, validator): method test_invalid_logical_operator (line 439) | def test_invalid_logical_operator(self, validator): method test_empty_conditions (line 457) | def test_empty_conditions(self, validator): method test_both_operator_and_function_non_size (line 469) | def test_both_operator_and_function_non_size(self, validator): method test_unsupported_operator (line 485) | def test_unsupported_operator(self, validator): method test_unsupported_function (line 497) | def test_unsupported_function(self, validator): method test_no_operator_or_function (line 509) | def test_no_operator_or_function(self, validator): method test_single_condition_no_logical_operator (line 521) | def test_single_condition_no_logical_operator(self, validator): class TestFilterExpressionSchemaValidation (line 542) | class TestFilterExpressionSchemaValidation: method validation_result (line 546) | def validation_result(self): method test_schema_is_invalid (line 551) | def test_schema_is_invalid(self, validation_result): method test_unknown_field_error (line 555) | def test_unknown_field_error(self, validation_result): method test_query_filter_on_partition_key_error (line 560) | def test_query_filter_on_partition_key_error(self, validation_result): method test_query_filter_on_sort_key_error (line 568) | def test_query_filter_on_sort_key_error(self, validation_result): method test_unsupported_operator_error (line 576) | def test_unsupported_operator_error(self, validation_result): method test_unsupported_function_error (line 581) | def test_unsupported_function_error(self, validation_result): method test_invalid_logical_operator_error (line 586) | def test_invalid_logical_operator_error(self, validation_result): method test_both_operator_and_function_error (line 591) | def test_both_operator_and_function_error(self, validation_result): method test_between_missing_param2_error (line 596) | def test_between_missing_param2_error(self, validation_result): method test_in_missing_params_error (line 601) | def test_in_missing_params_error(self, validation_result): method test_contains_missing_param_error (line 608) | def test_contains_missing_param_error(self, validation_result): method test_begins_with_missing_param_error (line 613) | def test_begins_with_missing_param_error(self, validation_result): method test_filter_on_getitem_error (line 618) | def test_filter_on_getitem_error(self, validation_result): method test_empty_conditions_error (line 626) | def test_empty_conditions_error(self, validation_result): method test_comparison_missing_param_error (line 631) | def test_comparison_missing_param_error(self, validation_result): class TestFilterExpressionValidatorMissingField (line 638) | class TestFilterExpressionValidatorMissingField: method validator (line 642) | def validator(self): method test_condition_missing_field_key (line 646) | def test_condition_missing_field_key(self, validator): method test_condition_field_is_not_string (line 658) | def test_condition_field_is_not_string(self, validator): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_gsi_projections.py class TestGSIProjectionEnum (line 18) | class TestGSIProjectionEnum: method test_projection_types_exist (line 21) | def test_projection_types_exist(self): method test_valid_projection_types_constant (line 27) | def test_valid_projection_types_constant(self): class TestGSIProjectionValidation (line 35) | class TestGSIProjectionValidation: method test_valid_all_projection (line 38) | def test_valid_all_projection(self): method test_valid_keys_only_projection (line 70) | def test_valid_keys_only_projection(self): method test_valid_include_projection (line 106) | def test_valid_include_projection(self): method test_invalid_projection_type (line 148) | def test_invalid_projection_type(self): method test_include_without_attributes (line 184) | def test_include_without_attributes(self): method test_keys_only_with_attributes (line 216) | def test_keys_only_with_attributes(self): method test_invalid_included_attribute (line 257) | def test_invalid_included_attribute(self): method test_default_projection_is_all (line 301) | def test_default_projection_is_all(self): method test_projection_loaded_correctly (line 315) | def test_projection_loaded_correctly(self): method test_included_attributes_loaded (line 331) | def test_included_attributes_loaded(self): method test_smart_warning_for_required_non_projected_fields (line 352) | def test_smart_warning_for_required_non_projected_fields(self): method test_no_warning_when_non_projected_fields_optional (line 403) | def test_no_warning_when_non_projected_fields_optional(self): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_gsi_validator.py class TestGSIValidator (line 14) | class TestGSIValidator: method setup_method (line 17) | def setup_method(self): class TestValidateGSINamesUnique (line 49) | class TestValidateGSINamesUnique(TestGSIValidator): method test_validate_unique_gsi_names_success (line 52) | def test_validate_unique_gsi_names_success(self): method test_validate_duplicate_gsi_names (line 58) | def test_validate_duplicate_gsi_names(self): method test_validate_multiple_duplicates (line 69) | def test_validate_multiple_duplicates(self): method test_validate_gsi_names_unique_invalid_gsi_object (line 82) | def test_validate_gsi_names_unique_invalid_gsi_object(self): class TestValidateGSIMappings (line 91) | class TestValidateGSIMappings(TestGSIValidator): method test_validate_mappings_all_valid (line 94) | def test_validate_mappings_all_valid(self): method test_validate_mappings_multiple_invalid (line 102) | def test_validate_mappings_multiple_invalid(self): method test_validate_gsi_mappings_invalid_mapping_object (line 117) | def test_validate_gsi_mappings_invalid_mapping_object(self): class TestValidateTemplateParameters (line 126) | class TestValidateTemplateParameters(TestGSIValidator): method test_validate_template_parameters_valid (line 129) | def test_validate_template_parameters_valid(self): method test_validate_template_parameters_errors (line 137) | def test_validate_template_parameters_errors(self): class TestValidateRangeConditions (line 170) | class TestValidateRangeConditions(TestGSIValidator): method test_validate_range_conditions_valid_values (line 173) | def test_validate_range_conditions_valid_values(self): method test_validate_range_conditions_invalid_value (line 180) | def test_validate_range_conditions_invalid_value(self): class TestValidateParameterCount (line 188) | class TestValidateParameterCount(TestGSIValidator): method test_validate_parameter_count_valid (line 191) | def test_validate_parameter_count_valid(self): method test_validate_parameter_count_invalid (line 205) | def test_validate_parameter_count_invalid(self): class TestValidateGSIAccessPatterns (line 221) | class TestValidateGSIAccessPatterns(TestGSIValidator): method test_validate_gsi_access_patterns_valid (line 224) | def test_validate_gsi_access_patterns_valid(self): method test_validate_gsi_access_patterns_invalid_index (line 255) | def test_validate_gsi_access_patterns_invalid_index(self): class TestValidateCompleteGSIConfiguration (line 274) | class TestValidateCompleteGSIConfiguration(TestGSIValidator): method test_validate_complete_gsi_configuration_valid (line 277) | def test_validate_complete_gsi_configuration_valid(self): method test_validate_complete_gsi_configuration_invalid_gsi_list (line 297) | def test_validate_complete_gsi_configuration_invalid_gsi_list(self): class TestPrivateHelperMethods (line 306) | class TestPrivateHelperMethods(TestGSIValidator): method test_parse_gsi_list_errors (line 309) | def test_parse_gsi_list_errors(self): method test_parse_gsi_list_exception_in_loop (line 324) | def test_parse_gsi_list_exception_in_loop(self): method test_parse_entity_fields (line 340) | def test_parse_entity_fields(self): method test_validate_entity_gsi_mappings_errors (line 354) | def test_validate_entity_gsi_mappings_errors(self): method test_validate_entity_gsi_mappings_exception_in_loop (line 380) | def test_validate_entity_gsi_mappings_exception_in_loop(self): method test_validate_entities_gsi_configuration_field_errors (line 398) | def test_validate_entities_gsi_configuration_field_errors(self): method test_validate_entity_gsi_mappings_templates (line 407) | def test_validate_entity_gsi_mappings_templates(self): method test_validate_gsi_mappings_empty_gsi_list (line 464) | def test_validate_gsi_mappings_empty_gsi_list(self): method test_parse_gsi_list_empty_missing_and_optional_sort_key (line 471) | def test_parse_gsi_list_empty_missing_and_optional_sort_key(self): method test_validate_template_parameters_extraction_exception (line 488) | def test_validate_template_parameters_extraction_exception(self): method test_validate_gsi_access_patterns_invalid_range_and_empty_gsi (line 508) | def test_validate_gsi_access_patterns_invalid_range_and_empty_gsi(self): method test_validate_entity_access_patterns_comprehensive (line 542) | def test_validate_entity_access_patterns_comprehensive(self): method test_validate_entity_access_patterns_exception_handling (line 607) | def test_validate_entity_access_patterns_exception_handling(self): method test_validate_entities_gsi_configuration_invalid_entities (line 620) | def test_validate_entities_gsi_configuration_invalid_entities(self): method test_parse_entity_fields_comprehensive (line 635) | def test_parse_entity_fields_comprehensive(self): class TestKeyTemplateLengthMatch (line 660) | class TestKeyTemplateLengthMatch(TestGSIValidator): method test_matching_string_pk_passes (line 663) | def test_matching_string_pk_passes(self): method test_matching_array_pk_passes (line 670) | def test_matching_array_pk_passes(self): method test_matching_array_sk_passes (line 677) | def test_matching_array_sk_passes(self): method test_pk_array_length_mismatch (line 684) | def test_pk_array_length_mismatch(self): method test_sk_array_length_mismatch (line 693) | def test_sk_array_length_mismatch(self): method test_pk_type_mismatch_array_vs_string (line 702) | def test_pk_type_mismatch_array_vs_string(self): method test_pk_type_mismatch_string_vs_array (line 711) | def test_pk_type_mismatch_string_vs_array(self): method test_sk_type_mismatch (line 720) | def test_sk_type_mismatch(self): method test_sk_skipped_when_either_is_none (line 729) | def test_sk_skipped_when_either_is_none(self): method test_both_pk_and_sk_mismatch (line 743) | def test_both_pk_and_sk_mismatch(self): method test_integration_via_complete_gsi_configuration (line 752) | def test_integration_via_complete_gsi_configuration(self): class TestValidateMultiAttributeKey (line 787) | class TestValidateMultiAttributeKey(TestGSIValidator): method test_none_required_key_errors (line 790) | def test_none_required_key_errors(self): method test_none_optional_key_passes (line 798) | def test_none_optional_key_passes(self): method test_invalid_type_errors (line 805) | def test_invalid_type_errors(self): method test_empty_string_errors (line 811) | def test_empty_string_errors(self): method test_valid_string_passes (line 817) | def test_valid_string_passes(self): method test_empty_array_errors (line 822) | def test_empty_array_errors(self): method test_array_over_four_errors (line 828) | def test_array_over_four_errors(self): method test_array_non_string_element_errors (line 836) | def test_array_non_string_element_errors(self): method test_array_empty_string_element_errors (line 842) | def test_array_empty_string_element_errors(self): method test_valid_array_passes (line 848) | def test_valid_array_passes(self): class TestValidateTemplateParametersArray (line 857) | class TestValidateTemplateParametersArray(TestGSIValidator): method test_invalid_type_errors (line 860) | def test_invalid_type_errors(self): method test_empty_array_errors (line 868) | def test_empty_array_errors(self): method test_array_over_four_errors (line 876) | def test_array_over_four_errors(self): method test_array_non_string_element_errors (line 883) | def test_array_non_string_element_errors(self): method test_valid_array_with_field_validation (line 890) | def test_valid_array_with_field_validation(self): method test_array_with_invalid_field_reference (line 897) | def test_array_with_invalid_field_reference(self): class TestParseGsiListMultiAttributeKeys (line 906) | class TestParseGsiListMultiAttributeKeys(TestGSIValidator): method test_invalid_multi_attribute_pk_skips_gsi (line 909) | def test_invalid_multi_attribute_pk_skips_gsi(self): method test_invalid_multi_attribute_sk_skips_gsi (line 924) | def test_invalid_multi_attribute_sk_skips_gsi(self): method test_valid_multi_attribute_keys_parsed (line 939) | def test_valid_multi_attribute_keys_parsed(self): class TestIncludeProjectionSafety (line 958) | class TestIncludeProjectionSafety(TestGSIValidator): method test_non_include_projection_skipped (line 961) | def test_non_include_projection_skipped(self): method test_include_with_all_fields_projected_no_warning (line 967) | def test_include_with_all_fields_projected_no_warning(self): method test_include_with_required_non_projected_field_warns (line 996) | def test_include_with_required_non_projected_field_warns(self): method test_include_entity_not_using_gsi_skipped (line 1025) | def test_include_entity_not_using_gsi_skipped(self): method test_include_with_multi_attribute_sk_template (line 1049) | def test_include_with_multi_attribute_sk_template(self): class TestValidateIncludedAttributesExist (line 1086) | class TestValidateIncludedAttributesExist(TestGSIValidator): method test_non_include_projection_skipped (line 1089) | def test_non_include_projection_skipped(self): method test_valid_included_attributes_pass (line 1095) | def test_valid_included_attributes_pass(self): method test_nonexistent_included_attribute_errors (line 1119) | def test_nonexistent_included_attribute_errors(self): method test_key_attribute_in_included_attributes_errors (line 1141) | def test_key_attribute_in_included_attributes_errors(self): method test_entity_not_using_gsi_ignored (line 1168) | def test_entity_not_using_gsi_ignored(self): method test_multi_attribute_gsi_keys_detected_as_key_attrs (line 1190) | def test_multi_attribute_gsi_keys_detected_as_key_attrs(self): class TestValidateGsiProjections (line 1227) | class TestValidateGsiProjections(TestGSIValidator): method test_valid_projections_pass (line 1230) | def test_valid_projections_pass(self): method test_invalid_projection_type_errors (line 1245) | def test_invalid_projection_type_errors(self): method test_include_missing_included_attributes_errors (line 1252) | def test_include_missing_included_attributes_errors(self): method test_include_non_list_included_attributes_errors (line 1259) | def test_include_non_list_included_attributes_errors(self): method test_include_empty_included_attributes_errors (line 1273) | def test_include_empty_included_attributes_errors(self): method test_non_include_with_included_attributes_errors (line 1291) | def test_non_include_with_included_attributes_errors(self): method test_no_projection_field_passes (line 1305) | def test_no_projection_field_passes(self): method test_non_dict_gsi_skipped (line 1311) | def test_non_dict_gsi_skipped(self): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_jinja2_generator.py class TestJinja2Generator (line 11) | class TestJinja2Generator: method valid_schema_file (line 15) | def valid_schema_file(self, mock_schema_data, tmp_path): method generator (line 22) | def generator(self, valid_schema_file): method sample_entity_config (line 27) | def sample_entity_config(self): method sample_table_config (line 50) | def sample_table_config(self): method test_generator_initialization (line 54) | def test_generator_initialization(self, valid_schema_file): method test_generator_initialization_with_usage_data_path (line 61) | def test_generator_initialization_with_usage_data_path(self, valid_sch... method test_generator_initialization_with_invalid_usage_data_path (line 75) | def test_generator_initialization_with_invalid_usage_data_path(self, v... method test_generate_entity_and_repository (line 86) | def test_generate_entity_and_repository( method test_generate_with_gsi_mappings (line 95) | def test_generate_with_gsi_mappings(self, generator, sample_table_conf... method test_generate_all (line 108) | def test_generate_all(self, generator, tmp_path): method test_generate_repository_with_mapping (line 114) | def test_generate_repository_with_mapping( method test_missing_templates_raise_errors (line 123) | def test_missing_templates_raise_errors(self, valid_schema_file): method test_missing_repository_template (line 128) | def test_missing_repository_template(self, mock_schema_data, tmp_path): method test_missing_optional_templates_print_warnings (line 138) | def test_missing_optional_templates_print_warnings(self, mock_schema_d... method test_repository_without_table_config_raises_error (line 152) | def test_repository_without_table_config_raises_error(self, generator,... method test_usage_examples_without_template (line 157) | def test_usage_examples_without_template(self, generator, sample_entit... method test_repository_with_entity_type_parameter (line 163) | def test_repository_with_entity_type_parameter(self, generator, sample... method test_gsi_mapping_lookup (line 184) | def test_gsi_mapping_lookup(self, mock_schema_data, tmp_path, sample_t... class TestJinja2GeneratorGSIKeyBuilders (line 236) | class TestJinja2GeneratorGSIKeyBuilders: method gsi_entity_config (line 240) | def gsi_entity_config(self): method valid_schema_file (line 268) | def valid_schema_file(self, mock_schema_data, tmp_path): method generator (line 275) | def generator(self, valid_schema_file): method test_generate_entity_with_gsi_mappings (line 279) | def test_generate_entity_with_gsi_mappings(self, generator, gsi_entity... method test_generate_entity_without_gsi_mappings (line 305) | def test_generate_entity_without_gsi_mappings(self, generator): class TestJinja2GeneratorNumericFieldHandling (line 327) | class TestJinja2GeneratorNumericFieldHandling: method valid_schema_file (line 335) | def valid_schema_file(self, mock_schema_data, tmp_path): method generator (line 342) | def generator(self, valid_schema_file): method test_is_pure_field_reference_valid (line 347) | def test_is_pure_field_reference_valid(self, generator): method test_is_pure_field_reference_invalid (line 353) | def test_is_pure_field_reference_invalid(self, generator): method test_get_field_type (line 369) | def test_get_field_type(self, generator): method test_is_numeric_type (line 384) | def test_is_numeric_type(self, generator): method test_check_template_is_pure_numeric_true_cases (line 398) | def test_check_template_is_pure_numeric_true_cases(self, generator): method test_check_template_is_pure_numeric_false_cases (line 406) | def test_check_template_is_pure_numeric_false_cases(self, generator): method test_generate_entity_numeric_sort_key (line 436) | def test_generate_entity_numeric_sort_key(self, generator): method test_generate_entity_numeric_partition_key (line 467) | def test_generate_entity_numeric_partition_key(self, generator): method test_generate_entity_mixed_template_uses_fstring (line 480) | def test_generate_entity_mixed_template_uses_fstring(self, generator): method test_generate_entity_numeric_gsi_sort_key (line 495) | def test_generate_entity_numeric_gsi_sort_key(self, generator): method test_generate_entity_string_gsi_sort_key (line 521) | def test_generate_entity_string_gsi_sort_key(self, generator): method test_generate_entity_prefix_builder_with_static_prefix (line 549) | def test_generate_entity_prefix_builder_with_static_prefix(self, gener... method test_generate_entity_prefix_builder_with_dynamic_prefix (line 564) | def test_generate_entity_prefix_builder_with_dynamic_prefix(self, gene... method test_generate_entity_prefix_builder_no_hash_separator (line 581) | def test_generate_entity_prefix_builder_no_hash_separator(self, genera... method test_generate_entity_prefix_builder_pure_field_reference (line 595) | def test_generate_entity_prefix_builder_pure_field_reference(self, gen... method test_generate_entity_prefix_builder_none_when_no_sk (line 611) | def test_generate_entity_prefix_builder_none_when_no_sk(self, generator): class TestParameterConsistency (line 626) | class TestParameterConsistency: method test_phantom_parameter_excluded_from_both_repository_and_usage_examples (line 629) | def test_phantom_parameter_excluded_from_both_repository_and_usage_exa... method test_range_query_parameters_included_in_both_repository_and_usage_examples (line 687) | def test_range_query_parameters_included_in_both_repository_and_usage_... method test_between_range_query_includes_both_range_parameters (line 755) | def test_between_range_query_includes_both_range_parameters(self, tmp_... class TestAnyImportDetection (line 816) | class TestAnyImportDetection: method test_check_needs_any_import_with_mixed_data (line 819) | def test_check_needs_any_import_with_mixed_data(self, tmp_path): method test_check_needs_any_import_with_keys_only_projection (line 861) | def test_check_needs_any_import_with_keys_only_projection(self, tmp_pa... method test_check_needs_any_import_without_dict_returns (line 913) | def test_check_needs_any_import_without_dict_returns(self, tmp_path): method test_check_needs_any_import_with_unsafe_include_projection (line 964) | def test_check_needs_any_import_with_unsafe_include_projection(self, t... class TestFormatSpecifierSupport (line 1023) | class TestFormatSpecifierSupport: method test_extract_parameters_with_format_specifiers (line 1026) | def test_extract_parameters_with_format_specifiers(self, tmp_path): method test_mixed_format_specifiers (line 1063) | def test_mixed_format_specifiers(self, tmp_path): class TestTransactionServiceTemplateRendering (line 1109) | class TestTransactionServiceTemplateRendering: method user_registration_schema_path (line 1113) | def user_registration_schema_path(self): method generator_with_transactions (line 1118) | def generator_with_transactions(self, user_registration_schema_path): method schema_without_transactions (line 1123) | def schema_without_transactions(self, tmp_path): method test_transaction_service_template_loads (line 1150) | def test_transaction_service_template_loads(self, generator_with_trans... method test_generate_transaction_service_with_user_registration (line 1156) | def test_generate_transaction_service_with_user_registration( method test_all_methods_generated (line 1183) | def test_all_methods_generated(self, generator_with_transactions): method test_imports_are_correct (line 1200) | def test_imports_are_correct(self, generator_with_transactions): method test_format_parameters_for_transactions (line 1217) | def test_format_parameters_for_transactions(self, generator_with_trans... method test_get_return_description (line 1237) | def test_get_return_description(self, generator_with_transactions): method test_get_table_list (line 1254) | def test_get_table_list(self, generator_with_transactions): method test_get_param_description (line 1267) | def test_get_param_description(self, generator_with_transactions): method test_schema_without_transactions_has_no_patterns (line 1279) | def test_schema_without_transactions_has_no_patterns(self, schema_with... method test_transaction_patterns_have_required_fields (line 1290) | def test_transaction_patterns_have_required_fields(self, generator_wit... method test_transact_write_patterns_have_valid_actions (line 1312) | def test_transact_write_patterns_have_valid_actions(self, generator_wi... method test_transact_get_patterns_have_get_action (line 1325) | def test_transact_get_patterns_have_get_action(self, generator_with_tr... method test_create_transaction_pattern_mapping (line 1336) | def test_create_transaction_pattern_mapping(self, generator_with_trans... method test_create_transaction_pattern_mapping_transact_get (line 1373) | def test_create_transaction_pattern_mapping_transact_get(self, generat... method test_generate_all_includes_transaction_patterns_in_mapping (line 1392) | def test_generate_all_includes_transaction_patterns_in_mapping( class TestJinja2GeneratorEdgeCases (line 1424) | class TestJinja2GeneratorEdgeCases: method generator (line 1428) | def generator(self, mock_schema_data, tmp_path): method test_is_unsafe_include_projection_with_safe_projection (line 1434) | def test_is_unsafe_include_projection_with_safe_projection(self, gener... method test_get_gsi_mapping_for_index_returns_none_when_no_mappings (line 1454) | def test_get_gsi_mapping_for_index_returns_none_when_no_mappings(self,... method test_generate_transaction_service_with_no_template (line 1469) | def test_generate_transaction_service_with_no_template(self, generator): method test_generate_transaction_service_with_empty_patterns (line 1481) | def test_generate_transaction_service_with_empty_patterns(self, genera... method test_get_return_description_for_object_return_type (line 1486) | def test_get_return_description_for_object_return_type(self, generator): method test_get_return_description_for_unknown_return_type (line 1492) | def test_get_return_description_for_unknown_return_type(self, generator): method test_get_entity_imports_with_empty_patterns (line 1498) | def test_get_entity_imports_with_empty_patterns(self, generator): method test_get_table_list_with_empty_entities (line 1503) | def test_get_table_list_with_empty_entities(self, generator): method test_generate_usage_examples_with_usage_data (line 1509) | def test_generate_usage_examples_with_usage_data(self, mock_schema_dat... method test_filter_resolvable_params_with_range_condition (line 1544) | def test_filter_resolvable_params_with_range_condition(self, tmp_path): method test_check_template_is_pure_numeric_with_non_numeric_field (line 1601) | def test_check_template_is_pure_numeric_with_non_numeric_field(self, g... method test_preprocess_entity_config_with_numeric_gsi_keys (line 1608) | def test_preprocess_entity_config_with_numeric_gsi_keys(self, generator): method test_preprocess_entity_config_deduplicates_sk_params (line 1634) | def test_preprocess_entity_config_deduplicates_sk_params(self, generat... method test_preprocess_entity_config_keeps_unique_sk_params (line 1651) | def test_preprocess_entity_config_keeps_unique_sk_params(self, generat... class TestMultiAttributeKeyHelpers (line 1669) | class TestMultiAttributeKeyHelpers: method valid_schema_file (line 1673) | def valid_schema_file(self, mock_schema_data, tmp_path): method generator (line 1680) | def generator(self, valid_schema_file): method sample_fields (line 1685) | def sample_fields(self): method test_extract_template_fields_from_string (line 1695) | def test_extract_template_fields_from_string(self, generator): method test_extract_template_fields_from_list (line 1703) | def test_extract_template_fields_from_list(self, generator): method test_extract_template_fields_from_none (line 1711) | def test_extract_template_fields_from_none(self, generator): method test_extract_template_fields_from_empty_string (line 1716) | def test_extract_template_fields_from_empty_string(self, generator): method test_extract_template_fields_from_empty_list (line 1721) | def test_extract_template_fields_from_empty_list(self, generator): method test_process_key_template_single_attribute_string (line 1727) | def test_process_key_template_single_attribute_string(self, generator,... method test_process_key_template_single_attribute_numeric (line 1735) | def test_process_key_template_single_attribute_numeric(self, generator... method test_process_key_template_multi_attribute_two_attrs (line 1743) | def test_process_key_template_multi_attribute_two_attrs(self, generato... method test_process_key_template_multi_attribute_four_attrs (line 1753) | def test_process_key_template_multi_attribute_four_attrs(self, generat... method test_process_key_template_multi_attribute_empty_list_raises (line 1767) | def test_process_key_template_multi_attribute_empty_list_raises( method test_process_key_template_multi_attribute_too_many_raises (line 1774) | def test_process_key_template_multi_attribute_too_many_raises(self, ge... method test_process_key_template_none_returns_empty (line 1785) | def test_process_key_template_none_returns_empty(self, generator, samp... method test_process_key_template_empty_string_returns_empty (line 1793) | def test_process_key_template_empty_string_returns_empty(self, generat... class TestMultiAttributeKeyPreprocessing (line 1803) | class TestMultiAttributeKeyPreprocessing: method valid_schema_file (line 1807) | def valid_schema_file(self, mock_schema_data, tmp_path): method generator (line 1814) | def generator(self, valid_schema_file): method test_preprocess_entity_with_multi_attribute_sk (line 1818) | def test_preprocess_entity_with_multi_attribute_sk(self, generator): method test_preprocess_entity_with_multi_attribute_pk (line 1848) | def test_preprocess_entity_with_multi_attribute_pk(self, generator): method test_preprocess_entity_with_multi_attribute_pk_and_sk (line 1876) | def test_preprocess_entity_with_multi_attribute_pk_and_sk(self, genera... method test_preprocess_entity_with_invalid_multi_attribute_pk_raises (line 1906) | def test_preprocess_entity_with_invalid_multi_attribute_pk_raises(self... method test_preprocess_entity_with_invalid_multi_attribute_sk_raises (line 1934) | def test_preprocess_entity_with_invalid_multi_attribute_sk_raises(self... class TestMultiAttributeKeyCodeGeneration (line 1965) | class TestMultiAttributeKeyCodeGeneration: method test_generate_entity_with_multi_attribute_sk (line 1968) | def test_generate_entity_with_multi_attribute_sk(self, tmp_path): method test_generate_entity_with_multi_attribute_pk (line 2029) | def test_generate_entity_with_multi_attribute_pk(self, tmp_path): method test_repository_with_multi_attribute_sk_range_query (line 2082) | def test_repository_with_multi_attribute_sk_range_query(self, tmp_path): method test_repository_with_multi_attribute_pk_query (line 2150) | def test_repository_with_multi_attribute_pk_query(self, tmp_path): method test_is_unsafe_include_projection_with_multi_attribute_templates (line 2217) | def test_is_unsafe_include_projection_with_multi_attribute_templates(s... method test_is_unsafe_include_projection_safe_with_multi_attribute_keys (line 2271) | def test_is_unsafe_include_projection_safe_with_multi_attribute_keys(s... class TestJinja2GeneratorFilterExpression (line 2325) | class TestJinja2GeneratorFilterExpression: method valid_schema_file (line 2329) | def valid_schema_file(self, mock_schema_data, tmp_path): method generator (line 2336) | def generator(self, valid_schema_file): method test_generate_repository_with_filter_expression_comparison (line 2340) | def test_generate_repository_with_filter_expression_comparison(self, g... method test_generate_repository_with_filter_expression_between (line 2415) | def test_generate_repository_with_filter_expression_between(self, gene... method test_generate_repository_with_filter_expression_in_operator (line 2477) | def test_generate_repository_with_filter_expression_in_operator(self, ... FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_key_template_parser.py class TestKeyTemplateParser (line 11) | class TestKeyTemplateParser: method setup_method (line 14) | def setup_method(self): class TestExtractParameters (line 28) | class TestExtractParameters(TestKeyTemplateParser): method test_extract_parameters_multiple_params (line 31) | def test_extract_parameters_multiple_params(self): method test_extract_parameters_no_params (line 38) | def test_extract_parameters_no_params(self): method test_extract_parameters_duplicate_params (line 42) | def test_extract_parameters_duplicate_params(self): method test_extract_parameters_non_string_input (line 49) | def test_extract_parameters_non_string_input(self): method test_extract_parameters_with_format_specifiers (line 54) | def test_extract_parameters_with_format_specifiers(self): class TestValidateParameters (line 82) | class TestValidateParameters(TestKeyTemplateParser): method test_validate_parameters_all_valid (line 85) | def test_validate_parameters_all_valid(self): method test_validate_parameters_missing_field (line 89) | def test_validate_parameters_missing_field(self): method test_validate_parameters_multiple_missing (line 96) | def test_validate_parameters_multiple_missing(self): method test_validate_parameters_empty_fields (line 104) | def test_validate_parameters_empty_fields(self): class TestValidateTemplateSyntax (line 112) | class TestValidateTemplateSyntax(TestKeyTemplateParser): method test_validate_syntax_valid_template (line 115) | def test_validate_syntax_valid_template(self): method test_validate_syntax_non_string (line 120) | def test_validate_syntax_non_string(self): method test_validate_syntax_empty_template (line 126) | def test_validate_syntax_empty_template(self): method test_validate_syntax_unmatched_braces (line 131) | def test_validate_syntax_unmatched_braces(self): method test_validate_syntax_empty_parameters (line 138) | def test_validate_syntax_empty_parameters(self): method test_validate_syntax_invalid_parameter_names (line 144) | def test_validate_syntax_invalid_parameter_names(self): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_language_config.py class TestLanguageConfig (line 15) | class TestLanguageConfig: method sample_language_config (line 19) | def sample_language_config(self): method test_language_config_creation_and_properties (line 55) | def test_language_config_creation_and_properties(self, sample_language... class TestLanguageConfigLoader (line 66) | class TestLanguageConfigLoader: method test_load_python_config (line 69) | def test_load_python_config(self): method test_load_nonexistent_language_raises_error (line 77) | def test_load_nonexistent_language_raises_error(self): method test_get_available_languages (line 82) | def test_get_available_languages(self): method test_load_with_invalid_path (line 88) | def test_load_with_invalid_path(self): method test_config_validation_missing_fields (line 93) | def test_config_validation_missing_fields(self): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_language_type_mapper.py class MockTypeMappingImplementation (line 14) | class MockTypeMappingImplementation(LanguageTypeMappingInterface): method __init__ (line 17) | def __init__(self, complete_mappings=True): method field_type_mappings (line 22) | def field_type_mappings(self): method return_type_mappings (line 37) | def return_type_mappings(self): method parameter_type_mappings (line 50) | def parameter_type_mappings(self): class IncompleteFieldTypeMappings (line 66) | class IncompleteFieldTypeMappings(LanguageTypeMappingInterface): method field_type_mappings (line 70) | def field_type_mappings(self): method return_type_mappings (line 75) | def return_type_mappings(self): method parameter_type_mappings (line 80) | def parameter_type_mappings(self): class IncompleteReturnTypeMappings (line 85) | class IncompleteReturnTypeMappings(LanguageTypeMappingInterface): method field_type_mappings (line 89) | def field_type_mappings(self): method return_type_mappings (line 94) | def return_type_mappings(self): method parameter_type_mappings (line 99) | def parameter_type_mappings(self): class IncompleteParameterTypeMappings (line 104) | class IncompleteParameterTypeMappings(LanguageTypeMappingInterface): method field_type_mappings (line 108) | def field_type_mappings(self): method return_type_mappings (line 113) | def return_type_mappings(self): method parameter_type_mappings (line 118) | def parameter_type_mappings(self): class TestLanguageTypeMappingInterface (line 124) | class TestLanguageTypeMappingInterface: method complete_mapping (line 128) | def complete_mapping(self): method test_all_mappings_combines_all_types (line 132) | def test_all_mappings_combines_all_types(self, complete_mapping): method test_validate_completeness_success (line 145) | def test_validate_completeness_success(self, complete_mapping): method test_validate_completeness_missing_field_types (line 149) | def test_validate_completeness_missing_field_types(self): method test_validate_completeness_missing_return_types (line 158) | def test_validate_completeness_missing_return_types(self): method test_validate_completeness_missing_parameter_types (line 167) | def test_validate_completeness_missing_parameter_types(self): method test_get_language_name_scenarios (line 176) | def test_get_language_name_scenarios(self): method test_abstract_properties_coverage (line 189) | def test_abstract_properties_coverage(self, complete_mapping): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_output_manager.py class TestGeneratedFile (line 13) | class TestGeneratedFile: method test_generated_file_creation (line 16) | def test_generated_file_creation(self): method test_generated_file_minimal (line 31) | def test_generated_file_minimal(self): class TestGenerationResult (line 40) | class TestGenerationResult: method test_generation_result_creation (line 43) | def test_generation_result_creation(self): class TestOutputManager (line 63) | class TestOutputManager: method output_manager (line 67) | def output_manager(self, tmp_path): method test_output_manager_initialization (line 71) | def test_output_manager_initialization(self, tmp_path): method test_write_generated_files_creates_all_files (line 77) | def test_write_generated_files_creates_all_files(self, output_manager,... method test_write_files_creates_directories (line 102) | def test_write_files_creates_directories(self, output_manager, tmp_path): method test_write_empty_result_creates_mapping_file (line 109) | def test_write_empty_result_creates_mapping_file(self, output_manager,... method test_overwrite_existing_files (line 121) | def test_overwrite_existing_files(self, output_manager, tmp_path): method test_copy_support_file_not_found (line 131) | def test_copy_support_file_not_found(self, output_manager, capsys): method test_print_summary_with_categories (line 139) | def test_print_summary_with_categories(self, output_manager, capsys): method test_copy_support_file_exists (line 151) | def test_copy_support_file_exists(self, tmp_path, monkeypatch): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_range_query_validator.py class TestRangeQueryValidator (line 14) | class TestRangeQueryValidator: method setup_method (line 17) | def setup_method(self): class TestValidateRangeCondition (line 23) | class TestValidateRangeCondition(TestRangeQueryValidator): method test_validate_all_valid_range_conditions (line 26) | def test_validate_all_valid_range_conditions(self): method test_validate_invalid_range_condition (line 34) | def test_validate_invalid_range_condition(self): method test_validate_non_string_range_condition (line 46) | def test_validate_non_string_range_condition(self): method test_validate_case_sensitive (line 55) | def test_validate_case_sensitive(self): method test_validate_with_custom_path (line 62) | def test_validate_with_custom_path(self): class TestGetExpectedParameterCount (line 71) | class TestGetExpectedParameterCount(TestRangeQueryValidator): method test_between_requires_three_parameters (line 74) | def test_between_requires_three_parameters(self): method test_begins_with_requires_two_parameters (line 79) | def test_begins_with_requires_two_parameters(self): method test_comparison_operators_require_two_parameters (line 84) | def test_comparison_operators_require_two_parameters(self): method test_unknown_condition_returns_zero (line 92) | def test_unknown_condition_returns_zero(self): class TestValidateParameterCount (line 99) | class TestValidateParameterCount(TestRangeQueryValidator): method test_between_with_correct_count (line 102) | def test_between_with_correct_count(self): method test_between_with_incorrect_count (line 117) | def test_between_with_incorrect_count(self): method test_begins_with_correct_count (line 139) | def test_begins_with_correct_count(self): method test_begins_with_incorrect_count (line 154) | def test_begins_with_incorrect_count(self): method test_comparison_operators_parameter_count (line 172) | def test_comparison_operators_parameter_count(self): method test_no_range_condition_parameter_count (line 203) | def test_no_range_condition_parameter_count(self): method test_no_parameters_with_range_condition (line 218) | def test_no_parameters_with_range_condition(self): method test_too_many_parameters_without_gsi (line 235) | def test_too_many_parameters_without_gsi(self): method test_filter_expression_params_excluded_from_count (line 262) | def test_filter_expression_params_excluded_from_count(self): method test_filter_expression_params_excluded_reveals_missing_key_param (line 284) | def test_filter_expression_params_excluded_reveals_missing_key_param(s... method test_filter_expression_between_params_excluded (line 307) | def test_filter_expression_between_params_excluded(self): method test_no_filter_expression_counts_all_params (line 337) | def test_no_filter_expression_counts_all_params(self): class TestValidateOperationCompatibility (line 358) | class TestValidateOperationCompatibility(TestRangeQueryValidator): method test_query_operation_with_range_condition (line 361) | def test_query_operation_with_range_condition(self): method test_get_item_operation_with_range_condition (line 376) | def test_get_item_operation_with_range_condition(self): method test_no_range_condition_operation_compatibility (line 397) | def test_no_range_condition_operation_compatibility(self): class TestValidateCompleteRangeQuery (line 413) | class TestValidateCompleteRangeQuery(TestRangeQueryValidator): method test_valid_complete_range_query (line 416) | def test_valid_complete_range_query(self): method test_invalid_range_condition_syntax (line 431) | def test_invalid_range_condition_syntax(self): method test_multiple_validation_errors (line 448) | def test_multiple_validation_errors(self): method test_no_range_condition_returns_empty (line 468) | def test_no_range_condition_returns_empty(self): method test_stops_validation_on_syntax_error (line 483) | def test_stops_validation_on_syntax_error(self): class TestRangeQueryValidatorRealisticScenarios (line 503) | class TestRangeQueryValidatorRealisticScenarios(TestRangeQueryValidator): method test_main_table_range_query_scenario (line 506) | def test_main_table_range_query_scenario(self): method test_gsi_range_query_scenario (line 523) | def test_gsi_range_query_scenario(self): class TestMultiAttributeSortKeyRangeQueries (line 544) | class TestMultiAttributeSortKeyRangeQueries(TestRangeQueryValidator): method test_multi_attribute_sk_range_on_second_attribute (line 547) | def test_multi_attribute_sk_range_on_second_attribute(self): method test_multi_attribute_sk_range_on_first_attribute (line 580) | def test_multi_attribute_sk_range_on_first_attribute(self): method test_multi_attribute_sk_range_on_last_attribute (line 612) | def test_multi_attribute_sk_range_on_last_attribute(self): method test_multi_attribute_sk_too_many_params_fails (line 646) | def test_multi_attribute_sk_too_many_params_fails(self): method test_multi_attribute_pk_with_multi_attribute_sk (line 680) | def test_multi_attribute_pk_with_multi_attribute_sk(self): method test_filter_expression_in_params_excluded (line 714) | def test_filter_expression_in_params_excluded(self): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_sample_generators.py class MockSampleGenerator (line 18) | class MockSampleGenerator(LanguageSampleGeneratorInterface): method get_sample_value (line 21) | def get_sample_value(self, field_type: str, field_name: str, **kwargs)... method get_update_value (line 25) | def get_update_value(self, field_type: str, field_name: str, **kwargs)... method get_default_values (line 29) | def get_default_values(self) -> dict[str, str]: method get_default_update_values (line 33) | def get_default_update_values(self) -> dict[str, str]: method get_parameter_value (line 37) | def get_parameter_value(self, param: dict, entity_name: str, all_entit... class TestLanguageSampleGeneratorInterface (line 43) | class TestLanguageSampleGeneratorInterface: method test_abstract_interface_cannot_be_instantiated (line 46) | def test_abstract_interface_cannot_be_instantiated(self): method test_mock_implementation_works (line 51) | def test_mock_implementation_works(self): class TestPythonSampleGenerator (line 64) | class TestPythonSampleGenerator: method generator (line 68) | def generator(self): method sample_usage_data (line 73) | def sample_usage_data(self): method temp_usage_file (line 94) | def temp_usage_file(self, sample_usage_data): method generator_with_usage_data (line 103) | def generator_with_usage_data(self, temp_usage_file): method test_init_without_usage_data (line 107) | def test_init_without_usage_data(self): method test_init_with_usage_data (line 112) | def test_init_with_usage_data(self, temp_usage_file): method test_init_with_invalid_usage_data (line 118) | def test_init_with_invalid_usage_data(self): method test_get_sample_value_with_usage_data_priority (line 124) | def test_get_sample_value_with_usage_data_priority(self, generator_wit... method test_get_sample_value_fallback_to_defaults (line 138) | def test_get_sample_value_fallback_to_defaults(self, generator_with_us... method test_get_update_value_with_usage_data_priority (line 144) | def test_get_update_value_with_usage_data_priority(self, generator_wit... method test_get_update_value_fallback_to_defaults (line 152) | def test_get_update_value_fallback_to_defaults(self, generator_with_us... method test_get_parameter_value_with_usage_data (line 158) | def test_get_parameter_value_with_usage_data(self, generator_with_usag... method test_sample_and_update_value_generation (line 168) | def test_sample_and_update_value_generation(self, generator): method test_default_values_structure (line 220) | def test_default_values_structure(self, generator): method test_parameter_value_generation (line 236) | def test_parameter_value_generation(self, generator): method test_gsi_sample_value_patterns (line 319) | def test_gsi_sample_value_patterns(self, generator): method test_get_parameter_value_fallback_to_sample_data (line 354) | def test_get_parameter_value_fallback_to_sample_data(self, temp_usage_... method test_get_parameter_value_range_query_lower_bound (line 378) | def test_get_parameter_value_range_query_lower_bound(self, generator): method test_get_parameter_value_range_query_upper_bound (line 402) | def test_get_parameter_value_range_query_upper_bound(self, generator): method test_get_parameter_value_generic_fallback (line 426) | def test_get_parameter_value_generic_fallback(self, generator): class TestSampleValueGeneratorIntegration (line 450) | class TestSampleValueGeneratorIntegration: method generator (line 454) | def generator(self): method sample_usage_data (line 459) | def sample_usage_data(self): method temp_usage_file (line 472) | def temp_usage_file(self, sample_usage_data): method generator_with_usage_data (line 481) | def generator_with_usage_data(self, temp_usage_file): method test_init_with_usage_data_path (line 485) | def test_init_with_usage_data_path(self, temp_usage_file): method test_generate_sample_value_with_kwargs (line 491) | def test_generate_sample_value_with_kwargs(self, generator_with_usage_... method test_generate_update_value_with_kwargs (line 498) | def test_generate_update_value_with_kwargs(self, generator_with_usage_... method test_get_updatable_field_excludes_gsi_keys (line 506) | def test_get_updatable_field_excludes_gsi_keys(self, generator): method test_get_updatable_field_excludes_timestamp_fields (line 531) | def test_get_updatable_field_excludes_timestamp_fields(self, generator): method test_unsupported_language_error (line 547) | def test_unsupported_language_error(self): method test_typescript_not_implemented (line 552) | def test_typescript_not_implemented(self): method test_value_generation_delegation (line 557) | def test_value_generation_delegation(self, generator): method test_helper_methods (line 578) | def test_helper_methods(self, generator): method test_get_all_key_params_deduplicates_shared_fields (line 623) | def test_get_all_key_params_deduplicates_shared_fields(self, generator): method test_get_all_key_params_preserves_unique_fields (line 631) | def test_get_all_key_params_preserves_unique_fields(self, generator): method test_get_all_key_params_partial_overlap (line 638) | def test_get_all_key_params_partial_overlap(self, generator): method test_get_parameter_value_uses_filter_values (line 649) | def test_get_parameter_value_uses_filter_values(self, tmp_path): method test_get_parameter_value_filter_value_is_none_falls_through (line 685) | def test_get_parameter_value_filter_value_is_none_falls_through(self, ... method test_get_gsi_sample_value_integer_no_timestamp (line 719) | def test_get_gsi_sample_value_integer_no_timestamp(self): method test_get_gsi_sample_value_decimal_no_price (line 725) | def test_get_gsi_sample_value_decimal_no_price(self): method test_get_update_value_array_unknown_item_type (line 731) | def test_get_update_value_array_unknown_item_type(self): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_schema_definitions.py class TestEnumUtilities (line 27) | class TestEnumUtilities: method test_get_enum_values (line 30) | def test_get_enum_values(self): method test_is_valid_enum_value (line 38) | def test_is_valid_enum_value(self): method test_suggest_enum_value_scenarios (line 50) | def test_suggest_enum_value_scenarios(self): method test_get_all_enum_classes (line 64) | def test_get_all_enum_classes(self): class TestFieldValidationHelpers (line 90) | class TestFieldValidationHelpers: method test_validate_required_fields_all_present (line 93) | def test_validate_required_fields_all_present(self): method test_validate_required_fields_missing_fields (line 100) | def test_validate_required_fields_missing_fields(self): method test_validate_enum_field_valid_value (line 112) | def test_validate_enum_field_valid_value(self): method test_validate_enum_field_invalid_value (line 117) | def test_validate_enum_field_invalid_value(self): method test_validate_enum_field_non_string_value (line 123) | def test_validate_enum_field_non_string_value(self): method test_validate_data_type_correct_type (line 129) | def test_validate_data_type_correct_type(self): method test_validate_data_type_incorrect_type (line 134) | def test_validate_data_type_incorrect_type(self): class TestFilterConditionDataclass (line 142) | class TestFilterConditionDataclass: method test_filter_condition_comparison (line 145) | def test_filter_condition_comparison(self): method test_filter_condition_between (line 155) | def test_filter_condition_between(self): method test_filter_condition_in (line 164) | def test_filter_condition_in(self): method test_filter_condition_contains (line 170) | def test_filter_condition_contains(self): method test_filter_condition_begins_with (line 177) | def test_filter_condition_begins_with(self): method test_filter_condition_attribute_exists (line 183) | def test_filter_condition_attribute_exists(self): method test_filter_condition_attribute_not_exists (line 191) | def test_filter_condition_attribute_not_exists(self): method test_filter_condition_size_comparison (line 197) | def test_filter_condition_size_comparison(self): method test_filter_condition_size_between (line 204) | def test_filter_condition_size_between(self): method test_filter_condition_minimal (line 214) | def test_filter_condition_minimal(self): method test_valid_filter_operators_constant (line 224) | def test_valid_filter_operators_constant(self): method test_valid_filter_functions_constant (line 230) | def test_valid_filter_functions_constant(self): method test_valid_filter_logical_operators_constant (line 236) | def test_valid_filter_logical_operators_constant(self): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_schema_loader.py class TestSchemaLoader (line 10) | class TestSchemaLoader: method test_load_valid_schema_success (line 13) | def test_load_valid_schema_success(self, mock_schema_data): method test_load_invalid_schema_raises_error (line 32) | def test_load_invalid_schema_raises_error(self): method test_load_nonexistent_file_raises_error (line 48) | def test_load_nonexistent_file_raises_error(self): method test_schema_properties (line 55) | def test_schema_properties(self, mock_schema_data): method test_directory_path_raises_error (line 78) | def test_directory_path_raises_error(self, tmp_path): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_schema_validator.py class TestSchemaValidator (line 19) | class TestSchemaValidator: method validator (line 23) | def validator(self): method _validate_schema_dict (line 27) | def _validate_schema_dict(self, validator, schema_dict): method valid_minimal_schema (line 38) | def valid_minimal_schema(self): method test_validate_valid_schema (line 61) | def test_validate_valid_schema(self, validator, valid_minimal_schema): method test_validate_schema_not_dict (line 66) | def test_validate_schema_not_dict(self, validator): method test_validate_tables_not_list (line 73) | def test_validate_tables_not_list(self, validator): method test_validate_empty_tables (line 80) | def test_validate_empty_tables(self, validator): method test_validate_table_not_dict (line 87) | def test_validate_table_not_dict(self, validator): method test_validate_table_config_not_dict (line 94) | def test_validate_table_config_not_dict(self, validator): method test_validate_entities_not_dict (line 103) | def test_validate_entities_not_dict(self, validator): method test_validate_empty_entities (line 120) | def test_validate_empty_entities(self, validator): method test_validate_entity_not_dict (line 134) | def test_validate_entity_not_dict(self, validator): method test_validate_fields_not_list (line 149) | def test_validate_fields_not_list(self, validator, valid_minimal_schema): method test_validate_empty_fields (line 157) | def test_validate_empty_fields(self, validator, valid_minimal_schema): method test_validate_field_not_dict (line 165) | def test_validate_field_not_dict(self, validator, valid_minimal_schema): method test_validate_duplicate_field_names (line 173) | def test_validate_duplicate_field_names(self, validator, valid_minimal... method test_validate_invalid_field_type (line 184) | def test_validate_invalid_field_type(self, validator, valid_minimal_sc... method test_validate_array_field_missing_item_type (line 194) | def test_validate_array_field_missing_item_type(self, validator, valid... method test_validate_field_required_not_bool (line 204) | def test_validate_field_required_not_bool(self, validator, valid_minim... method test_validate_sk_template_null (line 211) | def test_validate_sk_template_null(self, validator, valid_minimal_sche... method test_validate_sk_template_invalid_type (line 216) | def test_validate_sk_template_invalid_type(self, validator, valid_mini... method test_validate_access_patterns_not_list (line 221) | def test_validate_access_patterns_not_list(self, validator, valid_mini... method test_validate_access_pattern_not_dict (line 231) | def test_validate_access_pattern_not_dict(self, validator, valid_minim... method test_validate_pattern_id_not_int (line 241) | def test_validate_pattern_id_not_int(self, validator, valid_minimal_sc... method test_validate_duplicate_pattern_ids (line 258) | def test_validate_duplicate_pattern_ids(self, validator, valid_minimal... method test_validate_duplicate_pattern_names (line 283) | def test_validate_duplicate_pattern_names(self, validator, valid_minim... method test_validate_invalid_enums (line 308) | def test_validate_invalid_enums(self, validator, valid_minimal_schema): method test_validate_parameters_not_list (line 325) | def test_validate_parameters_not_list(self, validator, valid_minimal_s... method test_validate_parameter_not_dict (line 342) | def test_validate_parameter_not_dict(self, validator, valid_minimal_sc... method test_validate_duplicate_parameter_names (line 359) | def test_validate_duplicate_parameter_names(self, validator, valid_min... method test_validate_invalid_parameter_type (line 376) | def test_validate_invalid_parameter_type(self, validator, valid_minima... method test_validate_entity_parameter_missing_entity_type (line 390) | def test_validate_entity_parameter_missing_entity_type(self, validator... method test_validate_entity_reference (line 407) | def test_validate_entity_reference(self, validator): method test_validate_duplicate_entity_names_across_tables (line 445) | def test_validate_duplicate_entity_names_across_tables(self, validator): method test_validate_duplicate_table_names (line 480) | def test_validate_duplicate_table_names(self, validator): method test_validate_file_not_found (line 512) | def test_validate_file_not_found(self, validator): method test_validate_invalid_json (line 519) | def test_validate_invalid_json(self, validator): method test_format_validation_result_success (line 530) | def test_format_validation_result_success(self, validator): method test_format_validation_result_with_errors_and_warnings (line 535) | def test_format_validation_result_with_errors_and_warnings(self, valid... method test_convenience_function (line 556) | def test_convenience_function(self): method test_validate_consistent_read_boolean_type (line 564) | def test_validate_consistent_read_boolean_type(self, validator, valid_... method test_validate_consistent_read_gsi_restriction (line 585) | def test_validate_consistent_read_gsi_restriction(self, validator, val... method test_validate_consistent_read_gsi_false_allowed (line 623) | def test_validate_consistent_read_gsi_false_allowed(self, validator, v... method test_validate_consistent_read_main_table_true (line 656) | def test_validate_consistent_read_main_table_true(self, validator, val... method test_validate_consistent_read_error_includes_pattern_info (line 672) | def test_validate_consistent_read_error_includes_pattern_info( method test_consistent_read_type_error_includes_pattern_id (line 691) | def test_consistent_read_type_error_includes_pattern_id(self, validato... method test_consistent_read_type_error_includes_pattern_name (line 711) | def test_consistent_read_type_error_includes_pattern_name( method test_consistent_read_gsi_error_includes_pattern_id (line 733) | def test_consistent_read_gsi_error_includes_pattern_id(self, validator... method test_consistent_read_gsi_error_includes_pattern_name (line 770) | def test_consistent_read_gsi_error_includes_pattern_name( method test_consistent_read_gsi_error_explains_restriction (line 809) | def test_consistent_read_gsi_error_explains_restriction(self, validato... method test_property_consistent_read_non_boolean_rejected (line 861) | def test_property_consistent_read_non_boolean_rejected(self, consisten... method test_property_gsi_queries_reject_consistent_read_true (line 914) | def test_property_gsi_queries_reject_consistent_read_true(self, operat... method test_property_gsi_queries_accept_consistent_read_false_or_omitted (line 992) | def test_property_gsi_queries_accept_consistent_read_false_or_omitted( method test_validate_file_permission_error (line 1070) | def test_validate_file_permission_error(self, validator): method test_validate_missing_pk_template_with_guidance (line 1077) | def test_validate_missing_pk_template_with_guidance(self, validator): method test_validate_array_field_with_item_type (line 1105) | def test_validate_array_field_with_item_type(self, validator): method test_validate_main_table_range_query_exception_handling (line 1137) | def test_validate_main_table_range_query_exception_handling(self, vali... method test_validate_gsi_configuration_exception_handling (line 1171) | def test_validate_gsi_configuration_exception_handling(self, validator): method test_validate_file_value_error_non_json (line 1197) | def test_validate_file_value_error_non_json(self, validator): method test_validate_entity_type_wrong_type (line 1212) | def test_validate_entity_type_wrong_type(self, validator): method test_validate_range_query_with_range_errors (line 1236) | def test_validate_range_query_with_range_errors(self, validator): method test_validate_range_query_exception_with_malformed_pattern (line 1277) | def test_validate_range_query_exception_with_malformed_pattern(self, v... method test_validate_gsi_with_exception_in_validation (line 1312) | def test_validate_gsi_with_exception_in_validation(self, validator): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_sparse_gsi.py class SparseTestEntity (line 11) | class SparseTestEntity(ConfigurableEntity): method get_config (line 20) | def get_config(cls) -> EntityConfig: class TestSparseGSICreate (line 31) | class TestSparseGSICreate: method test_create_excludes_none_values (line 34) | def test_create_excludes_none_values(self): method test_create_includes_non_none_values (line 60) | def test_create_includes_non_none_values(self): method test_create_with_mixed_none_and_values (line 77) | def test_create_with_mixed_none_and_values(self): class TestSparseGSIUpdate (line 97) | class TestSparseGSIUpdate: method test_update_excludes_none_values (line 100) | def test_update_excludes_none_values(self): method test_update_removes_fields_by_setting_none (line 119) | def test_update_removes_fields_by_setting_none(self): method test_update_includes_non_none_values (line 147) | def test_update_includes_non_none_values(self): class TestSparseGSIBehavior (line 166) | class TestSparseGSIBehavior: method test_sparse_gsi_lifecycle (line 169) | def test_sparse_gsi_lifecycle(self): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_type_mappings.py class TestTypeMapper (line 16) | class TestTypeMapper: method python_mapper (line 20) | def python_mapper(self): method test_python_mapper_initialization (line 24) | def test_python_mapper_initialization(self, python_mapper): method test_type_mappings_comprehensive (line 30) | def test_type_mappings_comprehensive(self, python_mapper): method test_field_and_parameter_mappings (line 59) | def test_field_and_parameter_mappings(self, python_mapper): method test_unsupported_language_raises_error (line 75) | def test_unsupported_language_raises_error(self): method test_language_support_and_fallbacks (line 80) | def test_language_support_and_fallbacks(self): method test_edge_cases_and_missing_data (line 91) | def test_edge_cases_and_missing_data(self): method test_validation_and_utility_methods (line 101) | def test_validation_and_utility_methods(self): class TestLanguageTypeMappingInterface (line 134) | class TestLanguageTypeMappingInterface: method test_all_mappings_property (line 137) | def test_all_mappings_property(self): method test_get_language_name (line 151) | def test_get_language_name(self): class TestPythonTypeMappings (line 162) | class TestPythonTypeMappings: method python_mappings (line 166) | def python_mappings(self): method test_python_specific_methods (line 174) | def test_python_specific_methods(self, python_mappings): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_usage_data_loader.py class TestUsageDataLoader (line 18) | class TestUsageDataLoader: method sample_usage_data (line 22) | def sample_usage_data(self): method temp_usage_file (line 59) | def temp_usage_file(self, sample_usage_data): method test_init_without_path (line 67) | def test_init_without_path(self): method test_init_with_nonexistent_path (line 75) | def test_init_with_nonexistent_path(self): method test_init_with_valid_path (line 82) | def test_init_with_valid_path(self, temp_usage_file, sample_usage_data): method test_load_usage_data_file_not_found (line 91) | def test_load_usage_data_file_not_found(self): method test_load_usage_data_invalid_json (line 101) | def test_load_usage_data_invalid_json(self): method test_load_usage_data_permission_error (line 111) | def test_load_usage_data_permission_error(self): method test_get_sample_value_for_field_entity_specific (line 121) | def test_get_sample_value_for_field_entity_specific(self, temp_usage_f... method test_get_sample_value_for_field_access_pattern_data (line 132) | def test_get_sample_value_for_field_access_pattern_data(self, temp_usa... method test_get_sample_value_for_field_fallback (line 140) | def test_get_sample_value_for_field_fallback(self, temp_usage_file): method test_get_sample_value_for_field_with_entity (line 149) | def test_get_sample_value_for_field_with_entity(self, temp_usage_file): method test_get_sample_value_for_field_multiple_entities (line 160) | def test_get_sample_value_for_field_multiple_entities(self, temp_usage... method test_get_sample_value_for_field_not_found (line 173) | def test_get_sample_value_for_field_not_found(self, temp_usage_file): method test_get_update_value_for_field_entity_specific (line 181) | def test_get_update_value_for_field_entity_specific(self, temp_usage_f... method test_get_update_value_for_field_fallback (line 189) | def test_get_update_value_for_field_fallback(self, temp_usage_file): method test_get_update_value_for_field_not_found (line 198) | def test_get_update_value_for_field_not_found(self, temp_usage_file): method test_get_sample_value_without_formatter (line 206) | def test_get_sample_value_without_formatter(self, temp_usage_file): method test_get_update_value_without_formatter (line 213) | def test_get_update_value_without_formatter(self, temp_usage_file): method test_format_string_value (line 220) | def test_format_string_value(self): method test_format_integer_value (line 228) | def test_format_integer_value(self): method test_format_decimal_value (line 237) | def test_format_decimal_value(self): method test_format_boolean_value (line 246) | def test_format_boolean_value(self): method test_format_array_value (line 259) | def test_format_array_value(self): method test_format_object_value (line 268) | def test_format_object_value(self): method test_format_value_for_type_all_types (line 277) | def test_format_value_for_type_all_types(self): method test_getter_methods (line 290) | def test_getter_methods(self, temp_usage_file, sample_usage_data): method test_getter_methods_missing_data (line 304) | def test_getter_methods_missing_data(self, temp_usage_file): method test_empty_loader_getter_methods (line 311) | def test_empty_loader_getter_methods(self): method test_get_filter_value_entity_not_in_data (line 319) | def test_get_filter_value_entity_not_in_data(self, temp_usage_file): method test_get_filter_value_param_not_in_filter_values (line 325) | def test_get_filter_value_param_not_in_filter_values(self, temp_usage_... method test_get_filter_value_no_entity_name (line 332) | def test_get_filter_value_no_entity_name(self, temp_usage_file): method test_get_filter_value_with_filter_values_section (line 338) | def test_get_filter_value_with_filter_values_section(self, tmp_path): method test_get_filter_value_without_formatter (line 364) | def test_get_filter_value_without_formatter(self): method test_load_usage_data_unexpected_error (line 370) | def test_load_usage_data_unexpected_error(self, tmp_path): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_usage_data_validator.py class TestUsageDataValidator (line 16) | class TestUsageDataValidator: method validator (line 20) | def validator(self): method schema_entities (line 25) | def schema_entities(self): method entity_fields (line 30) | def entity_fields(self): method valid_usage_data (line 35) | def valid_usage_data(self): method test_validate_valid_usage_data (line 52) | def test_validate_valid_usage_data( method test_validate_missing_file (line 66) | def test_validate_missing_file(self, validator, schema_entities, entit... method test_validate_invalid_json (line 76) | def test_validate_invalid_json(self, validator, schema_entities, entit... method test_validate_not_dict (line 89) | def test_validate_not_dict(self, validator, schema_entities, entity_fi... method test_validate_missing_entities_key (line 102) | def test_validate_missing_entities_key( method test_validate_missing_required_entities (line 118) | def test_validate_missing_required_entities( method test_validate_missing_required_sections (line 143) | def test_validate_missing_required_sections( method test_validate_unknown_entities (line 174) | def test_validate_unknown_entities( method test_validate_invalid_field_names (line 195) | def test_validate_invalid_field_names( method test_unknown_top_level_keys (line 229) | def test_unknown_top_level_keys(self, validator, schema_entities, enti... method test_empty_sample_data_section (line 258) | def test_empty_sample_data_section(self, validator, schema_entities, e... method test_empty_entities_section (line 285) | def test_empty_entities_section(self, validator, schema_entities, enti... method test_format_validation_result (line 298) | def test_format_validation_result(self, validator): method test_constants_and_immutability (line 314) | def test_constants_and_immutability(self, validator): method test_entity_not_dict (line 326) | def test_entity_not_dict(self, validator, schema_entities, entity_fiel... method test_section_not_dict (line 348) | def test_section_not_dict(self, validator, schema_entities, entity_fie... method test_unknown_section_name (line 374) | def test_unknown_section_name(self, validator, schema_entities, entity... method test_validate_non_json_value_error (line 401) | def test_validate_non_json_value_error( method test_validate_empty_entities_dict (line 416) | def test_validate_empty_entities_dict( method test_filter_values_section_not_dict (line 430) | def test_filter_values_section_not_dict( method test_filter_values_section_valid_dict_passes (line 458) | def test_filter_values_section_valid_dict_passes( FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_utils.py class TestUtilityFunctions (line 25) | class TestUtilityFunctions: method test_to_snake_case (line 28) | def test_to_snake_case(self): method test_to_snake_case_with_hyphens (line 44) | def test_to_snake_case_with_hyphens(self): method test_filter_conflicting_patterns (line 73) | def test_filter_conflicting_patterns(self): class TestUtilityFunctionsAdvanced (line 100) | class TestUtilityFunctionsAdvanced: method test_to_pascal_case (line 103) | def test_to_pascal_case(self): method test_generate_test_instruction (line 117) | def test_generate_test_instruction(self): method test_format_entity_imports (line 132) | def test_format_entity_imports(self): class TestSignatureConflictDetection (line 148) | class TestSignatureConflictDetection: method test_get_crud_signature_create (line 151) | def test_get_crud_signature_create(self): method test_get_crud_signature_get (line 157) | def test_get_crud_signature_get(self): method test_get_crud_signature_update (line 165) | def test_get_crud_signature_update(self): method test_get_crud_signature_delete (line 171) | def test_get_crud_signature_delete(self): method test_get_pattern_signature (line 177) | def test_get_pattern_signature(self): method test_get_pattern_signature_mixed (line 189) | def test_get_pattern_signature_mixed(self): method test_has_signature_conflict_true (line 200) | def test_has_signature_conflict_true(self): method test_has_signature_conflict_false_different_signature (line 209) | def test_has_signature_conflict_false_different_signature(self): method test_has_signature_conflict_false_different_name (line 231) | def test_has_signature_conflict_false_different_name(self): method test_generate_renamed_method_name_with_refs (line 240) | def test_generate_renamed_method_name_with_refs(self): method test_generate_renamed_method_name_query_list (line 254) | def test_generate_renamed_method_name_query_list(self): method test_generate_renamed_method_name_with_params (line 264) | def test_generate_renamed_method_name_with_params(self): method test_generate_renamed_method_name_fallback (line 277) | def test_generate_renamed_method_name_fallback(self): method test_filter_conflicting_patterns_with_signature_check (line 288) | def test_filter_conflicting_patterns_with_signature_check(self): method test_filter_conflicting_patterns_query_vs_getitem (line 324) | def test_filter_conflicting_patterns_query_vs_getitem(self): class TestSemanticEquivalenceDetection (line 358) | class TestSemanticEquivalenceDetection: method test_getitem_equivalent_to_crud_get (line 361) | def test_getitem_equivalent_to_crud_get(self): method test_getitem_with_composite_key_equivalent (line 373) | def test_getitem_with_composite_key_equivalent(self): method test_getitem_with_different_params_not_equivalent (line 388) | def test_getitem_with_different_params_not_equivalent(self): method test_deleteitem_equivalent_to_crud_delete (line 400) | def test_deleteitem_equivalent_to_crud_delete(self): method test_deleteitem_different_name_not_equivalent (line 412) | def test_deleteitem_different_name_not_equivalent(self): method test_query_not_equivalent_to_crud (line 424) | def test_query_not_equivalent_to_crud(self): class TestItemCollectionDetection (line 438) | class TestItemCollectionDetection: method test_detect_item_collection_true (line 441) | def test_detect_item_collection_true(self): method test_detect_item_collection_false_different_pks (line 453) | def test_detect_item_collection_false_different_pks(self): method test_detect_item_collection_single_entity (line 465) | def test_detect_item_collection_single_entity(self): method test_get_sk_prefix_with_variables (line 472) | def test_get_sk_prefix_with_variables(self): method test_get_sk_prefix_no_variables (line 478) | def test_get_sk_prefix_no_variables(self): method test_get_sk_prefix_only_variable (line 483) | def test_get_sk_prefix_only_variable(self): method test_get_sk_prefix_empty (line 488) | def test_get_sk_prefix_empty(self): class TestCrudMethodNames (line 495) | class TestCrudMethodNames: method test_get_crud_method_names_fallback_no_naming_conventions (line 498) | def test_get_crud_method_names_fallback_no_naming_conventions(self): class TestCrudSignatureEdgeCases (line 521) | class TestCrudSignatureEdgeCases: method test_get_crud_signature_delete_with_single_key (line 524) | def test_get_crud_signature_delete_with_single_key(self): class TestSemanticEquivalenceEdgeCases (line 537) | class TestSemanticEquivalenceEdgeCases: method test_update_item_with_entity_param_equivalent (line 540) | def test_update_item_with_entity_param_equivalent(self): class TestConsistentReadCapture (line 554) | class TestConsistentReadCapture: method test_capture_consistent_read_true_for_exact_name_match (line 566) | def test_capture_consistent_read_true_for_exact_name_match(self): method test_capture_consistent_read_true_for_semantic_equivalent (line 588) | def test_capture_consistent_read_true_for_semantic_equivalent(self): method test_no_capture_for_non_getitem_operations (line 610) | def test_no_capture_for_non_getitem_operations(self): method test_or_logic_any_true_wins (line 644) | def test_or_logic_any_true_wins(self): FILE: src/dynamodb-mcp-server/tests/repo_generation_tool/unit/test_validation_utils.py class TestValidationError (line 11) | class TestValidationError: method test_creation_with_default_severity (line 14) | def test_creation_with_default_severity(self): method test_creation_with_custom_severity (line 26) | def test_creation_with_custom_severity(self): class TestValidationResult (line 38) | class TestValidationResult: method test_creation (line 41) | def test_creation(self): method test_add_error (line 48) | def test_add_error(self): method test_add_errors (line 57) | def test_add_errors(self): method test_add_warning (line 68) | def test_add_warning(self): method test_store_entity_info (line 76) | def test_store_entity_info(self): method test_format_success (line 87) | def test_format_success(self): method test_format_with_errors (line 93) | def test_format_with_errors(self): method test_format_with_warnings (line 102) | def test_format_with_warnings(self): method test_format_with_errors_and_warnings (line 111) | def test_format_with_errors_and_warnings(self): FILE: src/dynamodb-mcp-server/tests/test_common.py class TestValidateDatabaseName (line 16) | class TestValidateDatabaseName: method test_database_name_validation (line 19) | def test_database_name_validation(self): class TestValidatePathWithinDirectory (line 61) | class TestValidatePathWithinDirectory: method test_path_validation_scenarios (line 64) | def test_path_validation_scenarios(self): class TestHandleExceptionsDecorator (line 106) | class TestHandleExceptionsDecorator: method test_successful_execution_returns_result (line 110) | async def test_successful_execution_returns_result(self): method test_exception_returns_error_dict (line 122) | async def test_exception_returns_error_dict(self): method test_preserves_positional_arguments (line 136) | async def test_preserves_positional_arguments(self): method test_preserves_keyword_arguments (line 148) | async def test_preserves_keyword_arguments(self): method test_exception_with_arguments_returns_error (line 160) | async def test_exception_with_arguments_returns_error(self): method test_exception_with_kwargs_returns_error (line 173) | async def test_exception_with_kwargs_returns_error(self): method test_logs_exception_with_function_name (line 186) | async def test_logs_exception_with_function_name(self, caplog): method test_preserves_function_metadata (line 200) | async def test_preserves_function_metadata(self): FILE: src/dynamodb-mcp-server/tests/test_dynamodb_server.py function aws_credentials (line 28) | async def aws_credentials(): function test_dynamodb_data_modeling (line 34) | async def test_dynamodb_data_modeling(): function test_dynamodb_data_modeling_mcp_integration (line 53) | async def test_dynamodb_data_modeling_mcp_integration(): function test_source_db_analyzer_missing_parameters (line 72) | async def test_source_db_analyzer_missing_parameters(tmp_path): function test_source_db_analyzer_empty_parameters (line 90) | async def test_source_db_analyzer_empty_parameters(tmp_path): function test_source_db_analyzer_env_fallback (line 111) | async def test_source_db_analyzer_env_fallback(monkeypatch, tmp_path): function test_source_db_analyzer_connection_method_precedence (line 134) | async def test_source_db_analyzer_connection_method_precedence(mysql_env... function test_source_db_analyzer_env_hostname_only_fallback (line 157) | async def test_source_db_analyzer_env_hostname_only_fallback(mysql_env_s... function test_source_db_analyzer_no_env_connection_params (line 187) | async def test_source_db_analyzer_no_env_connection_params(mysql_env_set... function test_source_db_analyzer_unsupported_database (line 217) | async def test_source_db_analyzer_unsupported_database(tmp_path): function test_source_db_analyzer_analysis_exception (line 239) | async def test_source_db_analyzer_analysis_exception(tmp_path, monkeypat... function test_source_db_analyzer_successful_analysis (line 265) | async def test_source_db_analyzer_successful_analysis(tmp_path, monkeypa... function test_source_db_analyzer_exception_handling (line 302) | async def test_source_db_analyzer_exception_handling(tmp_path, monkeypat... function test_source_db_analyzer_all_queries_failed (line 326) | async def test_source_db_analyzer_all_queries_failed(tmp_path, monkeypat... function test_source_db_analyzer_no_files_saved (line 364) | async def test_source_db_analyzer_no_files_saved(tmp_path, monkeypatch): function test_source_db_analyzer_only_saved_files_no_errors (line 402) | async def test_source_db_analyzer_only_saved_files_no_errors(tmp_path, m... function test_self_service_query_generation (line 441) | async def test_self_service_query_generation(tmp_path, monkeypatch): function test_self_service_result_parsing (line 514) | async def test_self_service_result_parsing(tmp_path, monkeypatch): function test_invalid_execution_modes (line 587) | async def test_invalid_execution_modes(tmp_path): function test_execute_dynamodb_command_valid_command (line 628) | async def test_execute_dynamodb_command_valid_command(): function test_execute_dynamodb_command_invalid_command (line 644) | async def test_execute_dynamodb_command_invalid_command(): function test_execute_dynamodb_command_without_endpoint (line 651) | async def test_execute_dynamodb_command_without_endpoint(): function test_execute_dynamodb_command_with_endpoint_sets_env_vars (line 665) | async def test_execute_dynamodb_command_with_endpoint_sets_env_vars(): function test_execute_dynamodb_command_exception_handling (line 686) | async def test_execute_dynamodb_command_exception_handling(): function test_execute_access_patterns_success (line 699) | async def test_execute_access_patterns_success(): function test_execute_access_patterns_missing_implementation (line 736) | async def test_execute_access_patterns_missing_implementation(): function test_execute_access_patterns_exception_handling (line 749) | async def test_execute_access_patterns_exception_handling(): function test_dynamodb_data_model_validation_success (line 767) | async def test_dynamodb_data_model_validation_success(): function test_dynamodb_data_model_validation_file_not_found (line 799) | async def test_dynamodb_data_model_validation_file_not_found(): function test_dynamodb_data_model_validation_invalid_json (line 810) | async def test_dynamodb_data_model_validation_invalid_json(): function test_dynamodb_data_model_validation_missing_required_keys (line 822) | async def test_dynamodb_data_model_validation_missing_required_keys(): function test_dynamodb_data_model_validation_setup_exception (line 838) | async def test_dynamodb_data_model_validation_setup_exception(): function test_create_server (line 854) | def test_create_server(): function test_property_command_validation_preservation (line 867) | def test_property_command_validation_preservation(invalid_command: str): function test_property_endpoint_url_credential_configuration (line 899) | def test_property_endpoint_url_credential_configuration(endpoint_url: str): function test_property_endpoint_url_command_modification (line 964) | def test_property_endpoint_url_command_modification(endpoint_url: str): function test_dynamodb_data_model_validation_mcp_integration (line 1026) | async def test_dynamodb_data_model_validation_mcp_integration(): function test_error_propagation_in_validation_chain (line 1039) | async def test_error_propagation_in_validation_chain(): function test_execute_dynamodb_command_edge_cases (line 1065) | async def test_execute_dynamodb_command_edge_cases(): function test_dynamodb_data_model_validation_file_permissions (line 1084) | async def test_dynamodb_data_model_validation_file_permissions(): function test_source_db_analyzer_managed_mode_not_implemented (line 1097) | async def test_source_db_analyzer_managed_mode_not_implemented(tmp_path): function test_source_db_analyzer_invalid_execution_mode (line 1120) | async def test_source_db_analyzer_invalid_execution_mode(tmp_path): function test_dynamodb_data_model_validation_guide_file_not_found (line 1133) | async def test_dynamodb_data_model_validation_guide_file_not_found(): function test_dynamodb_data_model_validation_file_not_found_exception (line 1147) | async def test_dynamodb_data_model_validation_file_not_found_exception(): function test_property_access_pattern_response_format_consistency (line 1174) | def test_property_access_pattern_response_format_consistency( function test_property_error_response_format_consistency (line 1265) | def test_property_error_response_format_consistency( function test_generate_resources_cdk_success (line 1366) | async def test_generate_resources_cdk_success(tmp_path): function test_generate_resources_unsupported_resource_type (line 1386) | async def test_generate_resources_unsupported_resource_type(tmp_path): function test_generate_resources_cdk_generator_exception (line 1400) | async def test_generate_resources_cdk_generator_exception(tmp_path): function test_generate_resources_mcp_integration (line 1420) | async def test_generate_resources_mcp_integration(): function test_compute_performances_and_costs_basic (line 1433) | async def test_compute_performances_and_costs_basic(tmp_path): function test_compute_performances_and_costs_appends_to_md_file (line 1470) | async def test_compute_performances_and_costs_appends_to_md_file(tmp_path): function test_compute_performances_and_costs_md_file_not_found (line 1515) | async def test_compute_performances_and_costs_md_file_not_found(tmp_path): function test_compute_performances_and_costs_with_query_pattern (line 1559) | async def test_compute_performances_and_costs_with_query_pattern(tmp_path): function test_compute_performances_and_costs_validation_error (line 1600) | async def test_compute_performances_and_costs_validation_error(tmp_path): function test_compute_performances_and_costs_mcp_integration (line 1636) | async def test_compute_performances_and_costs_mcp_integration(): function test_dynamodb_data_model_schema_converter (line 1650) | async def test_dynamodb_data_model_schema_converter(): function test_dynamodb_data_model_schema_validator_valid_schema (line 1714) | async def test_dynamodb_data_model_schema_validator_valid_schema(): function test_dynamodb_data_model_schema_validator_invalid_schema (line 1756) | async def test_dynamodb_data_model_schema_validator_invalid_schema(): function test_dynamodb_data_model_schema_validator_file_not_found (line 1777) | async def test_dynamodb_data_model_schema_validator_file_not_found(tmp_p... function test_dynamodb_data_model_schema_validator_multiple_valid_schemas (line 1792) | async def test_dynamodb_data_model_schema_validator_multiple_valid_schem... function test_schema_validator_allows_any_directory (line 1823) | async def test_schema_validator_allows_any_directory(tmp_path): function test_generate_python_data_access_layer_success (line 1861) | async def test_generate_python_data_access_layer_success(): function test_generate_data_access_layer_generation_failure (line 1911) | async def test_generate_data_access_layer_generation_failure(): function test_generate_data_access_layer_file_not_found (line 1933) | async def test_generate_data_access_layer_file_not_found(): function test_generate_data_access_layer_exception_handling (line 1952) | async def test_generate_data_access_layer_exception_handling( function test_load_next_steps_prompt (line 1983) | def test_load_next_steps_prompt(filename, kwargs, expected_content): function test_usage_data_path_resolved (line 1997) | async def test_usage_data_path_resolved(tmp_path): function test_usage_data_path_none_handled (line 2047) | async def test_usage_data_path_none_handled(): function test_usage_data_path_traversal_blocked (line 2101) | async def test_usage_data_path_traversal_blocked(tmp_path, test_func): function test_dynamodb_data_model_schema_converter_without_usage_data (line 2141) | async def test_dynamodb_data_model_schema_converter_without_usage_data(): function test_dynamodb_data_model_schema_validator_value_error (line 2154) | async def test_dynamodb_data_model_schema_validator_value_error(tmp_path): function test_dynamodb_data_model_schema_validator_file_not_found_from_generate (line 2169) | async def test_dynamodb_data_model_schema_validator_file_not_found_from_... function test_dynamodb_data_model_schema_validator_unexpected_exception (line 2188) | async def test_dynamodb_data_model_schema_validator_unexpected_exception... function test_main_function (line 2206) | def test_main_function(): function test_call_tool_formats_validation_errors (line 2216) | async def test_call_tool_formats_validation_errors(): function test_call_tool_preserves_non_validation_errors (line 2252) | async def test_call_tool_preserves_non_validation_errors(): FILE: src/dynamodb-mcp-server/tests/test_markdown_formatter.py function mysql_plugin (line 24) | def mysql_plugin(): function sample_results (line 30) | def sample_results(): function sample_metadata (line 146) | def sample_metadata(): function test_markdown_formatter_initialization (line 158) | def test_markdown_formatter_initialization( function test_format_as_markdown_table_basic (line 174) | def test_format_as_markdown_table_basic(tmp_path, sample_metadata, mysql... function test_format_as_markdown_table_with_nulls (line 190) | def test_format_as_markdown_table_with_nulls(tmp_path, sample_metadata, ... function test_format_as_markdown_table_with_floats (line 204) | def test_format_as_markdown_table_with_floats(tmp_path, sample_metadata,... function test_format_as_markdown_table_empty_data (line 216) | def test_format_as_markdown_table_empty_data(tmp_path, sample_metadata, ... function test_format_as_markdown_table_none_data (line 224) | def test_format_as_markdown_table_none_data(tmp_path, sample_metadata, m... function test_format_as_markdown_table_invalid_type (line 233) | def test_format_as_markdown_table_invalid_type(tmp_path, sample_metadata... function test_format_as_markdown_table_non_dict_row (line 241) | def test_format_as_markdown_table_non_dict_row(tmp_path, sample_metadata... function test_format_as_markdown_table_empty_dict_row (line 249) | def test_format_as_markdown_table_empty_dict_row(tmp_path, sample_metada... function test_format_as_markdown_table_mixed_row_types (line 257) | def test_format_as_markdown_table_mixed_row_types(tmp_path, sample_metad... function test_format_as_markdown_table_all_invalid_rows (line 273) | def test_format_as_markdown_table_all_invalid_rows(tmp_path, sample_meta... function test_format_as_markdown_table_escapes_pipes (line 288) | def test_format_as_markdown_table_escapes_pipes(tmp_path, sample_metadat... function test_generate_query_file (line 301) | def test_generate_query_file(tmp_path, sample_metadata, mysql_plugin): function test_generate_skipped_query_file (line 323) | def test_generate_skipped_query_file(tmp_path, sample_metadata, mysql_pl... function test_generate_all_files (line 340) | def test_generate_all_files(tmp_path, sample_results, sample_metadata, m... function test_generate_all_files_with_skipped_queries (line 360) | def test_generate_all_files_with_skipped_queries(tmp_path, sample_result... function test_manifest_generation (line 387) | def test_manifest_generation(tmp_path, sample_results, sample_metadata, ... function test_manifest_with_skipped_queries (line 409) | def test_manifest_with_skipped_queries(tmp_path, sample_results, mysql_p... function test_error_handling_invalid_data (line 430) | def test_error_handling_invalid_data(tmp_path, sample_metadata, mysql_pl... function test_summary_statistics_calculation (line 447) | def test_summary_statistics_calculation(tmp_path, sample_results, sample... function test_file_registry_tracking (line 463) | def test_file_registry_tracking(tmp_path, sample_results, sample_metadat... function test_generate_query_file_write_error (line 475) | def test_generate_query_file_write_error(tmp_path, sample_metadata, monk... function test_generate_skipped_query_file_write_error (line 503) | def test_generate_skipped_query_file_write_error( function test_generate_manifest_write_error (line 528) | def test_generate_manifest_write_error( function test_generate_all_files_directory_creation_error (line 553) | def test_generate_all_files_directory_creation_error(sample_results, sam... function test_format_as_markdown_table_row_formatting_error (line 573) | def test_format_as_markdown_table_row_formatting_error(tmp_path, sample_... function test_generate_query_file_invalid_result_structure (line 595) | def test_generate_query_file_invalid_result_structure(tmp_path, sample_m... function test_generate_query_file_unexpected_exception (line 615) | def test_generate_query_file_unexpected_exception( function test_generate_skipped_query_file_unexpected_exception (line 648) | def test_generate_skipped_query_file_unexpected_exception( function test_generate_manifest_unexpected_exception (line 671) | def test_generate_manifest_unexpected_exception( function test_format_as_markdown_table_with_booleans (line 697) | def test_format_as_markdown_table_with_booleans(tmp_path, sample_metadat... function test_format_as_markdown_table_with_integers (line 711) | def test_format_as_markdown_table_with_integers(tmp_path, sample_metadat... function test_manifest_with_comprehensive_statistics (line 724) | def test_manifest_with_comprehensive_statistics(tmp_path, sample_metadat... function test_manifest_with_errors_section (line 772) | def test_manifest_with_errors_section(tmp_path, sample_metadata, mysql_p... function test_generate_all_files_with_invalid_query_result (line 797) | def test_generate_all_files_with_invalid_query_result(tmp_path, sample_m... function test_generate_all_files_query_processing_exception (line 810) | def test_generate_all_files_query_processing_exception( function test_generate_all_files_critical_exception (line 835) | def test_generate_all_files_critical_exception( function test_generate_all_files_with_metadata_skipped_queries_non_performance (line 855) | def test_generate_all_files_with_metadata_skipped_queries_non_performanc... function test_generate_all_files_missing_query_not_in_metadata (line 880) | def test_generate_all_files_missing_query_not_in_metadata(tmp_path, mysq... function test_format_as_markdown_table_all_rows_fail_formatting (line 905) | def test_format_as_markdown_table_all_rows_fail_formatting( function test_format_as_markdown_table_exception_handler (line 928) | def test_format_as_markdown_table_exception_handler( function test_generate_all_files_with_file_write_failures (line 951) | def test_generate_all_files_with_file_write_failures( function test_generate_all_files_skipped_query_write_failure (line 982) | def test_generate_all_files_skipped_query_write_failure(tmp_path, monkey... FILE: src/dynamodb-mcp-server/tests/test_model_validation_utils.py class TestDataFactory (line 51) | class TestDataFactory: method create_table_config (line 55) | def create_table_config(name='test-table', **kwargs): method create_item_request (line 62) | def create_item_request(item_id='1', **kwargs): method create_resources_dict (line 69) | def create_resources_dict(table_name='test-table', item_count=1): function mock_dynamodb_client (line 83) | def mock_dynamodb_client(): function sample_resources (line 106) | def sample_resources(): function assert_successful_result (line 112) | def assert_successful_result(result, table_name='test-table'): function assert_error_result (line 117) | def assert_error_result(result, table_name, error_message=None): class TestDynamoDBLocalSetup (line 124) | class TestDynamoDBLocalSetup: method test_find_first_available_port (line 127) | def test_find_first_available_port(self): method test_find_next_available_port (line 137) | def test_find_next_available_port(self): method test_get_existing_container_dynamodb_local_endpoint_found (line 150) | def test_get_existing_container_dynamodb_local_endpoint_found(self): method test_get_existing_container_dynamodb_local_endpoint_not_found (line 165) | def test_get_existing_container_dynamodb_local_endpoint_not_found(self): method test_get_existing_container_dynamodb_local_endpoint_stopped_container (line 173) | def test_get_existing_container_dynamodb_local_endpoint_stopped_contai... method test_start_container_success (line 191) | def test_start_container_success(self): method test_setup_dynamodb_local_reuse_existing (line 231) | def test_setup_dynamodb_local_reuse_existing(self): method test_setup_dynamodb_local_new_container (line 255) | def test_setup_dynamodb_local_new_container(self): method test_setup_dynamodb_local_java_fallback (line 282) | def test_setup_dynamodb_local_java_fallback(self): method test_setup_dynamodb_local_neither_available (line 319) | def test_setup_dynamodb_local_neither_available(self): method test_parse_container_port_no_arrow (line 337) | def test_parse_container_port_no_arrow(self): method test_parse_container_port_with_arrow (line 344) | def test_parse_container_port_with_arrow(self): method test_container_exists_no_output (line 351) | def test_container_exists_no_output(self): method test_container_is_running_no_output (line 363) | def test_container_is_running_no_output(self): method test_restart_container_failure (line 375) | def test_restart_container_failure(self): method test_get_container_port_no_output (line 387) | def test_get_container_port_no_output(self): method test_get_existing_container_endpoint_restart_failure (line 399) | def test_get_existing_container_endpoint_restart_failure(self): method test_get_existing_container_endpoint_exception (line 419) | def test_get_existing_container_endpoint_exception(self): method test_start_container_failure (line 429) | def test_start_container_failure(self): method test_get_existing_java_endpoint_process_exceptions (line 439) | def test_get_existing_java_endpoint_process_exceptions(self): method test_get_existing_java_endpoint_general_exception (line 457) | def test_get_existing_java_endpoint_general_exception(self): method test_get_existing_java_endpoint_general_exception_in_process_loop (line 465) | def test_get_existing_java_endpoint_general_exception_in_process_loop(... method test_start_java_process_failure (line 480) | def test_start_java_process_failure(self): method test_start_java_process_invalid_executable (line 498) | def test_start_java_process_invalid_executable(self): method test_try_container_setup_runtime_error (line 503) | def test_try_container_setup_runtime_error(self): method test_try_java_setup_runtime_error (line 531) | def test_try_java_setup_runtime_error(self): method test_run_subprocess_safely_file_not_found (line 547) | def test_run_subprocess_safely_file_not_found(self): method test_run_subprocess_safely_allowed_commands (line 557) | def test_run_subprocess_safely_allowed_commands(self): method test_run_subprocess_safely_blocked_commands (line 579) | def test_run_subprocess_safely_blocked_commands(self): method test_run_subprocess_safely_windows_exe_handling (line 599) | def test_run_subprocess_safely_windows_exe_handling(self): method test_run_subprocess_safely_timeout_expired (line 613) | def test_run_subprocess_safely_timeout_expired(self): method test_run_subprocess_safely_called_process_error (line 624) | def test_run_subprocess_safely_called_process_error(self): method test_run_subprocess_safely_invalid_input (line 635) | def test_run_subprocess_safely_invalid_input(self): method test_start_java_process_success (line 652) | def test_start_java_process_success(self): method test_get_existing_java_dynamodb_local_endpoint_found (line 677) | def test_get_existing_java_dynamodb_local_endpoint_found(self): method test_get_existing_java_dynamodb_local_endpoint_not_found (line 703) | def test_get_existing_java_dynamodb_local_endpoint_not_found(self): class TestCreateValidationResources (line 719) | class TestCreateValidationResources: method test_create_validation_resources_success (line 722) | def test_create_validation_resources_success(self, sample_resources): method test_create_validation_resources_invalid_types (line 750) | def test_create_validation_resources_invalid_types(self): class TestCreateTables (line 785) | class TestCreateTables: method test_create_tables_already_exists (line 788) | def test_create_tables_already_exists(self, mock_dynamodb_client): method test_create_tables_error (line 800) | def test_create_tables_error(self, mock_dynamodb_client): method test_create_tables_multiple_tables (line 809) | def test_create_tables_multiple_tables(self, mock_dynamodb_client): method test_create_tables_invalid_config (line 821) | def test_create_tables_invalid_config(self, mock_dynamodb_client): class TestInsertItems (line 831) | class TestInsertItems: method test_insert_items_success (line 834) | def test_insert_items_success(self, mock_dynamodb_client): method test_insert_items_with_unprocessed (line 847) | def test_insert_items_with_unprocessed(self, mock_dynamodb_client): method test_insert_items_error (line 860) | def test_insert_items_error(self, mock_dynamodb_client): method test_insert_items_multiple_tables (line 869) | def test_insert_items_multiple_tables(self, mock_dynamodb_client): method test_insert_items_empty_items (line 881) | def test_insert_items_empty_items(self, mock_dynamodb_client): method test_insert_items_invalid_items (line 888) | def test_insert_items_invalid_items(self, mock_dynamodb_client): class TestCleanupValidationResources (line 898) | class TestCleanupValidationResources: method test_cleanup_validation_resources_success (line 901) | def test_cleanup_validation_resources_success(self): method test_cleanup_validation_resources_safety_check_localhost (line 918) | def test_cleanup_validation_resources_safety_check_localhost(self): method test_cleanup_validation_resources_safety_check_127_0_0_1 (line 931) | def test_cleanup_validation_resources_safety_check_127_0_0_1(self): method test_cleanup_validation_resources_safety_check_blocks_production (line 944) | def test_cleanup_validation_resources_safety_check_blocks_production(s... method test_cleanup_validation_resources_safety_check_blocks_remote_ip (line 956) | def test_cleanup_validation_resources_safety_check_blocks_remote_ip(se... method test_cleanup_validation_resources_safety_check_blocks_bypass_attempts (line 967) | def test_cleanup_validation_resources_safety_check_blocks_bypass_attem... method test_cleanup_validation_resources_safety_check_allows_none_endpoint (line 986) | def test_cleanup_validation_resources_safety_check_allows_none_endpoin... method test_cleanup_validation_resources_safety_check_allows_valid_localhost_variants (line 999) | def test_cleanup_validation_resources_safety_check_allows_valid_localh... method test_cleanup_validation_resources_resource_not_found (line 1020) | def test_cleanup_validation_resources_resource_not_found(self): method test_cleanup_validation_resources_delete_error (line 1037) | def test_cleanup_validation_resources_delete_error(self): class TestListTables (line 1057) | class TestListTables: method test_list_tables_success (line 1060) | def test_list_tables_success(self): method test_list_tables_error (line 1069) | def test_list_tables_error(self): class TestGetContainerPath (line 1079) | class TestGetContainerPath: method test_get_container_path_docker_available (line 1082) | def test_get_container_path_docker_available(self): method test_get_container_path_finch_available (line 1098) | def test_get_container_path_finch_available(self): method test_get_container_path_no_tools_found (line 1126) | def test_get_container_path_no_tools_found(self): method test_get_container_path_all_tools_fail (line 1134) | def test_get_container_path_all_tools_fail(self): class TestGetJavaPath (line 1150) | class TestGetJavaPath: method test_get_java_path_java_home_unix (line 1153) | def test_get_java_path_java_home_unix(self): method test_get_java_path_java_home_windows (line 1170) | def test_get_java_path_java_home_windows(self): method test_get_java_path_java_home_not_executable (line 1186) | def test_get_java_path_java_home_not_executable(self): method test_get_java_path_fallback_to_path (line 1210) | def test_get_java_path_fallback_to_path(self, which_return_value, expe... class TestExtractPortFromCmdline (line 1220) | class TestExtractPortFromCmdline: method test_extract_port_from_cmdline (line 1233) | def test_extract_port_from_cmdline(self, cmdline, expected_port): class TestDownloadDynamodbLocalJar (line 1239) | class TestDownloadDynamodbLocalJar: method test_download_dynamodb_local_jar_already_exists (line 1242) | def test_download_dynamodb_local_jar_already_exists(self): method test_download_dynamodb_local_jar_download_success (line 1256) | def test_download_dynamodb_local_jar_download_success(self): method test_download_dynamodb_local_jar_download_failure (line 1298) | def test_download_dynamodb_local_jar_download_failure(self): method test_download_dynamodb_local_jar_extraction_failure (line 1325) | def test_download_dynamodb_local_jar_extraction_failure(self): method test_download_jar_with_data_filter (line 1353) | def test_download_jar_with_data_filter(self): method test_download_jar_invalid_content_type (line 1386) | def test_download_jar_invalid_content_type(self): method test_download_jar_already_exists_both_files (line 1418) | def test_download_jar_already_exists_both_files(self): class TestCheckDynamodbReadiness (line 1437) | class TestCheckDynamodbReadiness: method test_check_dynamodb_readiness_success_first_attempt (line 1440) | def test_check_dynamodb_readiness_success_first_attempt(self): method test_check_dynamodb_readiness_success_after_retries (line 1454) | def test_check_dynamodb_readiness_success_after_retries(self): method test_check_dynamodb_readiness_timeout (line 1476) | def test_check_dynamodb_readiness_timeout(self): method test_check_dynamodb_readiness_with_aws_region (line 1496) | def test_check_dynamodb_readiness_with_aws_region(self): class TestValidateDownloadUrl (line 1518) | class TestValidateDownloadUrl: method test_validate_download_url_valid_exact_url (line 1521) | def test_validate_download_url_valid_exact_url(self): method test_validate_download_url_rejects_different_url (line 1527) | def test_validate_download_url_rejects_different_url(self): class TestSafeExtractMembers (line 1542) | class TestSafeExtractMembers: method test_safe_extract_members_allows_safe_paths (line 1545) | def test_safe_extract_members_allows_safe_paths(self): method test_safe_extract_members_blocks_absolute_paths (line 1565) | def test_safe_extract_members_blocks_absolute_paths(self): method test_safe_extract_members_blocks_directory_traversal (line 1582) | def test_safe_extract_members_blocks_directory_traversal(self): class TestGetValidationResultTransformPrompt (line 1600) | class TestGetValidationResultTransformPrompt: method test_get_validation_result_transform_prompt_success (line 1603) | def test_get_validation_result_transform_prompt_success(self): method test_get_validation_result_transform_prompt_exceptions (line 1623) | def test_get_validation_result_transform_prompt_exceptions( class TestParseVersion (line 1634) | class TestParseVersion: method test_parse_version_standard_format (line 1637) | def test_parse_version_standard_format(self): method test_parse_version_only_numbers (line 1641) | def test_parse_version_only_numbers(self): method test_parse_version_with_suffix_text (line 1645) | def test_parse_version_with_suffix_text(self): method test_parse_version_no_version_found (line 1649) | def test_parse_version_no_version_found(self): method test_parse_version_empty_string (line 1653) | def test_parse_version_empty_string(self): class TestCheckVersionMeetsMinimum (line 1658) | class TestCheckVersionMeetsMinimum: method test_version_meets_minimum_exact (line 1661) | def test_version_meets_minimum_exact(self): method test_version_above_minimum (line 1665) | def test_version_above_minimum(self): method test_version_below_minimum (line 1671) | def test_version_below_minimum(self): method test_version_none (line 1676) | def test_version_none(self): class TestGetDynamoDBLocalContainerVersion (line 1681) | class TestGetDynamoDBLocalContainerVersion: method test_get_ddb_local_container_version_success (line 1684) | def test_get_ddb_local_container_version_success(self): method test_get_ddb_local_container_version_subprocess_fails (line 1697) | def test_get_ddb_local_container_version_subprocess_fails(self): method test_get_ddb_local_container_version_uses_docker_inspect (line 1707) | def test_get_ddb_local_container_version_uses_docker_inspect(self): class TestGetDynamoDBLocalJavaVersion (line 1722) | class TestGetDynamoDBLocalJavaVersion: method test_get_ddb_local_java_version_success (line 1725) | def test_get_ddb_local_java_version_success(self): method test_get_ddb_local_java_version_jar_not_exists (line 1749) | def test_get_ddb_local_java_version_jar_not_exists(self): method test_get_ddb_local_java_version_invalid_java_executable (line 1759) | def test_get_ddb_local_java_version_invalid_java_executable(self): method test_get_ddb_local_java_version_subprocess_fails (line 1779) | def test_get_ddb_local_java_version_subprocess_fails(self): class TestValidateJavaExecutable (line 1801) | class TestValidateJavaExecutable: method test_validate_java_executable_valid (line 1804) | def test_validate_java_executable_valid(self): method test_validate_java_executable_invalid (line 1810) | def test_validate_java_executable_invalid(self): class TestContainerSetupVersionUpgrade (line 1816) | class TestContainerSetupVersionUpgrade: method test_container_setup_raises_error_for_old_version (line 1819) | def test_container_setup_raises_error_for_old_version(self): method test_container_setup_raises_error_for_unknown_version (line 1845) | def test_container_setup_raises_error_for_unknown_version(self): method test_container_setup_keeps_good_version (line 1871) | def test_container_setup_keeps_good_version(self): class TestJavaSetupVersionUpgrade (line 1897) | class TestJavaSetupVersionUpgrade: method test_java_setup_raises_error_for_old_version (line 1900) | def test_java_setup_raises_error_for_old_version(self): method test_java_setup_raises_error_for_old_version_windows (line 1926) | def test_java_setup_raises_error_for_old_version_windows(self): method test_java_setup_keeps_good_version (line 1959) | def test_java_setup_keeps_good_version(self): FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/containerize.py function containerize_app (line 29) | async def containerize_app( function _generate_containerization_guidance (line 68) | def _generate_containerization_guidance( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/delete.py function delete_infrastructure (line 29) | async def delete_infrastructure( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/ecs_troubleshooting.py function generate_troubleshooting_docs (line 249) | def generate_troubleshooting_docs(): function _validate_action (line 334) | def _validate_action(action: str) -> None: function _validate_parameters (line 341) | def _validate_parameters(action: str, parameters: Dict[str, Any]) -> None: function ecs_troubleshooting_tool (line 371) | async def ecs_troubleshooting_tool( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/express.py function build_and_push_image_to_ecr (line 40) | async def build_and_push_image_to_ecr( function validate_prerequisites (line 116) | async def validate_prerequisites( function delete_express_gateway_service (line 206) | async def delete_express_gateway_service(service_arn: str) -> Dict[str, ... function delete_ecr_infrastructure (line 240) | async def delete_ecr_infrastructure(app_name: str) -> Dict[str, Any]: function delete_app (line 308) | async def delete_app(service_arn: str, app_name: str) -> Dict[str, Any]: function wait_for_service_ready (line 385) | async def wait_for_service_ready( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/infrastructure.py function prepare_template_files (line 41) | def prepare_template_files(app_name: str, app_path: str) -> Dict[str, str]: function create_infrastructure (line 106) | async def create_infrastructure( function get_latest_image_tag (line 435) | async def get_latest_image_tag(app_name: str, role_arn: str) -> str: function create_ecr_infrastructure (line 489) | async def create_ecr_infrastructure( function create_ecs_infrastructure (line 588) | async def create_ecs_infrastructure( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/resource_management.py function camel_to_snake (line 100) | def camel_to_snake(name): function ecs_api_operation (line 123) | async def ecs_api_operation(api_operation: str, api_params: Dict[str, An... FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/status.py function get_deployment_status (line 27) | async def get_deployment_status( function _get_cfn_stack_status (line 187) | async def _get_cfn_stack_status(stack_name: str) -> Dict[str, Any]: function _get_stack_names_to_try (line 248) | def _get_stack_names_to_try(app_name: str, stack_name: Optional[str] = N... function _find_cloudformation_stack (line 275) | async def _find_cloudformation_stack( function _get_alb_url (line 303) | async def _get_alb_url(app_name: str, known_stack_name: Optional[str] = ... function _generate_custom_domain_guidance (line 338) | def _generate_custom_domain_guidance(app_name: str, alb_url: str) -> Dic... FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/troubleshooting_tools/detect_image_pull_failures.py function detect_image_pull_failures (line 35) | async def detect_image_pull_failures( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/troubleshooting_tools/fetch_cloudformation_status.py function fetch_cloudformation_status (line 33) | async def fetch_cloudformation_status(stack_id: str) -> Dict[str, Any]: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/troubleshooting_tools/fetch_network_configuration.py function handle_aws_api_call (line 33) | def handle_aws_api_call(func, error_value=None, *args, **kwargs): function fetch_network_configuration (line 52) | async def fetch_network_configuration( function get_network_data (line 79) | async def get_network_data( function discover_vpcs_from_clusters (line 172) | async def discover_vpcs_from_clusters(clusters: List[str]) -> List[str]: function discover_vpcs_from_loadbalancers (line 237) | async def discover_vpcs_from_loadbalancers() -> List[str]: function discover_vpcs_from_cloudformation (line 261) | async def discover_vpcs_from_cloudformation() -> List[str]: function get_ec2_resource (line 324) | async def get_ec2_resource( function get_elb_resources (line 355) | async def get_elb_resources(client, method: str, vpc_ids: List[str]) -> ... function get_associated_target_groups (line 376) | async def get_associated_target_groups(client, vpc_ids: List[str]) -> Di... function get_clusters_info (line 412) | async def get_clusters_info(client, clusters: List[str]) -> Dict[str, Any]: function generate_analysis_guide (line 433) | def generate_analysis_guide() -> Dict[str, Any]: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/troubleshooting_tools/fetch_service_events.py function _extract_filtered_events (line 33) | def _extract_filtered_events( function _check_target_group_health (line 79) | async def _check_target_group_health(elb_client, target_group_arn: str) ... function _check_port_mismatch (line 103) | async def _check_port_mismatch( function _analyze_load_balancer_issues (line 120) | async def _analyze_load_balancer_issues( function fetch_service_events (line 154) | async def fetch_service_events( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/troubleshooting_tools/fetch_task_failures.py function _categorize_container_failure (line 33) | def _categorize_container_failure(container: Dict[str, Any]) -> str: function _process_task_failure (line 80) | def _process_task_failure(task: Dict[str, Any]) -> Dict[str, Any]: function _categorize_failures (line 118) | def _categorize_failures( function _get_stopped_tasks_for_cluster (line 152) | async def _get_stopped_tasks_for_cluster( function fetch_task_failures (line 181) | async def fetch_task_failures( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/troubleshooting_tools/fetch_task_logs.py function fetch_task_logs (line 33) | async def fetch_task_logs( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/troubleshooting_tools/get_ecs_troubleshooting_guidance.py function handle_aws_api_call (line 50) | async def handle_aws_api_call(func, error_value=None, *args, **kwargs): function is_ecr_image (line 69) | def is_ecr_image(image_uri: str) -> bool: function parse_ecr_image_uri (line 98) | def parse_ecr_image_uri(image_uri: str) -> Tuple[str, str]: function validate_image (line 123) | async def validate_image(image_uri: str) -> Dict[str, Any]: function validate_container_images (line 184) | async def validate_container_images(task_definitions: List[Dict]) -> Lis... function _format_service_info (line 208) | def _format_service_info(service: Dict[str, Any]) -> Dict[str, Any]: function collect_cluster_details (line 235) | async def collect_cluster_details( function collect_service_details (line 281) | async def collect_service_details( function collect_task_details (line 329) | async def collect_task_details( function generate_assessment (line 371) | def generate_assessment( function get_ecs_troubleshooting_guidance (line 433) | async def get_ecs_troubleshooting_guidance( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/api/troubleshooting_tools/utils.py function find_clusters (line 42) | async def find_clusters() -> List[str]: function find_services (line 84) | async def find_services(cluster_name: str) -> List[str]: function find_load_balancers (line 131) | async def find_load_balancers(cluster_name: str, service_name: str) -> L... function find_task_definitions (line 222) | async def find_task_definitions( function get_cloudformation_stack_if_exists (line 298) | async def get_cloudformation_stack_if_exists(resource_arn: str) -> Optio... function _get_task_definition_by_service (line 367) | async def _get_task_definition_by_service( function _get_task_definition_by_task (line 417) | async def _get_task_definition_by_task( function _get_task_definitions_by_stack (line 465) | async def _get_task_definitions_by_stack( function _get_task_definitions_by_family_prefix (line 514) | async def _get_task_definitions_by_family_prefix( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/main.py function _setup_logging (line 43) | def _setup_logging() -> logging.Logger: function server_lifespan (line 68) | async def server_lifespan(server): function _create_ecs_mcp_server (line 86) | def _create_ecs_mcp_server() -> Tuple[FastMCP, Dict[str, Any]]: function main (line 231) | def main() -> None: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/modules/aws_knowledge_proxy.py function register_proxy (line 50) | def register_proxy(mcp: FastMCP) -> Optional[bool]: function apply_tool_transformations (line 79) | async def apply_tool_transformations(mcp: FastMCP) -> None: function _filter_knowledge_proxy_tools (line 91) | async def _filter_knowledge_proxy_tools(mcp: FastMCP) -> None: function _add_ecs_guidance_to_knowledge_tools (line 111) | async def _add_ecs_guidance_to_knowledge_tools(mcp: FastMCP) -> None: function register_ecs_prompts (line 134) | def register_ecs_prompts(mcp: FastMCP) -> None: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/modules/containerize.py function register_module (line 28) | def register_module(mcp: FastMCP) -> None: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/modules/delete.py function register_module (line 28) | def register_module(mcp: FastMCP) -> None: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/modules/deployment_status.py function register_module (line 28) | def register_module(mcp: FastMCP) -> None: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/modules/express.py function register_module (line 38) | def register_module(mcp: FastMCP) -> None: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/modules/infrastructure.py function register_module (line 28) | def register_module(mcp: FastMCP) -> None: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/modules/resource_management.py function register_module (line 28) | def register_module(mcp: FastMCP) -> None: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/modules/troubleshooting.py function register_troubleshooting_prompts (line 30) | def register_troubleshooting_prompts(mcp: FastMCP, prompt_groups: Dict[s... function register_module (line 60) | def register_module(mcp: FastMCP) -> None: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/utils/arn_parser.py class ParsedArn (line 25) | class ParsedArn(NamedTuple): method resource_name (line 36) | def resource_name(self) -> str: function parse_arn (line 46) | def parse_arn(arn: str) -> Optional[ParsedArn]: function is_ecs_task_definition (line 94) | def is_ecs_task_definition(arn: str) -> bool: function is_ecs_cluster (line 100) | def is_ecs_cluster(arn: str) -> bool: function get_task_definition_name (line 106) | def get_task_definition_name(arn: str) -> Optional[str]: function get_resource_name (line 117) | def get_resource_name(arn: str) -> Optional[str]: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/utils/aws.py function get_aws_config (line 32) | def get_aws_config() -> Config: function get_aws_client (line 46) | async def get_aws_client(service_name: str): function get_aws_account_id (line 76) | async def get_aws_account_id() -> str: function get_default_vpc_and_subnets (line 83) | async def get_default_vpc_and_subnets(ec2_client=None) -> Dict[str, Any]: function create_ecr_repository (line 144) | async def create_ecr_repository(repository_name: str) -> Dict[str, Any]: function assume_ecr_role (line 167) | async def assume_ecr_role(role_arn: str) -> Dict[str, Any]: function get_aws_client_with_role (line 189) | async def get_aws_client_with_role(service_name: str, role_arn: str): function get_ecr_login_password (line 214) | async def get_ecr_login_password(role_arn: str) -> str: function get_route_tables_for_vpc (line 250) | async def get_route_tables_for_vpc(vpc_id: str, ec2_client=None) -> List... function check_iam_role_exists_and_policy (line 287) | async def check_iam_role_exists_and_policy( function check_ecr_image_exists (line 360) | async def check_ecr_image_exists(image_uri: str) -> Dict[str, Any]: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/utils/config.py function get_config (line 26) | def get_config() -> Dict[str, Any]: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/utils/docker.py function get_ecr_login_password (line 31) | async def get_ecr_login_password(role_arn: Optional[str] = None) -> str: function build_and_push_image (line 71) | async def build_and_push_image( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/utils/security.py class SecurityError (line 37) | class SecurityError(Exception): class ValidationError (line 43) | class ValidationError(Exception): function validate_app_name (line 49) | def validate_app_name(app_name: str) -> bool: function validate_file_path (line 100) | def validate_file_path(path: str) -> str: function validate_cloudformation_template (line 135) | def validate_cloudformation_template(template_path: str) -> bool: function check_permission (line 185) | def check_permission(config: Dict[str, Any], permission_type: Permission... class ResponseSanitizer (line 216) | class ResponseSanitizer: method sanitize (line 277) | def sanitize(cls, response: Any, tool_name: Optional[str] = None) -> Any: method _sanitize_dict (line 298) | def _sanitize_dict( method _sanitize_string (line 325) | def _sanitize_string(cls, text: str) -> str: method add_public_endpoint_warning (line 340) | def add_public_endpoint_warning(cls, response: Dict[str, Any]) -> Dict... function secure_tool (line 363) | def secure_tool( FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/utils/templates.py function get_templates_dir (line 25) | def get_templates_dir() -> str: FILE: src/ecs-mcp-server/awslabs/ecs_mcp_server/utils/time_utils.py function calculate_time_window (line 23) | def calculate_time_window( FILE: src/ecs-mcp-server/tests/conftest.py function temp_dir (line 13) | def temp_dir() -> Generator[str, None, None]: function flask_app_dir (line 20) | def flask_app_dir(temp_dir: str) -> str: function express_app_dir (line 58) | def express_app_dir(temp_dir: str) -> str: function react_app_dir (line 113) | def react_app_dir(temp_dir: str) -> str: FILE: src/ecs-mcp-server/tests/integ/mcp-inspector/utils/mcp_call_tool.py function read_json_response (line 21) | def read_json_response(proc, timeout=120): function main (line 50) | def main(): FILE: src/ecs-mcp-server/tests/unit/api/conftest.py function event_loop (line 10) | def event_loop(): function anyio_backend (line 21) | def anyio_backend(): FILE: src/ecs-mcp-server/tests/unit/api/test_delete_api.py function test_delete_infrastructure_no_stacks (line 17) | async def test_delete_infrastructure_no_stacks(mock_get_aws_client): function test_delete_infrastructure_with_stacks (line 45) | async def test_delete_infrastructure_with_stacks(mock_file, mock_get_aws... function test_delete_infrastructure_template_mismatch (line 81) | async def test_delete_infrastructure_template_mismatch(mock_file, mock_g... function test_delete_infrastructure_stack_in_progress (line 117) | async def test_delete_infrastructure_stack_in_progress(mock_file, mock_g... function test_delete_infrastructure_list_stacks_error (line 152) | async def test_delete_infrastructure_list_stacks_error(mock_get_aws_clie... function test_delete_infrastructure_delete_error (line 180) | async def test_delete_infrastructure_delete_error(mock_file, mock_get_aw... function test_delete_infrastructure_file_not_found (line 217) | async def test_delete_infrastructure_file_not_found(mock_file, mock_get_... function test_delete_infrastructure_invalid_json (line 253) | async def test_delete_infrastructure_invalid_json(mock_file, mock_get_aw... FILE: src/ecs-mcp-server/tests/unit/api/test_ecs_troubleshooting.py class TestEcsTroubleshootingTool (line 15) | class TestEcsTroubleshootingTool: method test_valid_action_validation (line 16) | def test_valid_action_validation(self): method test_invalid_action_validation (line 20) | def test_invalid_action_validation(self): method test_parameter_validation_with_app_name_required (line 24) | def test_parameter_validation_with_app_name_required(self): method test_parameter_validation_with_missing_required_params (line 32) | def test_parameter_validation_with_missing_required_params(self): method test_parameter_validation_success (line 36) | def test_parameter_validation_success(self): method test_transformer_functions_exist (line 42) | def test_transformer_functions_exist(self): method test_guidance_transformer (line 47) | def test_guidance_transformer(self): method test_cloudformation_transformer (line 59) | def test_cloudformation_transformer(self): method test_service_events_transformer (line 70) | def test_service_events_transformer(self): method test_task_failures_transformer (line 85) | def test_task_failures_transformer(self): method test_image_pull_transformer (line 96) | def test_image_pull_transformer(self): method test_ecs_troubleshooting_tool_success (line 109) | async def test_ecs_troubleshooting_tool_success(self): method test_ecs_troubleshooting_tool_cloudformation (line 132) | async def test_ecs_troubleshooting_tool_cloudformation(self): method test_ecs_troubleshooting_tool_invalid_action (line 150) | async def test_ecs_troubleshooting_tool_invalid_action(self): method test_ecs_troubleshooting_tool_missing_parameters (line 157) | async def test_ecs_troubleshooting_tool_missing_parameters(self): method test_ecs_troubleshooting_tool_function_exception (line 166) | async def test_ecs_troubleshooting_tool_function_exception(self): method test_ecs_troubleshooting_tool_none_parameters (line 184) | async def test_ecs_troubleshooting_tool_none_parameters(self): method test_actions_structure_completeness (line 204) | def test_actions_structure_completeness(self): method test_required_params_mapping (line 225) | def test_required_params_mapping(self): class TestTransformerFunctions (line 233) | class TestTransformerFunctions: method test_service_events_transformer_with_time_parameters (line 234) | def test_service_events_transformer_with_time_parameters(self): method test_task_logs_transformer_with_all_parameters (line 250) | def test_task_logs_transformer_with_all_parameters(self): class TestEdgeCases (line 272) | class TestEdgeCases: method test_empty_app_name (line 273) | def test_empty_app_name(self): method test_whitespace_app_name (line 277) | def test_whitespace_app_name(self): method test_case_sensitive_action (line 281) | def test_case_sensitive_action(self): method test_transformer_extra_parameters_ignored (line 285) | def test_transformer_extra_parameters_ignored(self): class TestGenerateTroubleshootingDocs (line 301) | class TestGenerateTroubleshootingDocs: method test_docs_not_empty (line 304) | def test_docs_not_empty(self): method test_docs_contains_all_actions (line 311) | def test_docs_contains_all_actions(self): method test_docs_contains_examples (line 317) | def test_docs_contains_examples(self): method test_docs_formatting (line 327) | def test_docs_formatting(self): method test_docs_with_mocked_action (line 334) | def test_docs_with_mocked_action(self): method test_troubleshooting_docs_constant (line 366) | def test_troubleshooting_docs_constant(self): class TestSensitiveDataHandling (line 373) | class TestSensitiveDataHandling: method test_sensitive_data_action_blocked (line 377) | async def test_sensitive_data_action_blocked(self): method test_sensitive_data_action_allowed (line 391) | async def test_sensitive_data_action_allowed(self): method test_non_sensitive_action_always_allowed (line 413) | async def test_non_sensitive_action_always_allowed(self): class TestDetectImagePullFailuresValidation (line 436) | class TestDetectImagePullFailuresValidation: method test_detect_image_pull_failures_valid_cluster_service (line 439) | def test_detect_image_pull_failures_valid_cluster_service(self): method test_detect_image_pull_failures_valid_cluster_task (line 447) | def test_detect_image_pull_failures_valid_cluster_task(self): method test_detect_image_pull_failures_valid_stack_name (line 455) | def test_detect_image_pull_failures_valid_stack_name(self): method test_detect_image_pull_failures_valid_family_prefix (line 460) | def test_detect_image_pull_failures_valid_family_prefix(self): method test_detect_image_pull_failures_invalid_combinations (line 465) | def test_detect_image_pull_failures_invalid_combinations(self): class TestGuardrails (line 492) | class TestGuardrails: method test_actions_count_unchanged (line 495) | def test_actions_count_unchanged(self): method test_expected_actions_exist (line 501) | def test_expected_actions_exist(self): method test_parameter_counts_unchanged (line 517) | def test_parameter_counts_unchanged(self): method test_documentation_contains_expected_content (line 543) | def test_documentation_contains_expected_content(self): method test_actions_have_required_fields (line 560) | def test_actions_have_required_fields(self): FILE: src/ecs-mcp-server/tests/unit/api/test_resource_management_api.py class TestEcsResourceManagementAPI (line 12) | class TestEcsResourceManagementAPI: method test_ecs_api_operation_list_clusters (line 17) | async def test_ecs_api_operation_list_clusters(self, mock_get_client): method test_ecs_api_operation_describe_clusters (line 38) | async def test_ecs_api_operation_describe_clusters(self, mock_get_clie... method test_ecs_api_operation_list_services (line 69) | async def test_ecs_api_operation_list_services(self, mock_get_client): method test_ecs_api_operation_describe_services (line 92) | async def test_ecs_api_operation_describe_services(self, mock_get_clie... method test_ecs_api_operation_list_tasks (line 124) | async def test_ecs_api_operation_list_tasks(self, mock_get_client): method test_ecs_api_operation_describe_tasks (line 154) | async def test_ecs_api_operation_describe_tasks(self, mock_get_client): method test_ecs_api_operation_list_task_definitions (line 189) | async def test_ecs_api_operation_list_task_definitions(self, mock_get_... method test_ecs_api_operation_describe_task_definition (line 217) | async def test_ecs_api_operation_describe_task_definition(self, mock_g... method test_ecs_api_operation_list_container_instances (line 249) | async def test_ecs_api_operation_list_container_instances(self, mock_g... method test_ecs_api_operation_describe_container_instances (line 274) | async def test_ecs_api_operation_describe_container_instances(self, mo... method test_ecs_api_operation_describe_capacity_providers (line 309) | async def test_ecs_api_operation_describe_capacity_providers(self, moc... method test_ecs_api_operation_create_service (line 344) | async def test_ecs_api_operation_create_service(self, mock_get_client,... method test_ecs_api_operation_unsupported_operation (line 386) | async def test_ecs_api_operation_unsupported_operation(self, mock_get_... method test_ecs_api_operation_error_handling (line 397) | async def test_ecs_api_operation_error_handling(self, mock_get_client): method test_camel_to_snake (line 420) | def test_camel_to_snake(self): FILE: src/ecs-mcp-server/tests/unit/api/troubleshooting_tools/test_fetch_network_configuration.py class TestFetchNetworkConfigurationBase (line 24) | class TestFetchNetworkConfigurationBase: method setup_method (line 27) | def setup_method(self, method): method mock_aws_clients (line 33) | def mock_aws_clients(self, mock_clients): class TestFetchNetworkConfiguration (line 42) | class TestFetchNetworkConfiguration( method test_fetch_network_configuration_calls_get_network_data (line 48) | async def test_fetch_network_configuration_calls_get_network_data(self): method test_fetch_network_configuration_handles_exceptions (line 74) | async def test_fetch_network_configuration_handles_exceptions(self): method test_handle_aws_api_call_regular_function (line 91) | def test_handle_aws_api_call_regular_function(self): method test_handle_aws_api_call_coroutine (line 104) | def test_handle_aws_api_call_coroutine(self): method test_handle_aws_api_call_client_error (line 117) | def test_handle_aws_api_call_client_error(self): method test_handle_aws_api_call_general_exception (line 138) | def test_handle_aws_api_call_general_exception(self): method test_get_network_data_happy_path (line 156) | async def test_get_network_data_happy_path(self): method test_get_network_data_no_vpc (line 198) | async def test_get_network_data_no_vpc(self): method test_discover_vpcs_from_clusters (line 228) | async def test_discover_vpcs_from_clusters(self): method test_discover_vpcs_from_clusters_no_tasks (line 275) | async def test_discover_vpcs_from_clusters_no_tasks(self): method test_discover_vpcs_from_loadbalancers (line 290) | async def test_discover_vpcs_from_loadbalancers(self): method test_discover_vpcs_from_cloudformation (line 311) | async def test_discover_vpcs_from_cloudformation(self): method test_discover_vpcs_from_cloudformation_pagination (line 345) | async def test_discover_vpcs_from_cloudformation_pagination(self): method test_get_ec2_resource_with_filters (line 396) | async def test_get_ec2_resource_with_filters(self): method test_get_ec2_resource_handles_errors (line 418) | async def test_get_ec2_resource_handles_errors(self): method test_get_elb_resources_with_vpc_filter (line 433) | async def test_get_elb_resources_with_vpc_filter(self): method test_get_associated_target_groups (line 452) | async def test_get_associated_target_groups(self): method test_generate_analysis_guide (line 496) | def test_generate_analysis_guide(self): method test_get_clusters_info (line 525) | async def test_get_clusters_info(self): method test_get_clusters_info_empty (line 556) | async def test_get_clusters_info_empty(self): method test_get_clusters_info_error (line 576) | async def test_get_clusters_info_error(self): method test_get_associated_target_groups_empty_response (line 596) | async def test_get_associated_target_groups_empty_response(self): method test_get_associated_target_groups_error_in_health (line 620) | async def test_get_associated_target_groups_error_in_health(self): method test_get_associated_target_groups_null_target_group (line 653) | async def test_get_associated_target_groups_null_target_group(self): method test_discover_vpcs_from_cloudformation_error (line 682) | async def test_discover_vpcs_from_cloudformation_error(self): method test_discover_vpcs_from_loadbalancers_api_error (line 697) | async def test_discover_vpcs_from_loadbalancers_api_error(self): method test_discover_vpcs_from_loadbalancers_null_lb (line 711) | async def test_discover_vpcs_from_loadbalancers_null_lb(self): method test_discover_vpcs_from_clusters_null_task (line 732) | async def test_discover_vpcs_from_clusters_null_task(self): method test_discover_vpcs_from_clusters_null_attachment (line 770) | async def test_discover_vpcs_from_clusters_null_attachment(self): method test_get_network_data_empty_vpc_and_no_resources (line 808) | async def test_get_network_data_empty_vpc_and_no_resources(self): method test_get_ec2_resource_with_null_vpc_ids (line 837) | async def test_get_ec2_resource_with_null_vpc_ids(self): method test_get_elb_resources_with_empty_vpc_ids (line 848) | async def test_get_elb_resources_with_empty_vpc_ids(self): method test_get_elb_resources_missing_vpc_id (line 867) | async def test_get_elb_resources_missing_vpc_id(self): method test_get_elb_resources_null_load_balancer (line 887) | async def test_get_elb_resources_null_load_balancer(self): method test_get_elb_resources_exception_handling (line 907) | async def test_get_elb_resources_exception_handling(self): method test_discover_vpcs_from_clusters_with_null_detail (line 922) | async def test_discover_vpcs_from_clusters_with_null_detail(self): method test_discover_vpcs_from_clusters_network_interface_not_found (line 962) | async def test_discover_vpcs_from_clusters_network_interface_not_found... method test_discover_vpcs_from_clusters_empty_detail_value (line 999) | async def test_discover_vpcs_from_clusters_empty_detail_value(self): method test_discover_vpcs_from_clusters_null_eni (line 1032) | async def test_discover_vpcs_from_clusters_null_eni(self): method test_discover_vpcs_from_cloudformation_deleted_stack (line 1069) | async def test_discover_vpcs_from_cloudformation_deleted_stack(self): method test_discover_vpcs_from_cloudformation_invalid_stack_resource (line 1108) | async def test_discover_vpcs_from_cloudformation_invalid_stack_resourc... method test_discover_vpcs_from_cloudformation_missing_physical_id (line 1143) | async def test_discover_vpcs_from_cloudformation_missing_physical_id(s... method test_get_network_data_vpc_discovery_from_tags (line 1174) | async def test_get_network_data_vpc_discovery_from_tags(self): method test_get_network_data_null_vpc_in_response (line 1229) | async def test_get_network_data_null_vpc_in_response(self): FILE: src/ecs-mcp-server/tests/unit/conftest.py function event_loop (line 10) | def event_loop(): function anyio_backend (line 21) | def anyio_backend(): FILE: src/ecs-mcp-server/tests/unit/modules/test_aws_knowledge_proxy.py function _make_mock_tool (line 71) | def _make_mock_tool(name: str, description: str = None) -> MagicMock: function _generate_prompt_test_data (line 79) | def _generate_prompt_test_data(): function mock_mcp (line 100) | def mock_mcp() -> MagicMock: function mock_async_mcp (line 106) | def mock_async_mcp() -> AsyncMock: function sample_tools_list (line 116) | def sample_tools_list() -> List[MagicMock]: function sample_tools_list_with_none_description (line 125) | def sample_tools_list_with_none_description() -> List[MagicMock]: function mock_transform_configs (line 131) | def mock_transform_configs() -> List[MagicMock]: class TestECSToolGuidance (line 136) | class TestECSToolGuidance: method test_ecs_tool_guidance_content (line 139) | def test_ecs_tool_guidance_content(self) -> None: method test_ecs_tool_guidance_structure (line 156) | def test_ecs_tool_guidance_structure(self) -> None: method test_ecs_tool_guidance_is_multiline (line 162) | def test_ecs_tool_guidance_is_multiline(self) -> None: class TestRegisterProxy (line 168) | class TestRegisterProxy: method test_register_proxy_success (line 174) | def test_register_proxy_success( method test_register_proxy_exceptions (line 213) | def test_register_proxy_exceptions( method test_register_proxy_with_none_mcp (line 235) | def test_register_proxy_with_none_mcp(self) -> None: class TestApplyToolTransformations (line 241) | class TestApplyToolTransformations: method test_apply_tool_transformations_success (line 250) | async def test_apply_tool_transformations_success( method test_apply_tool_transformations_exception (line 276) | async def test_apply_tool_transformations_exception( method test_apply_tool_transformations_with_none_mcp (line 299) | async def test_apply_tool_transformations_with_none_mcp(self) -> None: class TestAddEcsGuidanceToKnowledgeTools (line 305) | class TestAddEcsGuidanceToKnowledgeTools: method test_add_ecs_guidance_success (line 311) | async def test_add_ecs_guidance_success( method test_add_ecs_guidance_missing_tools (line 354) | async def test_add_ecs_guidance_missing_tools( method test_add_ecs_guidance_list_tools_exception (line 375) | async def test_add_ecs_guidance_list_tools_exception( method test_add_ecs_guidance_transform_exception (line 395) | async def test_add_ecs_guidance_transform_exception( class TestFilterKnowledgeProxyTools (line 418) | class TestFilterKnowledgeProxyTools: method test_filter_tools_success (line 423) | async def test_filter_tools_success( method test_filter_tools_only_allowlisted_present (line 468) | async def test_filter_tools_only_allowlisted_present( class TestRegisterEcsPrompts (line 490) | class TestRegisterEcsPrompts: method test_register_ecs_prompts_registration (line 494) | def test_register_ecs_prompts_registration( method test_register_ecs_prompts_responses (line 533) | def test_register_ecs_prompts_responses( class TestUpstreamToolDetection (line 563) | class TestUpstreamToolDetection: method test_expected_knowledge_tool_names_referenced (line 566) | def test_expected_knowledge_tool_names_referenced(self) -> None: method test_prompt_responses_reference_correct_tools (line 573) | def test_prompt_responses_reference_correct_tools(self, mock_mcp: Magi... class TestLoggingFunctionality (line 596) | class TestLoggingFunctionality: method test_register_proxy_logging_levels (line 601) | def test_register_proxy_logging_levels( method test_add_ecs_guidance_logging_levels (line 620) | async def test_add_ecs_guidance_logging_levels( class TestEdgeCases (line 637) | class TestEdgeCases: method test_empty_tools_list (line 642) | async def test_empty_tools_list( method test_none_description_handling (line 656) | async def test_none_description_handling( class TestModuleIntegration (line 679) | class TestModuleIntegration: method test_constant_used_in_functions (line 682) | def test_constant_used_in_functions(self) -> None: method test_all_functions_importable (line 689) | def test_all_functions_importable(self) -> None: method test_module_has_expected_exports (line 701) | def test_module_has_expected_exports(self) -> None: method test_constants_are_immutable_types (line 715) | def test_constants_are_immutable_types(self) -> None: FILE: src/ecs-mcp-server/tests/unit/modules/test_resource_management_module.py function test_prompt_functions (line 10) | def test_prompt_functions(): function test_register_module (line 44) | def test_register_module(): function test_mcp_tool_signature (line 99) | def test_mcp_tool_signature(): function test_register_module_with_each_prompt (line 148) | def test_register_module_with_each_prompt(): FILE: src/ecs-mcp-server/tests/unit/test_aws_role_utils.py class TestAWSRoleUtils (line 17) | class TestAWSRoleUtils(unittest.TestCase): method test_assume_ecr_role (line 22) | async def test_assume_ecr_role(self, mock_get_client): method test_get_aws_client_with_role (line 56) | async def test_get_aws_client_with_role(self, mock_assume_role, mock_b... method test_get_ecr_login_password_with_role (line 94) | async def test_get_ecr_login_password_with_role( method test_get_ecr_login_password_without_role (line 131) | async def test_get_ecr_login_password_without_role( FILE: src/ecs-mcp-server/tests/unit/test_aws_utils.py class TestAwsUtils (line 27) | class TestAwsUtils: method test_get_aws_config (line 30) | def test_get_aws_config(self): class TestAwsClientAsync (line 36) | class TestAwsClientAsync: method test_get_aws_client_basic (line 40) | async def test_get_aws_client_basic(self): method test_get_aws_client_with_environment_variables (line 55) | async def test_get_aws_client_with_environment_variables(self): method test_get_client_factory_implementation (line 81) | async def test_get_client_factory_implementation(self): method test_additional_client_calls (line 98) | async def test_additional_client_calls(self): method test_client_with_mocked_module (line 124) | async def test_client_with_mocked_module(self): method test_aws_client_factory_reuse (line 158) | async def test_aws_client_factory_reuse(self): method test_aws_client_factory_with_clear_environment (line 196) | async def test_aws_client_factory_with_clear_environment(self): method test_special_case_client_operations (line 230) | async def test_special_case_client_operations(self): method test_aws_client_factory (line 252) | async def test_aws_client_factory(self): method test_get_aws_account_id (line 301) | async def test_get_aws_account_id(self): method test_get_aws_account_id_error_handling (line 326) | async def test_get_aws_account_id_error_handling(self): method test_assume_ecr_role (line 343) | async def test_assume_ecr_role(self): method test_assume_ecr_role_error_handling (line 391) | async def test_assume_ecr_role_error_handling(self): method test_get_aws_client_with_role (line 412) | async def test_get_aws_client_with_role(self): method test_get_aws_client_with_role_default_region (line 467) | async def test_get_aws_client_with_role_default_region(self): method test_get_default_vpc_and_subnets (line 494) | async def test_get_default_vpc_and_subnets(self): method test_get_default_vpc_and_subnets_no_default_vpc (line 538) | async def test_get_default_vpc_and_subnets_no_default_vpc(self): method test_get_default_vpc_and_subnets_no_public_subnets (line 564) | async def test_get_default_vpc_and_subnets_no_public_subnets(self): method test_get_default_vpc_and_subnets_bad_response_structure (line 609) | async def test_get_default_vpc_and_subnets_bad_response_structure(self): method test_get_default_vpc_and_subnets_no_subnets_at_all (line 625) | async def test_get_default_vpc_and_subnets_no_subnets_at_all(self): method test_create_ecr_repository_existing (line 650) | async def test_create_ecr_repository_existing(self): method test_create_ecr_repository_new (line 683) | async def test_create_ecr_repository_new(self): method test_create_ecr_repository_other_error (line 730) | async def test_create_ecr_repository_other_error(self): method test_get_ecr_login_password (line 756) | async def test_get_ecr_login_password(self): method test_get_ecr_login_password_missing_role_arn (line 797) | async def test_get_ecr_login_password_missing_role_arn(self): method test_get_ecr_login_password_empty_auth_data (line 807) | async def test_get_ecr_login_password_empty_auth_data(self): method test_get_ecr_login_password_client_error (line 835) | async def test_get_ecr_login_password_client_error(self): method test_get_ecr_login_password_malformed_auth_token (line 858) | async def test_get_ecr_login_password_malformed_auth_token(self): method test_get_route_tables_for_vpc (line 887) | async def test_get_route_tables_for_vpc(self): method test_get_route_tables_for_vpc_no_main (line 922) | async def test_get_route_tables_for_vpc_no_main(self): method test_get_aws_client_with_role_error (line 957) | async def test_get_aws_client_with_role_error(self): method test_get_route_tables_for_vpc_empty_response (line 972) | async def test_get_route_tables_for_vpc_empty_response(self): method test_get_route_tables_for_vpc_missing_associations_key (line 991) | async def test_get_route_tables_for_vpc_missing_associations_key(self): FILE: src/ecs-mcp-server/tests/unit/test_containerize.py function test_containerize_app (line 22) | async def test_containerize_app(): function test_containerize_app_default_base_image (line 53) | async def test_containerize_app_default_base_image(): function test_containerize_app_with_different_paths (line 69) | async def test_containerize_app_with_different_paths(): function test_containerize_app_with_different_ports (line 94) | async def test_containerize_app_with_different_ports(): function test_containerize_app_content_validation (line 125) | async def test_containerize_app_content_validation(): function test_generate_containerization_guidance_directly (line 223) | def test_generate_containerization_guidance_directly(): function test_app_name_extraction (line 276) | def test_app_name_extraction(app_path, expected_app_name): function test_port_inclusion (line 309) | def test_port_inclusion(port): function test_containerize_app_with_mocked_guidance (line 341) | async def test_containerize_app_with_mocked_guidance(): function test_content_validation_for_all_guidance_sections (line 373) | def test_content_validation_for_all_guidance_sections(): FILE: src/ecs-mcp-server/tests/unit/test_delete.py function test_delete_infrastructure_no_stacks (line 29) | async def test_delete_infrastructure_no_stacks(mock_get_aws_client): function test_delete_infrastructure_with_stacks (line 57) | async def test_delete_infrastructure_with_stacks(mock_file, mock_get_aws... function test_delete_infrastructure_only_ecr_stack (line 93) | async def test_delete_infrastructure_only_ecr_stack(mock_file, mock_get_... function test_delete_infrastructure_only_ecs_stack (line 127) | async def test_delete_infrastructure_only_ecs_stack(mock_file, mock_get_... function test_delete_infrastructure_template_mismatch (line 166) | async def test_delete_infrastructure_template_mismatch(mock_file, mock_g... function test_delete_infrastructure_mixed_template_match (line 202) | async def test_delete_infrastructure_mixed_template_match(mock_file, moc... function test_delete_infrastructure_dict_template_body (line 246) | async def test_delete_infrastructure_dict_template_body(mock_file, mock_... function test_delete_infrastructure_invalid_json_template (line 280) | async def test_delete_infrastructure_invalid_json_template(mock_file, mo... function test_delete_infrastructure_ecr_template_mismatch (line 314) | async def test_delete_infrastructure_ecr_template_mismatch( function test_delete_infrastructure_stack_in_progress (line 371) | async def test_delete_infrastructure_stack_in_progress(mock_file, mock_g... function test_delete_infrastructure_non_deletable_stack_state (line 408) | async def test_delete_infrastructure_non_deletable_stack_state( function test_delete_infrastructure_list_stacks_error (line 466) | async def test_delete_infrastructure_list_stacks_error(mock_get_aws_clie... function test_delete_infrastructure_delete_error (line 494) | async def test_delete_infrastructure_delete_error(mock_file, mock_get_aw... function test_delete_infrastructure_delete_stack_client_error (line 531) | async def test_delete_infrastructure_delete_stack_client_error(mock_file... function test_delete_infrastructure_file_read_error (line 573) | async def test_delete_infrastructure_file_read_error(mock_file, mock_get... function test_delete_infrastructure_get_template_error (line 609) | async def test_delete_infrastructure_get_template_error(mock_file, mock_... function test_delete_infrastructure_template_comparison_error (line 646) | async def test_delete_infrastructure_template_comparison_error( function test_delete_infrastructure_error_deleting_stack (line 699) | async def test_delete_infrastructure_error_deleting_stack( function test_delete_infrastructure_template_validation_fails (line 756) | async def test_delete_infrastructure_template_validation_fails(mock_exis... FILE: src/ecs-mcp-server/tests/unit/test_docker_utils.py function test_build_and_push_image_success (line 21) | async def test_build_and_push_image_success( function test_build_and_push_image_dockerfile_not_found (line 66) | async def test_build_and_push_image_dockerfile_not_found( function test_build_and_push_image_build_error (line 97) | async def test_build_and_push_image_build_error( function test_build_and_push_image_push_error (line 137) | async def test_build_and_push_image_push_error( function test_get_ecr_login_password_success (line 172) | async def test_get_ecr_login_password_success(mock_get_aws_client_with_r... function test_get_ecr_login_password_error (line 204) | async def test_get_ecr_login_password_error(mock_get_aws_client_with_role): function test_get_aws_account_id (line 221) | async def test_get_aws_account_id(mock_get_aws_client): function test_get_aws_account_id_error (line 243) | async def test_get_aws_account_id_error(mock_get_aws_client): FILE: src/ecs-mcp-server/tests/unit/test_docker_with_role.py class TestDockerWithRole (line 13) | class TestDockerWithRole(unittest.TestCase): method test_build_and_push_image_with_role (line 20) | async def test_build_and_push_image_with_role( method test_build_and_push_image_without_role (line 101) | async def test_build_and_push_image_without_role( FILE: src/ecs-mcp-server/tests/unit/test_express.py function mock_ecr_result (line 33) | def mock_ecr_result(): function test_build_and_push_success (line 54) | async def test_build_and_push_success( function test_build_and_push_invalid_app_name (line 73) | async def test_build_and_push_invalid_app_name(mock_validate): function test_build_and_push_ecr_creation_fails (line 85) | async def test_build_and_push_ecr_creation_fails(mock_create_ecr, mock_p... function test_validate_prerequisites_all_valid (line 103) | async def test_validate_prerequisites_all_valid(mock_check_image, mock_c... function test_validate_prerequisites_execution_role_missing (line 122) | async def test_validate_prerequisites_execution_role_missing( function test_validate_prerequisites_infra_role_missing (line 143) | async def test_validate_prerequisites_infra_role_missing( function test_validate_prerequisites_image_missing (line 164) | async def test_validate_prerequisites_image_missing( function test_validate_prerequisites_missing_error_details (line 182) | async def test_validate_prerequisites_missing_error_details( function test_validate_prerequisites_with_custom_roles (line 203) | async def test_validate_prerequisites_with_custom_roles( function test_delete_express_gateway_service_success (line 228) | async def test_delete_express_gateway_service_success(mock_get_client): function test_delete_express_gateway_service_failure (line 242) | async def test_delete_express_gateway_service_failure(mock_get_client): function test_delete_ecr_infrastructure_success (line 261) | async def test_delete_ecr_infrastructure_success(mock_get_client): function test_delete_ecr_infrastructure_not_found (line 278) | async def test_delete_ecr_infrastructure_not_found(mock_get_client): function test_delete_ecr_infrastructure_deletion_fails (line 300) | async def test_delete_ecr_infrastructure_deletion_fails(mock_get_client): function test_delete_app_complete_success (line 322) | async def test_delete_app_complete_success(mock_validate, mock_delete_ec... function test_delete_app_service_fails (line 342) | async def test_delete_app_service_fails(mock_validate, mock_delete_ecr, ... function test_delete_app_ecr_fails (line 358) | async def test_delete_app_ecr_fails(mock_validate, mock_delete_ecr, mock... function test_delete_app_both_fail (line 374) | async def test_delete_app_both_fail(mock_validate, mock_delete_ecr, mock... function test_wait_for_service_ready_success_scenarios (line 462) | async def test_wait_for_service_ready_success_scenarios( function test_wait_for_service_ready_timeout (line 484) | async def test_wait_for_service_ready_timeout(mock_get_client, mock_sleep): function test_wait_for_service_ready_error (line 498) | async def test_wait_for_service_ready_error(mock_get_client): FILE: src/ecs-mcp-server/tests/unit/test_image_pull_failure.py class TestImagePullFailureDetection (line 27) | class TestImagePullFailureDetection(unittest.TestCase): method test_validate_container_images (line 34) | async def test_validate_container_images(self, mock_boto3_client): method test_detect_image_pull_failures (line 82) | async def test_detect_image_pull_failures(self, mock_validate_images, ... method test_detect_image_pull_failures_parameter_validation (line 131) | async def test_detect_image_pull_failures_parameter_validation(self): function test_detect_image_pull_failures_parameter_validation_standalone (line 169) | async def test_detect_image_pull_failures_parameter_validation_standalon... FILE: src/ecs-mcp-server/tests/unit/test_image_pull_failure_extended.py class TestImagePullFailureDetectionExtended (line 18) | class TestImagePullFailureDetectionExtended(unittest.TestCase): method test_detect_image_pull_failures_no_task_definitions (line 28) | async def test_detect_image_pull_failures_no_task_definitions( method test_detect_image_pull_failures_all_images_valid (line 57) | async def test_detect_image_pull_failures_all_images_valid( method test_detect_image_pull_failures_ecr_image_not_found (line 101) | async def test_detect_image_pull_failures_ecr_image_not_found( method test_detect_image_pull_failures_external_image_unknown (line 153) | async def test_detect_image_pull_failures_external_image_unknown( method test_detect_image_pull_failures_other_image_issue (line 201) | async def test_detect_image_pull_failures_other_image_issue( method test_detect_image_pull_failures_missing_execution_role (line 248) | async def test_detect_image_pull_failures_missing_execution_role( method test_detect_image_pull_failures_exception (line 297) | async def test_detect_image_pull_failures_exception(self, mock_find_ta... FILE: src/ecs-mcp-server/tests/unit/test_infrastructure.py function test_prepare_template_files (line 34) | async def test_prepare_template_files( function test_prepare_template_files_path_not_exists (line 80) | async def test_prepare_template_files_path_not_exists( function test_prepare_template_files_io_error (line 122) | async def test_prepare_template_files_io_error(mock_validate_file_path, ... function test_get_latest_image_tag (line 158) | async def test_get_latest_image_tag(mock_get_aws_client_with_role): function test_get_latest_image_tag_no_images_error (line 188) | async def test_get_latest_image_tag_no_images_error(mock_get_aws_client_... function test_get_latest_image_tag_no_tagged_images (line 207) | async def test_get_latest_image_tag_no_tagged_images(mock_get_aws_client... function test_get_latest_image_tag_non_numeric_tags (line 231) | async def test_get_latest_image_tag_non_numeric_tags(mock_get_aws_client... function test_get_latest_image_tag_client_error (line 254) | async def test_get_latest_image_tag_client_error(mock_get_aws_client_wit... function test_create_ecr_infrastructure_new_stack (line 279) | async def test_create_ecr_infrastructure_new_stack(mock_get_aws_client, ... function test_create_ecr_infrastructure_existing_stack (line 324) | async def test_create_ecr_infrastructure_existing_stack(mock_get_aws_cli... function test_create_ecr_infrastructure_no_updates (line 369) | async def test_create_ecr_infrastructure_no_updates(mock_get_aws_client,... function test_create_ecs_infrastructure_new_stack (line 420) | async def test_create_ecs_infrastructure_new_stack( function test_create_ecs_infrastructure_existing_stack (line 470) | async def test_create_ecs_infrastructure_existing_stack(mock_get_aws_cli... function test_create_ecs_infrastructure_no_updates (line 527) | async def test_create_ecs_infrastructure_no_updates(mock_get_aws_client,... function test_create_infrastructure_no_force_deploy (line 588) | async def test_create_infrastructure_no_force_deploy( function test_create_infrastructure_missing_deployment_step (line 624) | async def test_create_infrastructure_missing_deployment_step(mock_valida... function test_create_infrastructure_force_deploy_step1 (line 646) | async def test_create_infrastructure_force_deploy_step1( function test_create_infrastructure_force_deploy_step2 (line 703) | async def test_create_infrastructure_force_deploy_step2( function test_create_infrastructure_step2_error_retrieving_ecr_info (line 780) | async def test_create_infrastructure_step2_error_retrieving_ecr_info( function test_create_infrastructure_step2_build_error (line 827) | async def test_create_infrastructure_step2_build_error( function test_create_infrastructure_force_deploy_step3 (line 906) | async def test_create_infrastructure_force_deploy_step3( function test_create_infrastructure_step3_error (line 1009) | async def test_create_infrastructure_step3_error( function test_create_infrastructure_invalid_deployment_step (line 1090) | async def test_create_infrastructure_invalid_deployment_step( FILE: src/ecs-mcp-server/tests/unit/test_infrastructure_role.py class TestInfrastructureWithRole (line 16) | class TestInfrastructureWithRole(unittest.TestCase): method test_create_ecr_infrastructure_role_output (line 21) | async def test_create_ecr_infrastructure_role_output(self, mock_get_cl... method test_create_infrastructure_uses_role (line 77) | async def test_create_infrastructure_uses_role( method test_create_infrastructure_step_1_with_role (line 157) | async def test_create_infrastructure_step_1_with_role( FILE: src/ecs-mcp-server/tests/unit/test_integration.py class TestIntegration (line 14) | class TestIntegration(unittest.TestCase): method test_containerize_and_deploy_workflow (line 18) | async def test_containerize_and_deploy_workflow(self): FILE: src/ecs-mcp-server/tests/unit/test_main.py class MockFastMCP (line 23) | class MockFastMCP: method __init__ (line 26) | def __init__(self, name, instructions=None, lifespan=None, **kwargs): method tool (line 33) | def tool(self, name=None, annotations=None): method prompt (line 46) | def prompt(self, pattern): method run (line 53) | def run(self): class EnvironmentTestMixin (line 72) | class EnvironmentTestMixin: method setUp (line 75) | def setUp(self): method tearDown (line 80) | def tearDown(self): method _capture_environment_state (line 85) | def _capture_environment_state(self): method _restore_environment_state (line 89) | def _restore_environment_state(self, original_state): method clear_logging_env_vars (line 97) | def clear_logging_env_vars(self): method set_log_level (line 103) | def set_log_level(self, level): method set_log_file (line 107) | def set_log_file(self, file_path): class LoggingTestMixin (line 112) | class LoggingTestMixin(EnvironmentTestMixin): method setUp (line 115) | def setUp(self): method tearDown (line 120) | def tearDown(self): method _reset_logging_system (line 125) | def _reset_logging_system(self): class TestServerConfiguration (line 139) | class TestServerConfiguration(unittest.TestCase): method setUp (line 142) | def setUp(self): method test_server_properties (line 146) | def test_server_properties(self): method test_required_tools_registered (line 153) | def test_required_tools_registered(self): method test_prompt_patterns_registered (line 170) | def test_prompt_patterns_registered(self): class TestLoggingSystem (line 196) | class TestLoggingSystem(LoggingTestMixin, unittest.TestCase): method test_default_logging_setup (line 199) | def test_default_logging_setup(self): method test_custom_log_level_configuration (line 208) | def test_custom_log_level_configuration(self): method test_file_logging_setup (line 217) | def test_file_logging_setup(self): method test_automatic_directory_creation (line 238) | def test_automatic_directory_creation(self): method test_file_logging_error_handling (line 252) | def test_file_logging_error_handling(self): class TestServerLifecycle (line 275) | class TestServerLifecycle(unittest.TestCase): method setUp (line 278) | def setUp(self): method _run_async_test (line 282) | def _run_async_test(self, async_test_func): method test_successful_lifecycle_management (line 288) | def test_successful_lifecycle_management(self, mock_get_logger, mock_a... method test_error_handling_during_initialization (line 308) | def test_error_handling_during_initialization( class TestApplicationEntryPoint (line 336) | class TestApplicationEntryPoint(unittest.TestCase): method test_main_module_execution_logic (line 339) | def test_main_module_execution_logic(self): method test_entry_point_execution_simulation (line 359) | def test_entry_point_execution_simulation(self): class TestMainFunctionBehavior (line 375) | class TestMainFunctionBehavior(unittest.TestCase): method test_successful_server_startup (line 382) | def test_successful_server_startup( method test_keyboard_interrupt_handling (line 409) | def test_keyboard_interrupt_handling( method test_general_exception_handling (line 430) | def test_general_exception_handling( function test_log_file_setup (line 453) | def test_log_file_setup(): function test_log_file_setup_exception (line 495) | def test_log_file_setup_exception(): function test_entry_point (line 531) | def test_entry_point(mock_main): FILE: src/ecs-mcp-server/tests/unit/test_resource_management.py function test_ecs_api_operation_describe_cluster (line 18) | async def test_ecs_api_operation_describe_cluster(mock_get_client): function test_ecs_api_operation_list_services (line 50) | async def test_ecs_api_operation_list_services(mock_get_client): function test_ecs_api_operation_describe_services (line 74) | async def test_ecs_api_operation_describe_services(mock_get_client): function test_ecs_api_operation_unsupported_operation (line 103) | async def test_ecs_api_operation_unsupported_operation(mock_get_client): function test_ecs_api_operation_list_clusters (line 115) | async def test_ecs_api_operation_list_clusters(mock_get_client): function test_ecs_api_operation_list_tasks (line 137) | async def test_ecs_api_operation_list_tasks(mock_get_client): function test_ecs_api_operation_describe_tasks (line 168) | async def test_ecs_api_operation_describe_tasks(mock_get_client): function test_ecs_api_operation_list_task_definitions (line 204) | async def test_ecs_api_operation_list_task_definitions(mock_get_client): function test_ecs_api_operation_describe_task_definition (line 231) | async def test_ecs_api_operation_describe_task_definition(mock_get_client): function test_ecs_api_operation_list_container_instances (line 262) | async def test_ecs_api_operation_list_container_instances(mock_get_client): function test_ecs_api_operation_describe_container_instances (line 288) | async def test_ecs_api_operation_describe_container_instances(mock_get_c... function test_ecs_api_operation_describe_capacity_providers (line 324) | async def test_ecs_api_operation_describe_capacity_providers(mock_get_cl... function test_ecs_api_operation_create_service (line 360) | async def test_ecs_api_operation_create_service(mock_get_client, mock_ge... function test_ecs_api_operation_error_handling (line 403) | async def test_ecs_api_operation_error_handling(mock_get_client): FILE: src/ecs-mcp-server/tests/unit/test_resource_management_api_operation.py function test_camel_to_snake (line 12) | def test_camel_to_snake(): function test_ecs_api_operation_create_service (line 25) | async def test_ecs_api_operation_create_service(mock_get_client, mock_ge... function test_ecs_api_operation_describe_clusters (line 68) | async def test_ecs_api_operation_describe_clusters(mock_get_client): function test_ecs_api_operation_list_tasks (line 98) | async def test_ecs_api_operation_list_tasks(mock_get_client): function test_ecs_api_operation_unsupported_operation (line 128) | async def test_ecs_api_operation_unsupported_operation(mock_get_client): function test_ecs_api_operation_error_handling (line 140) | async def test_ecs_api_operation_error_handling(mock_get_client): function test_ecs_api_operation_write_permission_required (line 167) | async def test_ecs_api_operation_write_permission_required(mock_get_clie... function test_ecs_api_operation_read_only_no_permission_required (line 198) | async def test_ecs_api_operation_read_only_no_permission_required(mock_g... function test_express_gateway_operations_supported (line 224) | def test_express_gateway_operations_supported(operation_name): FILE: src/ecs-mcp-server/tests/unit/test_resource_management_tool.py class MockFastMCP (line 12) | class MockFastMCP: method __init__ (line 15) | def __init__(self, name, instructions=None): method tool (line 21) | def tool(self, name=None, annotations=None): method prompt (line 30) | def prompt(self, pattern): method run (line 37) | def run(self): class TestResourceManagementTool (line 46) | class TestResourceManagementTool(unittest.TestCase): method test_ecs_resource_management_tool_registration (line 52) | async def test_ecs_resource_management_tool_registration(self, mock_ec... method test_ecs_resource_management_tool_function (line 64) | async def test_ecs_resource_management_tool_function(self, mock_ecs_ap... FILE: src/ecs-mcp-server/tests/unit/test_security_integration.py function mock_config (line 15) | def mock_config(): class TestSecurityIntegration (line 20) | class TestSecurityIntegration: method test_secure_tool_with_pii (line 23) | def test_secure_tool_with_pii(self, mock_config): method test_secure_tool_with_nested_pii (line 65) | def test_secure_tool_with_nested_pii(self, mock_config): method test_secure_tool_with_aws_client_response (line 123) | def test_secure_tool_with_aws_client_response(self, mock_config): FILE: src/ecs-mcp-server/tests/unit/test_status.py class TestDeploymentStatus (line 14) | class TestDeploymentStatus(unittest.TestCase): method test_get_deployment_status_success (line 20) | async def test_get_deployment_status_success( method test_get_deployment_status_stack_not_found (line 88) | async def test_get_deployment_status_stack_not_found( method test_get_deployment_status_service_not_found (line 114) | async def test_get_deployment_status_service_not_found( method test_get_deployment_status_with_custom_params (line 153) | async def test_get_deployment_status_with_custom_params( method test_get_deployment_status_exception_handling (line 226) | async def test_get_deployment_status_exception_handling( method test_get_cfn_stack_status_success (line 260) | async def test_get_cfn_stack_status_success(self, mock_get_aws_client): method test_get_cfn_stack_status_not_found (line 328) | async def test_get_cfn_stack_status_not_found(self, mock_get_aws_client): method test_find_cloudformation_stack_with_explicit_stack_name (line 357) | async def test_find_cloudformation_stack_with_explicit_stack_name( method test_find_cloudformation_stack_with_patterns (line 381) | async def test_find_cloudformation_stack_with_patterns(self, mock_get_... method test_find_cloudformation_stack_not_found (line 410) | async def test_find_cloudformation_stack_not_found(self, mock_get_cfn_... method test_get_alb_url_with_known_stack (line 433) | async def test_get_alb_url_with_known_stack(self, mock_get_aws_client): method test_get_alb_url_with_http_prefix (line 462) | async def test_get_alb_url_with_http_prefix(self, mock_get_aws_client): method test_get_alb_url_not_found (line 491) | async def test_get_alb_url_not_found(self, mock_get_aws_client): method test_get_stack_names_to_try (line 527) | def test_get_stack_names_to_try(self): method test_generate_custom_domain_guidance (line 548) | def test_generate_custom_domain_guidance(self): FILE: src/ecs-mcp-server/tests/unit/test_status_pytest.py function test_get_deployment_status_active (line 25) | async def test_get_deployment_status_active( function test_get_deployment_status_deploying (line 141) | async def test_get_deployment_status_deploying( function test_get_deployment_status_unhealthy (line 241) | async def test_get_deployment_status_unhealthy( function test_get_deployment_status_service_not_found (line 342) | async def test_get_deployment_status_service_not_found( function test_find_cloudformation_stack (line 385) | async def test_find_cloudformation_stack(mock_get_aws_client): function test_find_cloudformation_stack_not_found (line 412) | async def test_find_cloudformation_stack_not_found(mock_get_aws_client): function test_get_alb_url (line 433) | async def test_get_alb_url(mock_get_aws_client): function test_get_alb_url_not_found (line 467) | async def test_get_alb_url_not_found(mock_find_cloudformation_stack): function test_get_cfn_stack_status (line 484) | async def test_get_cfn_stack_status(mock_get_aws_client): function test_get_cfn_stack_status_not_found (line 539) | async def test_get_cfn_stack_status_not_found(mock_get_aws_client): function test_get_stack_names_to_try (line 556) | def test_get_stack_names_to_try(): function test_get_stack_names_to_try_with_stack_name (line 566) | def test_get_stack_names_to_try_with_stack_name(): function test_generate_custom_domain_guidance (line 577) | def test_generate_custom_domain_guidance(): FILE: src/ecs-mcp-server/tests/unit/troubleshooting_tools/conftest.py function event_loop (line 10) | def event_loop(): function anyio_backend (line 21) | def anyio_backend(): FILE: src/ecs-mcp-server/tests/unit/troubleshooting_tools/test_detect_image_pull_failures.py function mock_aws_client (line 18) | def mock_aws_client(): function test_module_setup (line 29) | def test_module_setup(): function test_detect_image_pull_failures_happy_path (line 54) | async def test_detect_image_pull_failures_happy_path(test_module_setup): function test_detect_image_pull_failures_no_task_definitions_stack_name (line 101) | async def test_detect_image_pull_failures_no_task_definitions_stack_name... function test_detect_image_pull_failures_no_task_definitions_service_name (line 130) | async def test_detect_image_pull_failures_no_task_definitions_service_na... function test_detect_image_pull_failures_no_task_definitions_task_id (line 161) | async def test_detect_image_pull_failures_no_task_definitions_task_id(te... function test_detect_image_pull_failures_no_task_definitions_family_prefix (line 190) | async def test_detect_image_pull_failures_no_task_definitions_family_pre... function test_detect_image_pull_failures_with_invalid_images (line 219) | async def test_detect_image_pull_failures_with_invalid_images(test_modul... function test_detect_image_pull_failures_comprehensive (line 278) | async def test_detect_image_pull_failures_comprehensive(test_module_setup): function test_detect_image_pull_failures_with_missing_execution_role (line 364) | async def test_detect_image_pull_failures_with_missing_execution_role(te... function test_detect_image_pull_failures_external_image (line 417) | async def test_detect_image_pull_failures_external_image(test_module_set... function test_detect_image_pull_failures_task_definitions_error (line 470) | async def test_detect_image_pull_failures_task_definitions_error(test_mo... function test_detect_image_pull_failures_validate_images_error (line 499) | async def test_detect_image_pull_failures_validate_images_error(test_mod... function test_detect_image_pull_failures_client_error (line 539) | async def test_detect_image_pull_failures_client_error(test_module_setup): function test_detect_image_pull_failures_other_image_failure (line 580) | async def test_detect_image_pull_failures_other_image_failure(test_modul... function test_detect_image_pull_failures_general_exception (line 630) | async def test_detect_image_pull_failures_general_exception(test_module_... function test_detect_image_pull_failures_general_outer_exception (line 659) | async def test_detect_image_pull_failures_general_outer_exception(test_m... FILE: src/ecs-mcp-server/tests/unit/troubleshooting_tools/test_fetch_cloudformation_status.py function mock_cloudformation_client (line 23) | def mock_cloudformation_client(): class TestFetchCloudFormationStatus (line 28) | class TestFetchCloudFormationStatus: method setup_method (line 31) | def setup_method(self): method test_stack_exists (line 38) | async def test_stack_exists(self, mock_cloudformation_client): method test_stack_failure (line 87) | async def test_stack_failure(self, mock_cloudformation_client): method test_stack_not_found (line 141) | async def test_stack_not_found(self, mock_cloudformation_client): method test_client_error_handling (line 175) | async def test_client_error_handling(self, mock_cloudformation_client): method test_general_exception_handling (line 201) | async def test_general_exception_handling(self, mock_cloudformation_cl... method test_additional_failure_reasons_from_events (line 215) | async def test_additional_failure_reasons_from_events(self, mock_cloud... method test_list_deleted_stacks_error (line 262) | async def test_list_deleted_stacks_error(self, mock_cloudformation_cli... FILE: src/ecs-mcp-server/tests/unit/troubleshooting_tools/test_fetch_service_events.py function test_extract_filtered_events (line 26) | def test_extract_filtered_events(): function test_extract_filtered_events_empty (line 55) | def test_extract_filtered_events_empty(): function test_extract_filtered_events_missing_timestamp (line 67) | def test_extract_filtered_events_missing_timestamp(): function test_extract_filtered_events_no_timezone (line 88) | def test_extract_filtered_events_no_timezone(): function test_check_target_group_health_unhealthy (line 109) | async def test_check_target_group_health_unhealthy(): function test_check_target_group_health_healthy (line 124) | async def test_check_target_group_health_healthy(): function test_check_target_group_health_empty_response (line 137) | async def test_check_target_group_health_empty_response(): function test_check_target_group_health_no_targets (line 154) | async def test_check_target_group_health_no_targets(): function test_check_target_group_health_client_error (line 171) | async def test_check_target_group_health_client_error(): function test_check_port_mismatch_with_mismatch (line 191) | async def test_check_port_mismatch_with_mismatch(): function test_check_port_mismatch_no_mismatch (line 205) | async def test_check_port_mismatch_no_mismatch(): function test_check_port_mismatch_client_error (line 216) | async def test_check_port_mismatch_client_error(): function test_analyze_load_balancer_issues (line 232) | async def test_analyze_load_balancer_issues(): function test_analyze_load_balancer_no_targetgroup (line 287) | async def test_analyze_load_balancer_no_targetgroup(): function test_analyze_load_balancer_no_containerport (line 314) | async def test_analyze_load_balancer_no_containerport(): function test_service_exists (line 356) | async def test_service_exists(): function test_service_with_load_balancer_issues (line 465) | async def test_service_with_load_balancer_issues(): function test_service_with_failed_deployment (line 584) | async def test_service_with_failed_deployment(): function test_service_with_stalled_deployment (line 643) | async def test_service_with_stalled_deployment(): function test_service_not_found (line 703) | async def test_service_not_found(): function test_with_explicit_start_time (line 737) | async def test_with_explicit_start_time(): function test_with_explicit_end_time (line 781) | async def test_with_explicit_end_time(): function test_with_start_and_end_time (line 825) | async def test_with_start_and_end_time(): function test_with_only_time_window (line 869) | async def test_with_only_time_window(): function test_service_client_error (line 920) | async def test_service_client_error(): function test_general_exception (line 941) | async def test_general_exception(): FILE: src/ecs-mcp-server/tests/unit/troubleshooting_tools/test_fetch_task_failures.py class TestFetchTaskFailuresBase (line 28) | class TestFetchTaskFailuresBase: method setup_method (line 31) | def setup_method(self, method): method mock_aws_clients (line 37) | def mock_aws_clients(self, mock_clients): class TestHelperFunctions (line 46) | class TestHelperFunctions: method test_categorize_container_failure (line 80) | def test_categorize_container_failure(self, container, expected_catego... method test_process_task_failure (line 174) | def test_process_task_failure(self, task_data, expected_fields): method test_categorize_failures (line 197) | def test_categorize_failures(self): method test_categorize_failures_empty (line 227) | def test_categorize_failures_empty(self): method test_categorize_failures_multiple_containers_per_task (line 234) | def test_categorize_failures_multiple_containers_per_task(self): function mock_aws_client (line 262) | def mock_aws_client(): class TestFetchTaskFailuresIntegration (line 270) | class TestFetchTaskFailuresIntegration(TestFetchTaskFailuresBase): method test_fetch_task_failures_scenarios (line 295) | async def test_fetch_task_failures_scenarios(self, cluster_exists, tas... method test_failure_categorization (line 342) | async def test_failure_categorization(self, exit_code, reason, expecte... method test_error_handling (line 393) | async def test_error_handling(self, error_type, error_location, expect... method test_cluster_not_found (line 433) | async def test_cluster_not_found(self): method test_successful_execution_no_failures (line 450) | async def test_successful_execution_no_failures(self): method test_successful_execution_with_failures (line 472) | async def test_successful_execution_with_failures(self): method test_multiple_pages_of_tasks (line 501) | async def test_multiple_pages_of_tasks(self): method test_time_window_filtering (line 536) | async def test_time_window_filtering(self): method test_explicit_time_window (line 567) | async def test_explicit_time_window(self): method test_running_tasks_count (line 601) | async def test_running_tasks_count(self): method test_client_error_handling (line 622) | async def test_client_error_handling(self): method test_cluster_describe_error (line 649) | async def test_cluster_describe_error(self): method test_general_exception_handling (line 667) | async def test_general_exception_handling(self): method test_empty_task_arns_page (line 683) | async def test_empty_task_arns_page(self): method test_tasks_without_stopped_at (line 707) | async def test_tasks_without_stopped_at(self): method test_timezone_handling (line 732) | async def test_timezone_handling(self): method test_comprehensive_failure_categories (line 761) | async def test_comprehensive_failure_categories(self): FILE: src/ecs-mcp-server/tests/unit/troubleshooting_tools/test_fetch_task_logs.py class TestFetchTaskLogsBase (line 15) | class TestFetchTaskLogsBase: method setup_method (line 18) | def setup_method(self, method): method mock_aws_clients (line 24) | def mock_aws_clients(self, mock_clients): class TestFetchTaskLogs (line 38) | class TestFetchTaskLogs(TestFetchTaskLogsBase): method test_logs_found (line 42) | async def test_logs_found(self): method test_no_logs_found (line 124) | async def test_no_logs_found(self): method test_with_filter_pattern (line 142) | async def test_with_filter_pattern(self): method test_with_explicit_start_time (line 201) | async def test_with_explicit_start_time(self): method test_with_explicit_end_time (line 252) | async def test_with_explicit_end_time(self): method test_with_start_and_end_time (line 304) | async def test_with_start_and_end_time(self): method test_with_specific_task_id (line 363) | async def test_with_specific_task_id(self): method test_with_error_logs_and_pattern_summary (line 427) | async def test_with_error_logs_and_pattern_summary(self): method test_with_different_log_severities (line 503) | async def test_with_different_log_severities(self): method test_no_log_entries (line 590) | async def test_no_log_entries(self): method test_with_log_stream_error (line 642) | async def test_with_log_stream_error(self): method test_with_log_events_error (line 679) | async def test_with_log_events_error(self): method test_client_error (line 725) | async def test_client_error(self): method test_general_exception (line 748) | async def test_general_exception(self): FILE: src/ecs-mcp-server/tests/unit/troubleshooting_tools/test_get_ecs_troubleshooting_guidance.py class TestGuidanceBase (line 25) | class TestGuidanceBase: method setup_method (line 28) | def setup_method(self): method mock_aws_clients (line 34) | def mock_aws_clients(self, mock_clients): function mock_aws_clients (line 50) | def mock_aws_clients(): class TestHelperFunctions (line 60) | class TestHelperFunctions(TestGuidanceBase): method test_handle_aws_api_call_client_error (line 64) | async def test_handle_aws_api_call_client_error(self): method test_handle_aws_api_call_with_coroutine (line 76) | async def test_handle_aws_api_call_with_coroutine(self): method test_is_ecr_image_with_exception (line 85) | def test_is_ecr_image_with_exception(self): method test_parse_ecr_image_uri_with_exception (line 90) | def test_parse_ecr_image_uri_with_exception(self): method test_validate_image_general_exception_in_repo_check (line 98) | async def test_validate_image_general_exception_in_repo_check(self, mo... method test_validate_container_images (line 114) | async def test_validate_container_images(self, mock_aws_clients): method test_validate_container_images_no_containers (line 155) | async def test_validate_container_images_no_containers(self, mock_aws_... method test_validate_container_images_missing_image (line 178) | async def test_validate_container_images_missing_image(self, mock_aws_... method test_validate_image_ecr (line 204) | async def test_validate_image_ecr(self, mock_aws_clients): method test_validate_image_ecr_repository_not_found (line 225) | async def test_validate_image_ecr_repository_not_found(self, mock_aws_... method test_validate_image_ecr_image_not_found (line 247) | async def test_validate_image_ecr_image_not_found(self, mock_aws_clien... method test_validate_image_ecr_other_client_error (line 275) | async def test_validate_image_ecr_other_client_error(self, mock_aws_cl... method test_validate_image_ecr_general_exception (line 297) | async def test_validate_image_ecr_general_exception(self, mock_aws_cli... method test_validate_image_non_ecr (line 319) | async def test_validate_image_non_ecr(self, mock_aws_clients): method test_collect_cluster_details (line 336) | async def test_collect_cluster_details(self, mock_aws_clients): method test_collect_cluster_details_error (line 368) | async def test_collect_cluster_details_error(self, mock_aws_clients): method test_collect_cluster_details_missing_clusters (line 384) | async def test_collect_cluster_details_missing_clusters(self, mock_aws... method test_handle_aws_api_call_generic_exception (line 400) | async def test_handle_aws_api_call_generic_exception(self): method test_is_ecr_image (line 410) | def test_is_ecr_image(self): method test_is_ecr_image_edge_cases (line 422) | def test_is_ecr_image_edge_cases(self): method test_parse_ecr_image_uri (line 440) | def test_parse_ecr_image_uri(self): method test_parse_ecr_image_uri_error_handling (line 452) | def test_parse_ecr_image_uri_error_handling(self): class TestComprehensiveSystem (line 477) | class TestComprehensiveSystem(TestGuidanceBase): method test_successful_execution (line 481) | async def test_successful_execution(self, mock_aws_clients): method test_cluster_only (line 546) | async def test_cluster_only(self, mock_aws_clients): method test_service_not_found (line 570) | async def test_service_not_found(self, mock_aws_clients): method test_generic_exception_handling (line 599) | async def test_generic_exception_handling(self, mock_aws_clients): method test_service_with_task_definition (line 619) | async def test_service_with_task_definition(self, mock_aws_clients): method test_service_with_task_definition_error (line 672) | async def test_service_with_task_definition_error(self, mock_aws_clien... method test_mixed_image_validation (line 711) | async def test_mixed_image_validation(self, mock_aws_clients): method test_task_definition_parsing_error (line 776) | async def test_task_definition_parsing_error(self, mock_aws_clients): method test_missing_containers (line 815) | async def test_missing_containers(self, mock_aws_clients): method test_symptoms_description (line 866) | async def test_symptoms_description(self, mock_aws_clients): method test_collect_task_details_with_find_task_definitions_client_error (line 890) | async def test_collect_task_details_with_find_task_definitions_client_... method test_collect_task_details_validate_container_images_exception (line 918) | async def test_collect_task_details_validate_container_images_exceptio... method test_collect_task_details_find_load_balancers_exception (line 953) | async def test_collect_task_details_find_load_balancers_exception(self... method test_collect_service_details_exception_handling (line 983) | async def test_collect_service_details_exception_handling(self, mock_a... method test_generate_assessment_exception_in_main_function (line 1002) | async def test_generate_assessment_exception_in_main_function(self, mo... method test_collect_task_details_with_find_task_definitions_general_exception (line 1034) | async def test_collect_task_details_with_find_task_definitions_general... FILE: src/ecs-mcp-server/tests/unit/troubleshooting_tools/test_is_ecr_image_security.py class TestIsEcrImageSecurity (line 15) | class TestIsEcrImageSecurity: method test_valid_ecr_images (line 18) | def test_valid_ecr_images(self): method test_malicious_urls_with_embedded_amazonaws_com (line 32) | def test_malicious_urls_with_embedded_amazonaws_com(self): method test_non_ecr_amazonaws_urls (line 47) | def test_non_ecr_amazonaws_urls(self): method test_completely_different_registries (line 61) | def test_completely_different_registries(self): method test_edge_cases_and_malformed_inputs (line 76) | def test_edge_cases_and_malformed_inputs(self): method test_case_sensitivity (line 95) | def test_case_sensitivity(self): method test_url_with_paths_and_parameters (line 107) | def test_url_with_paths_and_parameters(self): method test_subdomain_validation (line 118) | def test_subdomain_validation(self): method test_injection_attempts (line 132) | def test_injection_attempts(self): method test_performance_with_long_strings (line 151) | def test_performance_with_long_strings(self): method test_account_id_validation (line 168) | def test_account_id_validation(self): method test_region_validation (line 180) | def test_region_validation(self): FILE: src/ecs-mcp-server/tests/unit/troubleshooting_tools/test_utils.py class TestUtilsBase (line 26) | class TestUtilsBase: method setup_method (line 29) | def setup_method(self): method mock_aws_clients (line 35) | def mock_aws_clients(self, mock_clients): function mock_aws_clients (line 51) | def mock_aws_clients(): class TestFindClusters (line 61) | class TestFindClusters(TestUtilsBase): method test_find_clusters_success (line 65) | async def test_find_clusters_success(self, mock_aws_clients): method test_find_clusters_empty_response (line 95) | async def test_find_clusters_empty_response(self, mock_aws_clients): method test_find_clusters_missing_key (line 113) | async def test_find_clusters_missing_key(self, mock_aws_clients): method test_find_clusters_with_invalid_arn (line 131) | async def test_find_clusters_with_invalid_arn(self, mock_aws_clients): method test_find_clusters_with_exception (line 159) | async def test_find_clusters_with_exception(self, mock_aws_clients): method test_find_clusters_with_pagination (line 175) | async def test_find_clusters_with_pagination(self, mock_aws_clients): class TestFindServices (line 200) | class TestFindServices(TestUtilsBase): method test_find_services_success (line 204) | async def test_find_services_success(self, mock_aws_clients): method test_find_services_empty_response (line 234) | async def test_find_services_empty_response(self, mock_aws_clients): method test_find_services_missing_key (line 253) | async def test_find_services_missing_key(self, mock_aws_clients): method test_find_services_with_invalid_arn (line 272) | async def test_find_services_with_invalid_arn(self, mock_aws_clients): method test_find_services_with_client_error (line 301) | async def test_find_services_with_client_error(self, mock_aws_clients): method test_find_services_with_general_exception (line 320) | async def test_find_services_with_general_exception(self, mock_aws_cli... method test_find_services_with_pagination (line 336) | async def test_find_services_with_pagination(self, mock_aws_clients): class TestFindLoadBalancers (line 370) | class TestFindLoadBalancers(TestUtilsBase): method test_find_load_balancers_success (line 374) | async def test_find_load_balancers_success(self, mock_aws_clients): method test_find_load_balancers_service_not_found (line 440) | async def test_find_load_balancers_service_not_found(self, mock_aws_cl... method test_find_load_balancers_no_load_balancers (line 460) | async def test_find_load_balancers_no_load_balancers(self, mock_aws_cl... method test_find_load_balancers_no_target_groups (line 486) | async def test_find_load_balancers_no_target_groups(self, mock_aws_cli... method test_find_load_balancers_target_group_not_found (line 518) | async def test_find_load_balancers_target_group_not_found(self, mock_a... method test_find_load_balancers_with_client_error (line 561) | async def test_find_load_balancers_with_client_error(self, mock_aws_cl... method test_find_load_balancers_with_general_exception (line 583) | async def test_find_load_balancers_with_general_exception(self, mock_a... class TestFindTaskDefinitions (line 608) | class TestFindTaskDefinitions(TestUtilsBase): method test_find_task_definitions_by_service (line 612) | async def test_find_task_definitions_by_service(self, mock_aws_clients): method test_find_task_definitions_by_task (line 644) | async def test_find_task_definitions_by_task(self, mock_aws_clients): method test_find_task_definitions_by_stack (line 676) | async def test_find_task_definitions_by_stack(self, mock_aws_clients): method test_find_task_definitions_by_family_prefix (line 706) | async def test_find_task_definitions_by_family_prefix(self, mock_aws_c... method test_find_task_definitions_missing_required_params (line 736) | async def test_find_task_definitions_missing_required_params(self, moc... method test_find_task_definitions_with_exception (line 746) | async def test_find_task_definitions_with_exception(self, mock_aws_cli... class TestGetTaskDefinitionByService (line 765) | class TestGetTaskDefinitionByService(TestUtilsBase): method test_get_task_definition_by_service_success (line 769) | async def test_get_task_definition_by_service_success(self, mock_aws_c... method test_get_task_definition_by_service_not_found (line 812) | async def test_get_task_definition_by_service_not_found(self, mock_aws... method test_get_task_definition_by_service_no_task_definition (line 834) | async def test_get_task_definition_by_service_no_task_definition(self,... method test_get_task_definition_by_service_client_error (line 856) | async def test_get_task_definition_by_service_client_error(self, mock_... method test_get_task_definition_by_service_general_exception (line 881) | async def test_get_task_definition_by_service_general_exception(self, ... class TestGetTaskDefinitionByTask (line 901) | class TestGetTaskDefinitionByTask(TestUtilsBase): method test_get_task_definition_by_task_success (line 905) | async def test_get_task_definition_by_task_success(self, mock_aws_clie... method test_get_task_definition_by_task_not_found (line 950) | async def test_get_task_definition_by_task_not_found(self, mock_aws_cl... method test_get_task_definition_by_task_no_arn (line 970) | async def test_get_task_definition_by_task_no_arn(self, mock_aws_clien... method test_get_task_definition_by_task_client_error (line 990) | async def test_get_task_definition_by_task_client_error(self, mock_aws... method test_get_task_definition_by_task_general_exception (line 1013) | async def test_get_task_definition_by_task_general_exception(self, moc... class TestGetTaskDefinitionsByStack (line 1031) | class TestGetTaskDefinitionsByStack(TestUtilsBase): method test_get_task_definitions_by_stack_success (line 1035) | async def test_get_task_definitions_by_stack_success(self, mock_aws_cl... method test_get_task_definitions_by_stack_no_task_definitions (line 1091) | async def test_get_task_definitions_by_stack_no_task_definitions(self,... method test_get_task_definitions_by_stack_empty_stack (line 1119) | async def test_get_task_definitions_by_stack_empty_stack(self, mock_aw... method test_get_task_definitions_by_stack_cloudformation_error (line 1139) | async def test_get_task_definitions_by_stack_cloudformation_error(self... method test_get_task_definitions_by_stack_ecs_error (line 1162) | async def test_get_task_definitions_by_stack_ecs_error(self, mock_aws_... method test_get_task_definitions_by_stack_general_exception (line 1203) | async def test_get_task_definitions_by_stack_general_exception(self, m... class TestGetTaskDefinitionsByFamilyPrefix (line 1223) | class TestGetTaskDefinitionsByFamilyPrefix(TestUtilsBase): method test_get_task_definitions_by_family_prefix_success (line 1227) | async def test_get_task_definitions_by_family_prefix_success(self, moc... method test_get_task_definitions_by_family_prefix_empty_families (line 1310) | async def test_get_task_definitions_by_family_prefix_empty_families(se... class TestDetectCloudFormationStack (line 1331) | class TestDetectCloudFormationStack(TestUtilsBase): method test_detect_cloudformation_stack_success (line 1335) | async def test_detect_cloudformation_stack_success(self, mock_aws_clie... method test_detect_cloudformation_stack_no_tags (line 1383) | async def test_detect_cloudformation_stack_no_tags(self, mock_aws_clie... method test_detect_cloudformation_stack_no_stack_name_tag (line 1398) | async def test_detect_cloudformation_stack_no_stack_name_tag(self, moc... method test_detect_cloudformation_stack_cfn_error (line 1418) | async def test_detect_cloudformation_stack_cfn_error(self, mock_aws_cl... method test_detect_cloudformation_stack_tags_error (line 1445) | async def test_detect_cloudformation_stack_tags_error(self, mock_aws_c... method test_detect_cloudformation_stack_empty_stacks (line 1460) | async def test_detect_cloudformation_stack_empty_stacks(self, mock_aws... method test_get_task_definitions_by_family_prefix_missing_key (line 1481) | async def test_get_task_definitions_by_family_prefix_missing_key(self,... method test_get_task_definitions_by_family_prefix_no_task_definitions (line 1502) | async def test_get_task_definitions_by_family_prefix_no_task_definitions( method test_get_task_definitions_by_family_prefix_client_error_list_families (line 1532) | async def test_get_task_definitions_by_family_prefix_client_error_list... method test_get_task_definitions_by_family_prefix_client_error_list_task_definitions (line 1558) | async def test_get_task_definitions_by_family_prefix_client_error_list... method test_get_task_definitions_by_family_prefix_client_error_describe_task_definition (line 1593) | async def test_get_task_definitions_by_family_prefix_client_error_desc... method test_get_task_definitions_by_family_prefix_general_exception (line 1639) | async def test_get_task_definitions_by_family_prefix_general_exception... FILE: src/ecs-mcp-server/tests/unit/utils/async_test_utils.py class AsyncIterator (line 13) | class AsyncIterator: method __init__ (line 21) | def __init__(self, items: List[Any]): method __aiter__ (line 32) | def __aiter__(self): method __anext__ (line 36) | async def __anext__(self): function create_mock_ecs_client (line 43) | def create_mock_ecs_client(): function create_sample_task_data (line 67) | def create_sample_task_data( function create_sample_cluster_data (line 132) | def create_sample_cluster_data( function create_mock_cloudformation_client (line 159) | def create_mock_cloudformation_client(): function create_sample_stack_data (line 194) | def create_sample_stack_data( function create_sample_stack_resource (line 247) | def create_sample_stack_resource( function create_sample_stack_event (line 297) | def create_sample_stack_event( FILE: src/ecs-mcp-server/tests/unit/utils/test_arn_parser.py class TestArnParser (line 16) | class TestArnParser(unittest.TestCase): method test_parse_arn_valid (line 19) | def test_parse_arn_valid(self): method test_parse_arn_cluster (line 32) | def test_parse_arn_cluster(self): method test_parse_s3_arn (line 41) | def test_parse_s3_arn(self): method test_parse_invalid_arn (line 50) | def test_parse_invalid_arn(self): method test_get_task_definition_name (line 62) | def test_get_task_definition_name(self): method test_is_ecs_task_definition (line 75) | def test_is_ecs_task_definition(self): method test_is_ecs_cluster (line 92) | def test_is_ecs_cluster(self): method test_get_resource_name (line 109) | def test_get_resource_name(self): FILE: src/ecs-mcp-server/tests/unit/utils/test_aws_utils_express.py function mock_iam_role_response (line 26) | def mock_iam_role_response(): function mock_ecr_image_response (line 46) | def mock_ecr_image_response(): function test_check_iam_role_exists_valid (line 66) | async def test_check_iam_role_exists_valid(mock_get_client, mock_iam_rol... function test_check_iam_role_exists_not_found (line 84) | async def test_check_iam_role_exists_not_found(mock_get_client): function test_check_iam_role_invalid_trust_policy (line 111) | async def test_check_iam_role_invalid_trust_policy(mock_get_client): function test_check_iam_role_service_list (line 140) | async def test_check_iam_role_service_list(mock_get_client): function test_check_iam_role_generic_exception (line 168) | async def test_check_iam_role_generic_exception(mock_get_client): function test_check_ecr_image_exists_valid (line 189) | async def test_check_ecr_image_exists_valid(mock_get_client, mock_ecr_im... function test_check_ecr_image_invalid_format_no_tag (line 205) | async def test_check_ecr_image_invalid_format_no_tag(): function test_check_ecr_image_invalid_format_no_repo (line 214) | async def test_check_ecr_image_invalid_format_no_repo(): function test_check_ecr_image_not_found (line 223) | async def test_check_ecr_image_not_found(mock_get_client): function test_check_ecr_image_repository_not_found (line 239) | async def test_check_ecr_image_repository_not_found(mock_get_client): function test_check_ecr_image_generic_exception (line 267) | async def test_check_ecr_image_generic_exception(mock_get_client): FILE: src/ecs-mcp-server/tests/unit/utils/test_config.py class TestConfig (line 11) | class TestConfig(unittest.TestCase): method test_get_config_defaults (line 15) | def test_get_config_defaults(self, mock_environ): method test_get_config_with_security_flags_enabled (line 36) | def test_get_config_with_security_flags_enabled(self, mock_environ): method test_get_config_with_security_flags_disabled (line 54) | def test_get_config_with_security_flags_disabled(self, mock_environ): method test_get_config_with_alternative_true_values (line 72) | def test_get_config_with_alternative_true_values(self, mock_environ): FILE: src/ecs-mcp-server/tests/unit/utils/test_docker.py function test_get_ecr_login_password_error (line 18) | async def test_get_ecr_login_password_error(mock_get_aws_client): function test_get_ecr_login_password_with_role_arn (line 39) | async def test_get_ecr_login_password_with_role_arn( function test_build_and_push_image_missing_role_arn (line 68) | async def test_build_and_push_image_missing_role_arn(): function test_build_and_push_image_dockerfile_not_found (line 83) | async def test_build_and_push_image_dockerfile_not_found( function test_build_and_push_image_docker_login_failure (line 119) | async def test_build_and_push_image_docker_login_failure( function test_build_and_push_image_docker_buildx_failure_fallback_success (line 161) | async def test_build_and_push_image_docker_buildx_failure_fallback_success( function test_build_and_push_image_docker_build_failure (line 223) | async def test_build_and_push_image_docker_build_failure( function test_build_and_push_image_docker_push_failure (line 270) | async def test_build_and_push_image_docker_push_failure( function test_build_and_push_image_auto_tag_generation (line 322) | async def test_build_and_push_image_auto_tag_generation( function test_build_and_push_image_verification_failure (line 369) | async def test_build_and_push_image_verification_failure( function test_build_and_push_image_verification_command_failure (line 417) | async def test_build_and_push_image_verification_command_failure( FILE: src/ecs-mcp-server/tests/unit/utils/test_response_sanitization.py class TestResponseSanitizer (line 8) | class TestResponseSanitizer: method test_sanitize_string (line 11) | def test_sanitize_string(self): method test_sanitize_dict (line 37) | def test_sanitize_dict(self): method test_sanitize_list (line 65) | def test_sanitize_list(self): method test_add_public_endpoint_warning (line 87) | def test_add_public_endpoint_warning(self): method test_context_aware_exemption_build_and_push_tool (line 128) | def test_context_aware_exemption_build_and_push_tool(self): method test_context_aware_exemption_without_tool_name (line 160) | def test_context_aware_exemption_without_tool_name(self): method test_context_aware_exemption_wrong_tool (line 184) | def test_context_aware_exemption_wrong_tool(self): method test_context_aware_exemption_nested_data (line 203) | def test_context_aware_exemption_nested_data(self): method test_context_aware_exemption_only_specified_fields (line 228) | def test_context_aware_exemption_only_specified_fields(self): FILE: src/ecs-mcp-server/tests/unit/utils/test_security.py class TestValidateAppName (line 19) | class TestValidateAppName: method test_valid_app_names (line 22) | def test_valid_app_names(self): method test_empty_name (line 39) | def test_empty_name(self): method test_non_string_input (line 45) | def test_non_string_input(self): method test_length_constraints (line 54) | def test_length_constraints(self): method test_uppercase_letters_rejected (line 63) | def test_uppercase_letters_rejected(self): method test_invalid_characters (line 77) | def test_invalid_characters(self): method test_hyphen_placement_rules (line 114) | def test_hyphen_placement_rules(self): method test_valid_hyphen_usage (line 131) | def test_valid_hyphen_usage(self): method test_edge_cases (line 143) | def test_edge_cases(self): class TestValidateFilePath (line 159) | class TestValidateFilePath: method test_valid_file_path (line 162) | def test_valid_file_path(self, tmp_path): method test_nonexistent_file_path (line 174) | def test_nonexistent_file_path(self): method test_directory_traversal_attempts (line 180) | def test_directory_traversal_attempts(self, tmp_path): class TestValidateCloudFormationTemplate (line 202) | class TestValidateCloudFormationTemplate: method valid_template_file (line 206) | def valid_template_file(self, tmp_path): method invalid_json_template_file (line 220) | def invalid_json_template_file(self, tmp_path): method non_dict_template_file (line 228) | def non_dict_template_file(self, tmp_path): method empty_resources_template_file (line 239) | def empty_resources_template_file(self, tmp_path): method missing_resources_template_file (line 249) | def missing_resources_template_file(self, tmp_path): method invalid_resources_type_template_file (line 262) | def invalid_resources_type_template_file(self, tmp_path): method test_valid_template (line 271) | def test_valid_template(self, valid_template_file): method test_invalid_json_template (line 275) | def test_invalid_json_template(self, invalid_json_template_file): method test_non_dict_template (line 281) | def test_non_dict_template(self, non_dict_template_file): method test_empty_resources_template (line 287) | def test_empty_resources_template(self, empty_resources_template_file): method test_missing_resources_template (line 293) | def test_missing_resources_template(self, missing_resources_template_f... method test_invalid_resources_type_template (line 299) | def test_invalid_resources_type_template(self, invalid_resources_type_... method test_nonexistent_template_file (line 305) | def test_nonexistent_template_file(self): method test_unreadable_template_file (line 312) | def test_unreadable_template_file(self, mock_open_func, valid_template... FILE: src/ecs-mcp-server/tests/unit/utils/test_security_extended.py class TestCheckPermission (line 19) | class TestCheckPermission: method test_permission_write_allowed (line 22) | def test_permission_write_allowed(self): method test_permission_write_denied (line 27) | def test_permission_write_denied(self): method test_permission_sensitive_data_allowed (line 40) | def test_permission_sensitive_data_allowed(self): method test_permission_sensitive_data_denied (line 45) | def test_permission_sensitive_data_denied(self): method test_permission_none (line 58) | def test_permission_none(self): class TestSecureTool (line 64) | class TestSecureTool: method test_secure_tool_allowed (line 68) | async def test_secure_tool_allowed(self): method test_secure_tool_denied (line 89) | async def test_secure_tool_denied(self): method test_secure_tool_with_tool_name (line 114) | async def test_secure_tool_with_tool_name(self): FILE: src/ecs-mcp-server/tests/unit/utils/test_templates.py function test_get_templates_dir_success (line 12) | def test_get_templates_dir_success(): function test_get_templates_dir_directory_not_found (line 26) | def test_get_templates_dir_directory_not_found(): FILE: src/ecs-mcp-server/tests/unit/utils/test_time_utils.py class TestTimeUtils (line 11) | class TestTimeUtils(unittest.TestCase): method test_default_time_window (line 14) | def test_default_time_window(self): method test_explicit_start_time (line 21) | def test_explicit_start_time(self): method test_explicit_end_time (line 29) | def test_explicit_end_time(self): method test_both_times_specified (line 36) | def test_both_times_specified(self): method test_timezone_handling (line 44) | def test_timezone_handling(self): method test_custom_time_window (line 54) | def test_custom_time_window(self): FILE: src/eks-mcp-server/awslabs/eks_mcp_server/aws_helper.py class AwsHelper (line 25) | class AwsHelper: method get_aws_region (line 42) | def get_aws_region() -> Optional[str]: method get_aws_profile (line 47) | def get_aws_profile() -> Optional[str]: method create_boto3_client (line 52) | def create_boto3_client(cls, service_name: str, region_name: Optional[... FILE: src/eks-mcp-server/awslabs/eks_mcp_server/cloudwatch_handler.py class CloudWatchHandler (line 29) | class CloudWatchHandler: method __init__ (line 36) | def __init__(self, mcp, allow_sensitive_data_access=False): method resolve_time_range (line 50) | def resolve_time_range( method get_cloudwatch_logs (line 86) | async def get_cloudwatch_logs( method get_cloudwatch_metrics (line 300) | async def get_cloudwatch_metrics( method _poll_query_results (line 516) | def _poll_query_results( method _build_log_entry (line 596) | def _build_log_entry(self, result): method _format_nested_json (line 635) | def _format_nested_json(self, obj): FILE: src/eks-mcp-server/awslabs/eks_mcp_server/cloudwatch_metrics_guidance_handler.py class ResourceType (line 29) | class ResourceType(Enum): class CloudWatchMetricsHandler (line 39) | class CloudWatchMetricsHandler: method __init__ (line 46) | def __init__(self, mcp): method _load_metrics_guidance (line 58) | def _load_metrics_guidance(self) -> Dict[str, Any]: method get_eks_metrics_guidance (line 74) | async def get_eks_metrics_guidance( FILE: src/eks-mcp-server/awslabs/eks_mcp_server/eks_kb_handler.py class EKSKnowledgeBaseHandler (line 30) | class EKSKnowledgeBaseHandler: method __init__ (line 36) | def __init__(self, mcp): method search_eks_troubleshoot_guide (line 47) | async def search_eks_troubleshoot_guide( FILE: src/eks-mcp-server/awslabs/eks_mcp_server/eks_stack_handler.py class EksStackHandler (line 43) | class EksStackHandler: method __init__ (line 50) | def __init__(self, mcp, allow_write: bool = False): method _ensure_stack_ownership (line 63) | def _ensure_stack_ownership( method manage_eks_stacks (line 112) | async def manage_eks_stacks( method _generate_template (line 255) | async def _generate_template( method _deploy_stack (line 342) | async def _deploy_stack( method _describe_stack (line 445) | async def _describe_stack( method _remove_checkov_metadata (line 535) | def _remove_checkov_metadata(self, resource: Dict[str, Any]) -> None: method _delete_stack (line 551) | async def _delete_stack( FILE: src/eks-mcp-server/awslabs/eks_mcp_server/iam_handler.py class IAMHandler (line 31) | class IAMHandler: method __init__ (line 39) | def __init__(self, mcp, allow_write: bool = False): method get_policies_for_role (line 53) | async def get_policies_for_role( method add_inline_policy (line 147) | async def add_inline_policy( method _get_managed_policies (line 230) | def _get_managed_policies(self, ctx, iam_client, role_name): method _get_inline_policies (line 270) | def _get_inline_policies(self, iam_client, role_name): method _create_inline_policy (line 298) | def _create_inline_policy(self, ctx, iam_client, role_name, policy_nam... method _add_permissions_to_document (line 362) | def _add_permissions_to_document(self, policy_document, permissions): FILE: src/eks-mcp-server/awslabs/eks_mcp_server/insights_handler.py class InsightsHandler (line 32) | class InsightsHandler: method __init__ (line 39) | def __init__( method get_eks_insights (line 60) | async def get_eks_insights( method _get_eks_insights_impl (line 125) | async def _get_eks_insights_impl( method _get_insight_detail (line 160) | async def _get_insight_detail( method _list_insights (line 244) | async def _list_insights( FILE: src/eks-mcp-server/awslabs/eks_mcp_server/k8s_apis.py class K8sApis (line 26) | class K8sApis: method __init__ (line 33) | def __init__(self, endpoint, token, ca_data): method _configure_proxy_settings (line 92) | def _configure_proxy_settings(self, config): method _patch_resource (line 108) | def _patch_resource( method manage_resource (line 153) | def manage_resource( method list_resources (line 224) | def list_resources( method apply_from_yaml (line 270) | def apply_from_yaml( method get_events (line 351) | def get_events( method get_pod_logs (line 413) | def get_pod_logs( method get_api_versions (line 467) | def get_api_versions(self) -> List[str]: method __del__ (line 529) | def __del__(self): FILE: src/eks-mcp-server/awslabs/eks_mcp_server/k8s_client_cache.py class K8sClientCache (line 32) | class K8sClientCache: method __new__ (line 42) | def __new__(cls): method __init__ (line 49) | def __init__(self): method _get_sts_client (line 63) | def _get_sts_client(self): method _retrieve_k8s_aws_id (line 81) | def _retrieve_k8s_aws_id(self, params, context, **kwargs): method _inject_k8s_aws_id_header (line 86) | def _inject_k8s_aws_id_header(self, request, **kwargs): method _get_cluster_credentials (line 91) | def _get_cluster_credentials(self, cluster_name: str): method get_client (line 127) | def get_client(self, cluster_name: str) -> K8sApis: FILE: src/eks-mcp-server/awslabs/eks_mcp_server/k8s_handler.py class K8sHandler (line 41) | class K8sHandler: method __init__ (line 48) | def __init__( method get_client (line 75) | def get_client(self, cluster_name: str) -> K8sApis: method apply_yaml (line 90) | async def apply_yaml( method filter_null_values (line 231) | def filter_null_values(self, data: Any) -> Any: method remove_managed_fields (line 247) | def remove_managed_fields(self, resource: Dict[str, Any]) -> Dict[str,... method cleanup_resource_response (line 266) | def cleanup_resource_response(self, resource: Any) -> Any: method manage_k8s_resource (line 285) | async def manage_k8s_resource( method list_k8s_resources (line 480) | async def list_k8s_resources( method generate_app_manifest (line 621) | async def generate_app_manifest( method _remove_checkov_skip_annotations (line 773) | def _remove_checkov_skip_annotations(self, content: str) -> str: method _load_yaml_template (line 804) | def _load_yaml_template(self, template_files: list, values: Dict[str, ... method get_pod_logs (line 837) | async def get_pod_logs( method get_k8s_events (line 976) | async def get_k8s_events( method list_api_versions (line 1110) | async def list_api_versions( FILE: src/eks-mcp-server/awslabs/eks_mcp_server/logging_helper.py class LogLevel (line 23) | class LogLevel(Enum): function log_with_request_id (line 33) | def log_with_request_id(ctx: Context, level: LogLevel, message: str, **k... FILE: src/eks-mcp-server/awslabs/eks_mcp_server/models.py class EventItem (line 22) | class EventItem(BaseModel): class Operation (line 46) | class Operation(str, Enum): class ApplyYamlData (line 56) | class ApplyYamlData(BaseModel): class KubernetesResourceData (line 66) | class KubernetesResourceData(BaseModel): class ResourceSummary (line 81) | class ResourceSummary(BaseModel): class KubernetesResourceListData (line 91) | class KubernetesResourceListData(BaseModel): class ApiVersionsData (line 101) | class ApiVersionsData(BaseModel): class GenerateAppManifestData (line 109) | class GenerateAppManifestData(BaseModel): class PodLogsData (line 115) | class PodLogsData(BaseModel): class EventsData (line 124) | class EventsData(BaseModel): class CloudWatchLogEntry (line 136) | class CloudWatchLogEntry(BaseModel): class CloudWatchLogsData (line 147) | class CloudWatchLogsData(BaseModel): class CloudWatchDataPoint (line 168) | class CloudWatchDataPoint(BaseModel): class CloudWatchMetricsData (line 179) | class CloudWatchMetricsData(BaseModel): class StackSummary (line 196) | class StackSummary(BaseModel): class ManageEksStacksData (line 207) | class ManageEksStacksData(BaseModel): class PolicySummary (line 235) | class PolicySummary(BaseModel): class RoleDescriptionData (line 243) | class RoleDescriptionData(BaseModel): class AddInlinePolicyData (line 259) | class AddInlinePolicyData(BaseModel): class MetricsGuidanceData (line 269) | class MetricsGuidanceData(BaseModel): class EksVpcConfigData (line 282) | class EksVpcConfigData(BaseModel): class EksInsightStatus (line 311) | class EksInsightStatus(BaseModel): class EksInsightItem (line 318) | class EksInsightItem(BaseModel): class EksInsightsData (line 349) | class EksInsightsData(BaseModel): FILE: src/eks-mcp-server/awslabs/eks_mcp_server/scripts/update_eks_cloudwatch_metrics_guidance.py function fetch_documentation_page (line 46) | def fetch_documentation_page() -> str: function parse_metrics_table (line 61) | def parse_metrics_table(html_content: str) -> List[Dict[str, Any]]: function organize_metrics_by_resource_type (line 172) | def organize_metrics_by_resource_type( function load_existing_metrics (line 213) | def load_existing_metrics() -> Dict[str, Any]: function save_metrics (line 227) | def save_metrics(metrics_data: Dict[str, Any]) -> None: function main (line 242) | def main() -> None: FILE: src/eks-mcp-server/awslabs/eks_mcp_server/server.py function create_server (line 100) | def create_server(): function main (line 109) | def main(): FILE: src/eks-mcp-server/awslabs/eks_mcp_server/vpc_config_handler.py class VpcConfigHandler (line 27) | class VpcConfigHandler: method __init__ (line 34) | def __init__( method get_eks_vpc_config (line 56) | async def get_eks_vpc_config( method _get_vpc_id_for_cluster (line 102) | async def _get_vpc_id_for_cluster(self, ctx: Context, cluster_name: st... method _get_vpc_details (line 126) | async def _get_vpc_details(self, ctx: Context, vpc_id: str) -> tuple[s... method _get_subnet_information (line 158) | async def _get_subnet_information(self, ctx: Context, vpc_id: str) -> ... method _get_route_table_information (line 205) | async def _get_route_table_information(self, ctx: Context, vpc_id: str... method _get_remote_cidr_blocks (line 262) | async def _get_remote_cidr_blocks( method _get_eks_vpc_config_impl (line 330) | async def _get_eks_vpc_config_impl( FILE: src/eks-mcp-server/tests/test_aws_helper.py class TestAwsHelper (line 23) | class TestAwsHelper: method setup_method (line 26) | def setup_method(self): method test_get_aws_region_from_env (line 32) | def test_get_aws_region_from_env(self): method test_get_aws_region_default (line 38) | def test_get_aws_region_default(self): method test_get_aws_profile_from_env (line 44) | def test_get_aws_profile_from_env(self): method test_get_aws_profile_none (line 50) | def test_get_aws_profile_none(self): method test_create_boto3_client_no_profile_with_region (line 56) | def test_create_boto3_client_no_profile_with_region(self, mock_boto3_c... method test_create_boto3_client_no_profile_no_region (line 72) | def test_create_boto3_client_no_profile_no_region(self, mock_boto3_cli... method test_create_boto3_client_with_profile_with_region (line 86) | def test_create_boto3_client_with_profile_with_region(self, mock_boto3... method test_create_boto3_client_with_profile_no_region (line 109) | def test_create_boto3_client_with_profile_no_region(self, mock_boto3_s... method test_create_boto3_client_with_region_override (line 130) | def test_create_boto3_client_with_region_override(self, mock_boto3_cli... method test_create_boto3_client_user_agent (line 142) | def test_create_boto3_client_user_agent(self): method test_client_caching (line 161) | def test_client_caching(self, mock_boto3_client): method test_different_services_not_cached_together (line 181) | def test_different_services_not_cached_together(self, mock_boto3_client): method test_same_service_different_regions_cached_together (line 202) | def test_same_service_different_regions_cached_together(self, mock_bot... method test_error_handling (line 225) | def test_error_handling(self, mock_boto3_client): method test_same_service_different_profiles_cached_together (line 241) | def test_same_service_different_profiles_cached_together(self, mock_bo... FILE: src/eks-mcp-server/tests/test_cloudwatch_handler.py function mock_context (line 27) | def mock_context(): function mock_mcp (line 35) | def mock_mcp(): class TestCloudWatchHandler (line 40) | class TestCloudWatchHandler: method test_init (line 43) | def test_init(self, mock_mcp): method test_resolve_time_range_defaults (line 64) | def test_resolve_time_range_defaults(self): method test_resolve_time_range_custom_minutes (line 83) | def test_resolve_time_range_custom_minutes(self): method test_resolve_time_range_string_times (line 102) | def test_resolve_time_range_string_times(self): method test_resolve_time_range_datetime_objects (line 117) | def test_resolve_time_range_datetime_objects(self): method test_resolve_time_range_mixed_types (line 132) | def test_resolve_time_range_mixed_types(self): method test_get_cloudwatch_logs_success (line 148) | async def test_get_cloudwatch_logs_success(self, mock_context, mock_mcp): method test_get_cloudwatch_logs_with_custom_parameters (line 228) | async def test_get_cloudwatch_logs_with_custom_parameters(self, mock_c... method test_get_cloudwatch_logs_control_plane (line 290) | async def test_get_cloudwatch_logs_control_plane(self, mock_context, m... method test_get_cloudwatch_logs_cluster_resource_type (line 335) | async def test_get_cloudwatch_logs_cluster_resource_type(self, mock_co... method test_get_cloudwatch_logs_custom_log_group (line 392) | async def test_get_cloudwatch_logs_custom_log_group(self, mock_context... method test_get_cloudwatch_logs_without_resource_name (line 437) | async def test_get_cloudwatch_logs_without_resource_name(self, mock_co... method test_get_cloudwatch_logs_sensitive_data_access_disabled (line 500) | async def test_get_cloudwatch_logs_sensitive_data_access_disabled( method test_get_cloudwatch_logs_error (line 525) | async def test_get_cloudwatch_logs_error(self, mock_context, mock_mcp): method test_get_cloudwatch_metrics_success (line 559) | async def test_get_cloudwatch_metrics_success(self, mock_context, mock... method test_get_cloudwatch_metrics_with_custom_parameters (line 659) | async def test_get_cloudwatch_metrics_with_custom_parameters(self, moc... method test_get_cloudwatch_metrics_cluster_name_mismatch (line 733) | async def test_get_cloudwatch_metrics_cluster_name_mismatch(self, mock... method test_get_cloudwatch_metrics_empty_results (line 774) | async def test_get_cloudwatch_metrics_empty_results(self, mock_context... method test_get_cloudwatch_metrics_error (line 824) | async def test_get_cloudwatch_metrics_error(self, mock_context, mock_m... method test_get_cloudwatch_metrics_with_field_objects (line 858) | async def test_get_cloudwatch_metrics_with_field_objects(self, mock_co... method test_get_cloudwatch_logs_with_json_message (line 920) | async def test_get_cloudwatch_logs_with_json_message(self, mock_contex... method test_get_cloudwatch_logs_with_nested_json_message (line 973) | async def test_get_cloudwatch_logs_with_nested_json_message(self, mock... method test_build_log_entry (line 1040) | def test_build_log_entry(self, mock_mcp): method test_format_nested_json (line 1083) | def test_format_nested_json(self, mock_mcp): method test_poll_query_results_complete (line 1114) | def test_poll_query_results_complete(self, mock_context, mock_mcp): method test_poll_query_results_failed (line 1147) | def test_poll_query_results_failed(self, mock_context, mock_mcp): method test_poll_query_results_cancelled (line 1167) | def test_poll_query_results_cancelled(self, mock_context, mock_mcp): method test_poll_query_results_timeout (line 1187) | def test_poll_query_results_timeout(self, mock_context, mock_mcp): method test_poll_query_results_exponential_backoff (line 1209) | def test_poll_query_results_exponential_backoff(self, mock_context, mo... FILE: src/eks-mcp-server/tests/test_cloudwatch_metrics_guidance_handler.py function mock_metrics_guidance (line 22) | def mock_metrics_guidance(): function metrics_handler (line 47) | def metrics_handler(mock_metrics_guidance): function test_get_eks_metrics_guidance_cluster (line 62) | async def test_get_eks_metrics_guidance_cluster(metrics_handler): function test_get_eks_metrics_guidance_node (line 77) | async def test_get_eks_metrics_guidance_node(metrics_handler): function test_get_eks_metrics_guidance_nonexistent (line 92) | async def test_get_eks_metrics_guidance_nonexistent(metrics_handler): function test_get_eks_metrics_guidance_invalid_type (line 106) | async def test_get_eks_metrics_guidance_invalid_type(metrics_handler): function test_load_metrics_guidance (line 118) | def test_load_metrics_guidance(): function test_load_metrics_guidance_error (line 128) | def test_load_metrics_guidance_error(): FILE: src/eks-mcp-server/tests/test_eks_kb_handler.py function mock_mcp (line 23) | def mock_mcp(): class TestEKSKnowledgeBaseHandler (line 28) | class TestEKSKnowledgeBaseHandler: method test_search_eks_troubleshoot_guide_success (line 33) | async def test_search_eks_troubleshoot_guide_success(self, mock_aws_au... method test_search_eks_troubleshoot_guide_error (line 56) | async def test_search_eks_troubleshoot_guide_error(self, mock_aws_auth... FILE: src/eks-mcp-server/tests/test_eks_stack_handler.py class TestEksStackHandler (line 33) | class TestEksStackHandler: method test_init_default (line 36) | def test_init_default(self): method test_init_write_access_disabled (line 53) | def test_init_write_access_disabled(self): method test_deploy_stack_success (line 71) | async def test_deploy_stack_success(self): method test_ensure_stack_ownership_owned_stack (line 134) | def test_ensure_stack_ownership_owned_stack(self): method test_ensure_stack_ownership_not_owned_stack (line 180) | def test_ensure_stack_ownership_not_owned_stack(self): method test_ensure_stack_ownership_stack_not_found (line 225) | def test_ensure_stack_ownership_stack_not_found(self): method test_deploy_stack_update_existing (line 264) | async def test_deploy_stack_update_existing(self): method test_deploy_stack_ownership_check_fails (line 328) | async def test_deploy_stack_ownership_check_fails(self): method test_describe_stack_success (line 363) | async def test_describe_stack_success(self): method test_delete_stack_success (line 441) | async def test_delete_stack_success(self): method test_delete_stack_not_owned (line 491) | async def test_delete_stack_not_owned(self): method test_generate_template_success (line 533) | async def test_generate_template_success(self): method test_generate_template_with_other_metadata (line 596) | async def test_generate_template_with_other_metadata(self): method test_manage_eks_stacks_generate (line 663) | async def test_manage_eks_stacks_generate(self): method test_manage_eks_stacks_deploy (line 699) | async def test_manage_eks_stacks_deploy(self): method test_manage_eks_stacks_describe (line 739) | async def test_manage_eks_stacks_describe(self): method test_manage_eks_stacks_delete (line 773) | async def test_manage_eks_stacks_delete(self): method test_manage_eks_stacks_invalid_operation (line 807) | async def test_manage_eks_stacks_invalid_operation(self): method test_manage_eks_stacks_write_access_disabled (line 834) | async def test_manage_eks_stacks_write_access_disabled(self): method test_manage_eks_stacks_missing_parameters (line 909) | async def test_manage_eks_stacks_missing_parameters(self): method test_remove_checkov_metadata_direct (line 972) | def test_remove_checkov_metadata_direct(self): method test_generate_template_error (line 1041) | async def test_generate_template_error(self): method test_deploy_stack_error (line 1109) | async def test_deploy_stack_error(self): method test_delete_stack_error (line 1197) | async def test_delete_stack_error(self): method test_manage_eks_stacks_general_exception (line 1240) | async def test_manage_eks_stacks_general_exception(self): FILE: src/eks-mcp-server/tests/test_iam_handler.py function test_iam_handler_initialization (line 25) | async def test_iam_handler_initialization(): function test_get_policies_for_role (line 48) | async def test_get_policies_for_role(mock_create_client): function test_add_inline_policy_existing_policy (line 173) | async def test_add_inline_policy_existing_policy(mock_create_client): function test_add_inline_policy_new_policy (line 228) | async def test_add_inline_policy_new_policy(mock_create_client): function test_add_inline_policy_multiple_statements (line 287) | async def test_add_inline_policy_multiple_statements(mock_create_client): function test_get_policies_for_role_error (line 350) | async def test_get_policies_for_role_error(mock_create_client): function test_get_policies_for_role_string_policy_document (line 381) | async def test_get_policies_for_role_string_policy_document(mock_create_... function test_get_managed_policies_error (line 447) | async def test_get_managed_policies_error(mock_create_client): function test_get_inline_policies_error (line 545) | async def test_get_inline_policies_error(mock_create_client): function test_add_inline_policy_write_access_disabled (line 608) | async def test_add_inline_policy_write_access_disabled(mock_create_client): function test_add_inline_policy_general_error (line 647) | async def test_add_inline_policy_general_error(mock_create_client): FILE: src/eks-mcp-server/tests/test_init.py class TestInit (line 20) | class TestInit: method test_version (line 23) | def test_version(self): method test_module_reload (line 40) | def test_module_reload(self): FILE: src/eks-mcp-server/tests/test_insights_handler.py function mock_context (line 27) | def mock_context(): function mock_mcp (line 35) | def mock_mcp(): function mock_eks_client (line 41) | def mock_eks_client(): class TestInsightsHandler (line 46) | class TestInsightsHandler: method mock_aws_helper (line 50) | def mock_aws_helper(self, monkeypatch, mock_eks_client): method test_init (line 64) | def test_init(self, mock_mcp): method test_init_with_options (line 82) | def test_init_with_options(self, mock_mcp): method _create_mock_insight_item (line 94) | def _create_mock_insight_item(insight_id='test-insight-id', category='... method test_get_eks_insights_list_mode (line 108) | async def test_get_eks_insights_list_mode(self, mock_context, mock_mcp): method test_get_eks_insights_detail_mode (line 155) | async def test_get_eks_insights_detail_mode(self, mock_context, mock_m... method test_get_eks_insights_with_category_filter (line 212) | async def test_get_eks_insights_with_category_filter(self, mock_contex... method test_get_eks_insights_with_pagination (line 260) | async def test_get_eks_insights_with_pagination(self, mock_context, mo... method test_get_eks_insights_error_handling (line 302) | async def test_get_eks_insights_error_handling(self, mock_context, moc... method test_get_eks_insights_no_insights_found (line 325) | async def test_get_eks_insights_no_insights_found(self, mock_context, ... method test_get_eks_insights_insight_not_found (line 358) | async def test_get_eks_insights_insight_not_found(self, mock_context, ... method test_get_eks_insights_impl_direct (line 396) | async def test_get_eks_insights_impl_direct(self, mock_context, mock_m... method test_get_eks_insights_impl_general_exception (line 454) | async def test_get_eks_insights_impl_general_exception(self, mock_cont... method test_get_insight_detail_exception (line 479) | async def test_get_insight_detail_exception(self, mock_context, mock_m... FILE: src/eks-mcp-server/tests/test_k8s_apis.py function mock_kubernetes_client (line 27) | def mock_kubernetes_client(): function k8s_apis (line 44) | def k8s_apis(mock_kubernetes_client): class TestK8sApisInitialization (line 93) | class TestK8sApisInitialization: method test_init_requires_ca_data (line 96) | def test_init_requires_ca_data(self, mock_kubernetes_client): method test_init_with_ca_data (line 102) | def test_init_with_ca_data(self, mock_kubernetes_client): method test_init_with_ca_data_error (line 138) | def test_init_with_ca_data_error(self, mock_kubernetes_client): method test_init_kubernetes_import_error (line 163) | def test_init_kubernetes_import_error(self): method test_cleanup_on_deletion (line 176) | def test_cleanup_on_deletion(self): method test_cleanup_on_deletion_no_file (line 190) | def test_cleanup_on_deletion_no_file(self): method test_cleanup_on_deletion_error (line 204) | def test_cleanup_on_deletion_error(self): class TestK8sApisOperations (line 219) | class TestK8sApisOperations: method test_dynamic_client_initialization (line 222) | def test_dynamic_client_initialization(self, k8s_apis): method test_manage_resource_create (line 228) | def test_manage_resource_create(self, k8s_apis): method test_manage_resource_read (line 251) | def test_manage_resource_read(self, k8s_apis): method test_manage_resource_replace (line 266) | def test_manage_resource_replace(self, k8s_apis): method test_manage_resource_patch (line 290) | def test_manage_resource_patch(self, k8s_apis): method test_manage_resource_delete (line 315) | def test_manage_resource_delete(self, k8s_apis): method test_patch_with_dynamic_client_fallback (line 332) | def test_patch_with_dynamic_client_fallback(self, k8s_apis): method test_patch_resource_direct (line 372) | def test_patch_resource_direct(self, k8s_apis): method test_patch_resource_with_other_error (line 393) | def test_patch_resource_with_other_error(self, k8s_apis): method test_manage_resource_validation (line 415) | def test_manage_resource_validation(self, k8s_apis): method test_manage_resource_unsupported_operation (line 425) | def test_manage_resource_unsupported_operation(self, k8s_apis): method test_manage_resource_error_handling (line 435) | def test_manage_resource_error_handling(self, k8s_apis): method test_list_resources_with_namespace (line 446) | def test_list_resources_with_namespace(self, k8s_apis): method test_list_resources_all_namespaces (line 471) | def test_list_resources_all_namespaces(self, k8s_apis): method test_list_resources_with_additional_kwargs (line 488) | def test_list_resources_with_additional_kwargs(self, k8s_apis): method test_list_resources_error_handling (line 513) | def test_list_resources_error_handling(self, k8s_apis): method test_get_pod_logs (line 524) | def test_get_pod_logs(self, k8s_apis): method test_get_pod_logs_minimal (line 563) | def test_get_pod_logs_minimal(self, k8s_apis): method test_get_pod_logs_error_handling (line 592) | def test_get_pod_logs_error_handling(self, k8s_apis): method _create_mock_event (line 613) | def _create_mock_event(self): method _verify_event_result (line 629) | def _verify_event_result(self, events): method test_get_events_with_namespace (line 641) | def test_get_events_with_namespace(self, k8s_apis): method test_get_events_all_namespaces (line 660) | def test_get_events_all_namespaces(self, k8s_apis): method test_get_events_empty (line 677) | def test_get_events_empty(self, k8s_apis): method test_get_events_implementation (line 700) | def test_get_events_implementation(self): method test_get_events_implementation_all_namespaces (line 808) | def test_get_events_implementation_all_namespaces(self): method test_get_events_implementation_error (line 883) | def test_get_events_implementation_error(self): method test_apply_from_yaml_create_new_resources (line 929) | def test_apply_from_yaml_create_new_resources(self, k8s_apis): method test_apply_from_yaml_update_existing_resources (line 980) | def test_apply_from_yaml_update_existing_resources(self, k8s_apis): method test_apply_from_yaml_force_false_no_update (line 1016) | def test_apply_from_yaml_force_false_no_update(self, k8s_apis): method test_apply_from_yaml_custom_resource (line 1055) | def test_apply_from_yaml_custom_resource(self, k8s_apis): method test_apply_from_yaml_error_handling (line 1095) | def test_apply_from_yaml_error_handling(self, k8s_apis): method test_apply_from_yaml_empty_objects (line 1139) | def test_apply_from_yaml_empty_objects(self, k8s_apis): method test_apply_from_yaml_with_additional_kwargs (line 1153) | def test_apply_from_yaml_with_additional_kwargs(self, k8s_apis): method test_get_api_versions_success (line 1188) | def test_get_api_versions_success(self, k8s_apis): method test_get_api_versions_error (line 1234) | def test_get_api_versions_error(self, k8s_apis): method test_get_api_versions_core_api_error_apis_api_success (line 1253) | def test_get_api_versions_core_api_error_apis_api_success(self, k8s_ap... class TestK8sProxySupport (line 1289) | class TestK8sProxySupport: method mock_k8s_modules (line 1293) | def mock_k8s_modules(self): method test_proxy_configuration_with_https_proxy (line 1319) | def test_proxy_configuration_with_https_proxy(self, mock_k8s_modules): method test_proxy_configuration_http_fallback (line 1340) | def test_proxy_configuration_http_fallback(self, mock_k8s_modules): method test_proxy_configuration_lowercase_env_vars (line 1360) | def test_proxy_configuration_lowercase_env_vars(self, mock_k8s_modules): method test_no_proxy_configuration_when_env_vars_absent (line 1381) | def test_no_proxy_configuration_when_env_vars_absent(self, mock_k8s_mo... method test_proxy_configuration_with_mixed_case_env_vars (line 1415) | def test_proxy_configuration_with_mixed_case_env_vars(self, mock_k8s_m... FILE: src/eks-mcp-server/tests/test_k8s_client_cache.py class TestK8sClientCache (line 23) | class TestK8sClientCache: method test_singleton_pattern (line 26) | def test_singleton_pattern(self): method test_initialization (line 35) | def test_initialization(self): method test_get_sts_client (line 51) | def test_get_sts_client(self): method test_retrieve_k8s_aws_id (line 97) | def test_retrieve_k8s_aws_id(self): method test_inject_k8s_aws_id_header (line 123) | def test_inject_k8s_aws_id_header(self): method test_get_client_success (line 150) | def test_get_client_success(self): method test_get_client_cached (line 187) | def test_get_client_cached(self): method test_get_client_invalid_credentials (line 208) | def test_get_client_invalid_credentials(self): method test_get_client_error (line 230) | def test_get_client_error(self): method test_ttl_cache_expiration (line 252) | def test_ttl_cache_expiration(self): method test_get_cluster_credentials (line 304) | def test_get_cluster_credentials(self): method test_get_cluster_credentials_error (line 355) | def test_get_cluster_credentials_error(self): method test_get_cluster_credentials_missing_data (line 384) | def test_get_cluster_credentials_missing_data(self): FILE: src/eks-mcp-server/tests/test_k8s_handler.py function mock_context (line 28) | def mock_context(): function mock_mcp (line 36) | def mock_mcp(): function mock_client_cache (line 42) | def mock_client_cache(): function mock_k8s_apis (line 51) | def mock_k8s_apis(): class TestK8sHandler (line 56) | class TestK8sHandler: method test_init (line 59) | def test_init(self, mock_mcp, mock_client_cache): method test_init_with_sensitive_data_access (line 90) | def test_init_with_sensitive_data_access(self, mock_mcp, mock_client_c... method test_get_client (line 122) | def test_get_client(self, mock_mcp, mock_client_cache): method test_load_yaml_template_removes_checkov_annotations (line 139) | def test_load_yaml_template_removes_checkov_annotations(self, mock_mcp... method test_apply_yaml_relative_path (line 206) | async def test_apply_yaml_relative_path(self, mock_context, mock_mcp, ... method test_apply_yaml_success (line 232) | async def test_apply_yaml_success(self, mock_context, mock_mcp, mock_c... method test_apply_yaml_file_not_found (line 287) | async def test_apply_yaml_file_not_found(self, mock_context, mock_mcp,... method test_apply_yaml_io_error (line 320) | async def test_apply_yaml_io_error(self, mock_context, mock_mcp, mock_... method test_apply_yaml_create_error (line 354) | async def test_apply_yaml_create_error(self, mock_context, mock_mcp, m... method test_apply_yaml_outer_exception (line 395) | async def test_apply_yaml_outer_exception(self, mock_context, mock_mcp... method test_manage_k8s_resource_create (line 423) | async def test_manage_k8s_resource_create(self, mock_context, mock_mcp... method test_read_k8s_resource (line 479) | async def test_read_k8s_resource(self, mock_context, mock_mcp, mock_cl... method test_manage_k8s_resource_invalid_operation (line 523) | async def test_manage_k8s_resource_invalid_operation( method test_manage_k8s_resource_error (line 550) | async def test_manage_k8s_resource_error(self, mock_context, mock_mcp,... method test_manage_k8s_resource_secret_sensitive_data_access_disabled (line 588) | async def test_manage_k8s_resource_secret_sensitive_data_access_disabled( method test_manage_k8s_resource_write_access_disabled (line 634) | async def test_manage_k8s_resource_write_access_disabled( method test_list_k8s_resources_success (line 752) | async def test_list_k8s_resources_success(self, mock_context, mock_mcp... method test_list_k8s_resources_empty (line 838) | async def test_list_k8s_resources_empty(self, mock_context, mock_mcp, ... method test_list_k8s_resources_error (line 877) | async def test_list_k8s_resources_error(self, mock_context, mock_mcp, ... method test_generate_app_manifest_write_access_disabled (line 906) | async def test_generate_app_manifest_write_access_disabled( method test_generate_app_manifest_relative_path (line 933) | async def test_generate_app_manifest_relative_path( method test_generate_app_manifest_success (line 960) | async def test_generate_app_manifest_success(self, mock_context, mock_... method test_generate_app_manifest_error (line 1027) | async def test_generate_app_manifest_error(self, mock_context, mock_mc... method test_load_yaml_template (line 1053) | def test_load_yaml_template(self, mock_mcp, mock_client_cache): method test_generate_app_manifest_with_absolute_path (line 1088) | async def test_generate_app_manifest_with_absolute_path( method test_generate_app_manifest_multiple_templates (line 1140) | async def test_generate_app_manifest_multiple_templates( method test_init_with_get_pod_logs (line 1199) | def test_init_with_get_pod_logs(self, mock_mcp, mock_client_cache): method test_init_write_access_disabled (line 1220) | def test_init_write_access_disabled(self, mock_mcp, mock_client_cache): method test_get_pod_logs_success (line 1249) | async def test_get_pod_logs_success(self, mock_context, mock_mcp, mock... method test_get_pod_logs_minimal (line 1305) | async def test_get_pod_logs_minimal(self, mock_context, mock_mcp, mock... method test_get_pod_logs_sensitive_data_access_disabled (line 1361) | async def test_get_pod_logs_sensitive_data_access_disabled( method test_get_pod_logs_error (line 1389) | async def test_get_pod_logs_error(self, mock_context, mock_mcp, mock_c... method test_get_k8s_events_success (line 1434) | async def test_get_k8s_events_success(self, mock_context, mock_mcp, mo... method test_get_k8s_events_empty (line 1515) | async def test_get_k8s_events_empty(self, mock_context, mock_mcp, mock... method test_get_k8s_events_sensitive_data_access_disabled (line 1560) | async def test_get_k8s_events_sensitive_data_access_disabled( method test_get_k8s_events_error (line 1588) | async def test_get_k8s_events_error(self, mock_context, mock_mcp, mock... method test_remove_managed_fields (line 1624) | def test_remove_managed_fields(self, mock_mcp, mock_client_cache): method test_cleanup_resource_response (line 1690) | def test_cleanup_resource_response(self, mock_mcp, mock_client_cache): method test_remove_checkov_skip_annotations (line 1776) | def test_remove_checkov_skip_annotations(self, mock_mcp, mock_client_c... method test_filter_null_values (line 1837) | def test_filter_null_values(self, mock_mcp, mock_client_cache): FILE: src/eks-mcp-server/tests/test_logging_helper.py function mock_context (line 23) | def mock_context(): function test_log_with_request_id_debug (line 31) | def test_log_with_request_id_debug(mock_logger, mock_context): function test_log_with_request_id_info (line 38) | def test_log_with_request_id_info(mock_logger, mock_context): function test_log_with_request_id_warning (line 45) | def test_log_with_request_id_warning(mock_logger, mock_context): function test_log_with_request_id_error (line 54) | def test_log_with_request_id_error(mock_logger, mock_context): function test_log_with_request_id_critical (line 61) | def test_log_with_request_id_critical(mock_logger, mock_context): function test_log_with_request_id_with_kwargs (line 70) | def test_log_with_request_id_with_kwargs(mock_logger, mock_context): function test_log_level_enum (line 86) | def test_log_level_enum(): FILE: src/eks-mcp-server/tests/test_main.py class TestMain (line 20) | class TestMain: method test_main_default (line 26) | def test_main_default(self, mock_create_server, mock_boto3_client): method test_module_execution (line 46) | def test_module_execution(self): method test_create_server (line 66) | def test_create_server(self): FILE: src/eks-mcp-server/tests/test_models.py class TestApplyYamlData (line 22) | class TestApplyYamlData: method test_apply_yaml_data_success (line 25) | def test_apply_yaml_data_success(self): method test_apply_yaml_data_with_updates (line 37) | def test_apply_yaml_data_with_updates(self): method test_apply_yaml_data_with_defaults (line 49) | def test_apply_yaml_data_with_defaults(self): FILE: src/eks-mcp-server/tests/test_server.py function test_server_initialization (line 26) | async def test_server_initialization(): function test_command_line_args (line 49) | async def test_command_line_args(): function test_k8s_handler_initialization_default (line 204) | async def test_k8s_handler_initialization_default(): function test_k8s_handler_initialization_write_access_disabled (line 230) | async def test_k8s_handler_initialization_write_access_disabled(): function test_k8s_handler_initialization_write_access_enabled (line 257) | async def test_k8s_handler_initialization_write_access_enabled(): function test_k8s_handler_initialization_sensitive_data_access_enabled (line 283) | async def test_k8s_handler_initialization_sensitive_data_access_enabled(): function test_k8s_handler_initialization_both_flags_enabled (line 309) | async def test_k8s_handler_initialization_both_flags_enabled(): function test_eks_kb_handler_initialization (line 335) | async def test_eks_kb_handler_initialization(): function test_cloudwatch_handler_initialization (line 349) | async def test_cloudwatch_handler_initialization(): function test_cloudwatch_handler_initialization_with_sensitive_data_access (line 371) | async def test_cloudwatch_handler_initialization_with_sensitive_data_acc... function test_apply_yaml (line 392) | async def test_apply_yaml(): function test_apply_yaml_with_secret_blocked (line 454) | async def test_apply_yaml_with_secret_blocked(): function test_manage_k8s_resource_secret_blocked (line 506) | async def test_manage_k8s_resource_secret_blocked(): function test_get_pod_logs_blocked (line 539) | async def test_get_pod_logs_blocked(): function test_get_k8s_events_blocked (line 572) | async def test_get_k8s_events_blocked(): function test_get_cloudwatch_logs_blocked (line 603) | async def test_get_cloudwatch_logs_blocked(): FILE: src/eks-mcp-server/tests/test_vpc_config_handler.py function mock_context (line 26) | def mock_context(): function mock_mcp (line 34) | def mock_mcp(): function mock_ec2_client (line 40) | def mock_ec2_client(): function mock_eks_client (line 46) | def mock_eks_client(): class TestVpcConfigHandler (line 51) | class TestVpcConfigHandler: method mock_aws_helper (line 55) | def mock_aws_helper(self, monkeypatch, mock_ec2_client, mock_eks_client): method test_init (line 71) | def test_init(self, mock_mcp): method test_init_with_options (line 91) | def test_init_with_options(self, mock_mcp): method test_get_eks_vpc_config_with_explicit_vpc_id (line 102) | async def test_get_eks_vpc_config_with_explicit_vpc_id(self, mock_cont... method test_get_eks_vpc_config_vpc_not_found (line 191) | async def test_get_eks_vpc_config_vpc_not_found(self, mock_context, mo... method test_get_eks_vpc_config_no_vpc_id (line 230) | async def test_get_eks_vpc_config_no_vpc_id(self, mock_context, mock_m... method test_get_eks_vpc_config_api_error (line 265) | async def test_get_eks_vpc_config_api_error(self, mock_context, mock_m... method test_get_eks_vpc_config_with_remote_network (line 294) | async def test_get_eks_vpc_config_with_remote_network(self, mock_conte... method test_get_eks_vpc_config_with_no_pod_networks (line 395) | async def test_get_eks_vpc_config_with_no_pod_networks(self, mock_cont... method test_get_eks_vpc_config_impl (line 496) | async def test_get_eks_vpc_config_impl(self, mock_context, mock_mcp): method test_get_vpc_id_for_cluster_success (line 628) | async def test_get_vpc_id_for_cluster_success(self, mock_context, mock... method test_get_vpc_id_for_cluster_no_vpc_id (line 655) | async def test_get_vpc_id_for_cluster_no_vpc_id(self, mock_context, mo... method test_get_vpc_id_for_cluster_api_error (line 682) | async def test_get_vpc_id_for_cluster_api_error(self, mock_context, mo... method test_get_vpc_details_success (line 705) | async def test_get_vpc_details_success(self, mock_context, mock_mcp): method test_get_vpc_details_vpc_not_found (line 742) | async def test_get_vpc_details_vpc_not_found(self, mock_context, mock_... method test_get_vpc_details_api_error (line 765) | async def test_get_vpc_details_api_error(self, mock_context, mock_mcp): method test_get_subnet_information (line 788) | async def test_get_subnet_information(self, mock_context, mock_mcp): method test_get_route_table_information (line 870) | async def test_get_route_table_information(self, mock_context, mock_mcp): method test_get_remote_cidr_blocks_with_cluster_response (line 961) | async def test_get_remote_cidr_blocks_with_cluster_response(self, mock... method test_get_remote_cidr_blocks_without_cluster_response (line 991) | async def test_get_remote_cidr_blocks_without_cluster_response(self, m... method test_get_remote_cidr_blocks_with_empty_cluster_response (line 1013) | async def test_get_remote_cidr_blocks_with_empty_cluster_response( method test_get_remote_cidr_blocks_api_error (line 1037) | async def test_get_remote_cidr_blocks_api_error(self, mock_context, mo... method test_get_eks_vpc_config_outer_exception (line 1062) | async def test_get_eks_vpc_config_outer_exception(self, mock_context, ... method test_get_eks_vpc_config_impl_inner_exception (line 1090) | async def test_get_eks_vpc_config_impl_inner_exception(self, mock_cont... FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/common/connection.py class BaseConnectionManager (line 24) | class BaseConnectionManager: method get_connection (line 32) | def get_connection(cls) -> Any: method close_connection (line 66) | def close_connection(cls) -> None: class ElastiCacheConnectionManager (line 73) | class ElastiCacheConnectionManager(BaseConnectionManager): class EC2ConnectionManager (line 81) | class EC2ConnectionManager(BaseConnectionManager): class CloudWatchLogsConnectionManager (line 89) | class CloudWatchLogsConnectionManager(BaseConnectionManager): class FirehoseConnectionManager (line 97) | class FirehoseConnectionManager(BaseConnectionManager): class CostExplorerConnectionManager (line 105) | class CostExplorerConnectionManager(BaseConnectionManager): class CloudWatchConnectionManager (line 113) | class CloudWatchConnectionManager(BaseConnectionManager): FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/common/decorators.py function handle_exceptions (line 21) | def handle_exceptions(func: Callable) -> Callable: FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/context.py class Context (line 18) | class Context: method initialize (line 24) | def initialize(cls, readonly: bool = False): method readonly_mode (line 33) | def readonly_mode(cls) -> bool: FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/main.py function main (line 33) | def main(): FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cc/connect.py function _configure_security_groups (line 25) | async def _configure_security_groups( function connect_jump_host_cc (line 134) | async def connect_jump_host_cc(cache_cluster_id: str, instance_id: str) ... function get_ssh_tunnel_command_cc (line 175) | async def get_ssh_tunnel_command_cc( function create_jump_host_cc (line 253) | async def create_jump_host_cc( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cc/create.py class CreateCacheClusterRequest (line 26) | class CreateCacheClusterRequest(BaseModel): function create_cache_cluster (line 102) | async def create_cache_cluster(request: CreateCacheClusterRequest) -> Dict: FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cc/delete.py function delete_cache_cluster (line 26) | async def delete_cache_cluster( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cc/describe.py function describe_cache_clusters (line 25) | async def describe_cache_clusters( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cc/modify.py class ModifyCacheClusterRequest (line 27) | class ModifyCacheClusterRequest(BaseModel): function modify_cache_cluster (line 92) | async def modify_cache_cluster(request: ModifyCacheClusterRequest) -> Dict: FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cc/parsers.py function parse_shorthand_scale_config (line 20) | def parse_shorthand_scale_config(config: str) -> Dict[str, Any]: FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cc/processors.py function process_scale_config (line 21) | def process_scale_config(scale_config: Union[str, Dict]) -> Dict: FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/ce/get_cost_and_usage.py class GetCostAndUsageRequest (line 24) | class GetCostAndUsageRequest(BaseModel): function get_cost_and_usage (line 39) | async def get_cost_and_usage(request: GetCostAndUsageRequest) -> Dict[st... FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cw/get_metric_statistics.py function get_metric_statistics (line 26) | async def get_metric_statistics( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cwlogs/create_log_group.py function create_log_group (line 26) | async def create_log_group( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cwlogs/describe_log_groups.py function describe_log_groups (line 25) | async def describe_log_groups( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cwlogs/describe_log_streams.py function describe_log_streams (line 25) | async def describe_log_streams( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cwlogs/filter_log_events.py function filter_log_events (line 26) | async def filter_log_events( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/cwlogs/get_log_events.py function get_log_events (line 26) | async def get_log_events( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/firehose/list_delivery_streams.py function list_delivery_streams (line 25) | async def list_delivery_streams( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/misc/batch_apply_update_action.py function batch_apply_update_action (line 26) | async def batch_apply_update_action( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/misc/batch_stop_update_action.py function batch_stop_update_action (line 26) | async def batch_stop_update_action( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/misc/describe_cache_engine_versions.py function describe_cache_engine_versions (line 25) | async def describe_cache_engine_versions( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/misc/describe_engine_default_parameters.py function describe_engine_default_parameters (line 25) | async def describe_engine_default_parameters( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/misc/describe_events.py function describe_events (line 26) | async def describe_events( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/misc/describe_service_updates.py function describe_service_updates (line 25) | async def describe_service_updates( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/rg/complete_migration.py class CompleteMigrationRequest (line 25) | class CompleteMigrationRequest(BaseModel): function prepare_request_dict (line 41) | def prepare_request_dict(request: CompleteMigrationRequest) -> Dict[str,... function complete_migration (line 64) | async def complete_migration(request: CompleteMigrationRequest) -> Dict: FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/rg/connect.py function _configure_security_groups (line 25) | async def _configure_security_groups( function connect_jump_host_rg (line 162) | async def connect_jump_host_rg(replication_group_id: str, instance_id: s... function get_ssh_tunnel_command_rg (line 203) | async def get_ssh_tunnel_command_rg( function create_jump_host_rg (line 282) | async def create_jump_host_rg( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/rg/create.py class Tag (line 26) | class Tag(BaseModel): class NodeGroupConfiguration (line 34) | class NodeGroupConfiguration(BaseModel): class LogDeliveryDestinationDetails (line 49) | class LogDeliveryDestinationDetails(BaseModel): class LogDeliveryConfiguration (line 61) | class LogDeliveryConfiguration(BaseModel): class CreateReplicationGroupRequest (line 74) | class CreateReplicationGroupRequest(BaseModel): function prepare_request_dict (line 158) | def prepare_request_dict(request: CreateReplicationGroupRequest) -> Dict... function create_replication_group (line 287) | async def create_replication_group(request: CreateReplicationGroupReques... FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/rg/delete.py function delete_replication_group (line 26) | async def delete_replication_group( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/rg/describe.py function describe_replication_groups (line 25) | async def describe_replication_groups( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/rg/modify.py function modify_replication_group_shard_configuration (line 29) | async def modify_replication_group_shard_configuration( class ModifyReplicationGroupRequest (line 88) | class ModifyReplicationGroupRequest(BaseModel): function prepare_modify_request_dict (line 122) | def prepare_modify_request_dict(request: ModifyReplicationGroupRequest) ... function modify_replication_group (line 204) | async def modify_replication_group(request: ModifyReplicationGroupReques... FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/rg/parsers.py function parse_shorthand_resharding (line 21) | def parse_shorthand_resharding(config: str) -> Dict[str, Any]: function parse_new_shard_config (line 71) | def parse_new_shard_config(config: str) -> Dict[str, Any]: function parse_shorthand_nodegroup (line 122) | def parse_shorthand_nodegroup(group: str) -> Dict[str, Any]: function parse_shorthand_log_delivery (line 207) | def parse_shorthand_log_delivery(config: str) -> Dict[str, Any]: FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/rg/processors.py function process_resharding_configuration (line 25) | def process_resharding_configuration( function process_log_delivery_configurations (line 100) | def process_log_delivery_configurations( function process_nodegroup_configuration (line 166) | def process_nodegroup_configuration( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/rg/start_migration.py class CustomerNodeEndpoint (line 25) | class CustomerNodeEndpoint(BaseModel): class StartMigrationRequest (line 33) | class StartMigrationRequest(BaseModel): function prepare_request_dict (line 47) | def prepare_request_dict(request: StartMigrationRequest) -> Dict[str, Any]: function start_migration (line 121) | async def start_migration(request: StartMigrationRequest) -> Dict: FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/rg/test_migration.py class CustomerNodeEndpoint (line 24) | class CustomerNodeEndpoint(BaseModel): class MigrationTestRequest (line 32) | class MigrationTestRequest(BaseModel): function prepare_request_dict (line 46) | def prepare_request_dict(request: MigrationTestRequest) -> Dict[str, Any]: function test_migration (line 115) | async def test_migration(request: MigrationTestRequest) -> Dict: FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/serverless/connect.py function _configure_security_groups (line 25) | async def _configure_security_groups( function connect_jump_host_serverless (line 146) | async def connect_jump_host_serverless( function get_ssh_tunnel_command_serverless (line 189) | async def get_ssh_tunnel_command_serverless( function create_jump_host_serverless (line 274) | async def create_jump_host_serverless( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/serverless/create.py function create_serverless_cache (line 27) | async def create_serverless_cache(request: CreateServerlessCacheRequest)... FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/serverless/delete.py function delete_serverless_cache (line 25) | async def delete_serverless_cache( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/serverless/describe.py function describe_serverless_caches (line 25) | async def describe_serverless_caches( FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/serverless/models.py class DataStorageLimits (line 21) | class DataStorageLimits(BaseModel): method validate_unit (line 29) | def validate_unit(cls, v): method minimum_less_than_maximum (line 36) | def minimum_less_than_maximum(cls, v, values): class ECPULimits (line 43) | class ECPULimits(BaseModel): method minimum_less_than_maximum (line 50) | def minimum_less_than_maximum(cls, v, values): class CacheUsageLimits (line 57) | class CacheUsageLimits(BaseModel): class Tag (line 64) | class Tag(BaseModel): class CreateServerlessCacheRequest (line 71) | class CreateServerlessCacheRequest(BaseModel): method validate_snapshot_time (line 108) | def validate_snapshot_time(cls, v): class ModifyServerlessCacheRequest (line 120) | class ModifyServerlessCacheRequest(BaseModel): method validate_snapshot_time (line 147) | def validate_snapshot_time(cls, v): FILE: src/elasticache-mcp-server/awslabs/elasticache_mcp_server/tools/serverless/modify.py function modify_serverless_cache (line 26) | async def modify_serverless_cache(request: ModifyServerlessCacheRequest)... FILE: src/elasticache-mcp-server/tests/test_connection.py function reset_connection (line 11) | def reset_connection(): function test_get_connection_default_settings (line 18) | def test_get_connection_default_settings(): function test_get_connection_custom_settings (line 43) | def test_get_connection_custom_settings(): function test_connection_reuse (line 75) | def test_connection_reuse(): function test_close_connection (line 90) | def test_close_connection(): function test_close_connection_no_client (line 105) | def test_close_connection_no_client(): function test_get_connection_after_close (line 112) | def test_get_connection_after_close(): FILE: src/elasticache-mcp-server/tests/test_decorators.py function test_handle_exceptions (line 43) | async def test_handle_exceptions(test_case): FILE: src/elasticache-mcp-server/tests/test_init.py class TestInit (line 17) | class TestInit: method test_version (line 20) | def test_version(self): method test_module_reload (line 37) | def test_module_reload(self): FILE: src/elasticache-mcp-server/tests/test_main.py class TestMain (line 17) | class TestMain: method test_main_default (line 22) | def test_main_default(self, mock_run): method test_module_execution (line 31) | def test_module_execution(self): FILE: src/elasticache-mcp-server/tests/tools/cc/test_connect.py function test_configure_security_groups_basic (line 29) | async def test_configure_security_groups_basic(): function test_configure_security_groups_existing_rule (line 93) | async def test_configure_security_groups_existing_rule(): function test_configure_security_groups_vpc_mismatch (line 155) | async def test_configure_security_groups_vpc_mismatch(): function test_connect_jump_host_cc_success (line 189) | async def test_connect_jump_host_cc_success(): function test_get_ssh_tunnel_command_cc_success (line 206) | async def test_get_ssh_tunnel_command_cc_success(): function test_get_ssh_tunnel_command_cc_ubuntu (line 268) | async def test_get_ssh_tunnel_command_cc_ubuntu(): function test_create_jump_host_cc_success (line 322) | async def test_create_jump_host_cc_success(): function test_create_jump_host_cc_private_subnet (line 389) | async def test_create_jump_host_cc_private_subnet(): function test_create_jump_host_cc_invalid_key (line 435) | async def test_create_jump_host_cc_invalid_key(): function test_create_jump_host_cc_default_vpc_default_subnet (line 469) | async def test_create_jump_host_cc_default_vpc_default_subnet(): function test_create_jump_host_cc_default_vpc_map_public_ip (line 551) | async def test_create_jump_host_cc_default_vpc_map_public_ip(): function test_create_jump_host_cc_non_default_vpc_private_subnet (line 626) | async def test_create_jump_host_cc_non_default_vpc_private_subnet(): function test_create_jump_host_cc_default_vpc_non_default_subnet (line 688) | async def test_create_jump_host_cc_default_vpc_non_default_subnet(): function test_create_jump_host_cc_auto_select_defaults (line 750) | async def test_create_jump_host_cc_auto_select_defaults(): FILE: src/elasticache-mcp-server/tests/tools/cc/test_connect_additional.py function test_configure_security_groups_no_subnet_group (line 28) | async def test_configure_security_groups_no_subnet_group(): function test_configure_security_groups_no_security_groups (line 53) | async def test_configure_security_groups_no_security_groups(): function test_configure_security_groups_no_cache_nodes (line 84) | async def test_configure_security_groups_no_cache_nodes(): function test_configure_security_groups_instance_not_found (line 114) | async def test_configure_security_groups_instance_not_found(): function test_configure_security_groups_no_instance_security_groups (line 148) | async def test_configure_security_groups_no_instance_security_groups(): function test_connect_jump_host_cc_error (line 193) | async def test_connect_jump_host_cc_error(): function test_get_ssh_tunnel_command_cc_instance_not_found (line 206) | async def test_get_ssh_tunnel_command_cc_instance_not_found(): function test_get_ssh_tunnel_command_cc_no_key_pair (line 230) | async def test_get_ssh_tunnel_command_cc_no_key_pair(): function test_get_ssh_tunnel_command_cc_no_public_dns (line 264) | async def test_get_ssh_tunnel_command_cc_no_public_dns(): function test_get_ssh_tunnel_command_cc_windows_instance (line 299) | async def test_get_ssh_tunnel_command_cc_windows_instance(): function test_get_ssh_tunnel_command_cc_no_cache_nodes (line 335) | async def test_get_ssh_tunnel_command_cc_no_cache_nodes(): function test_create_jump_host_cc_main_route_table (line 381) | async def test_create_jump_host_cc_main_route_table(): FILE: src/elasticache-mcp-server/tests/tools/cc/test_connect_coverage.py function test_create_jump_host_cc_non_default_vpc_missing_params (line 23) | async def test_create_jump_host_cc_non_default_vpc_missing_params(): function test_create_jump_host_cc_auto_select_subnets_with_public_ip (line 73) | async def test_create_jump_host_cc_auto_select_subnets_with_public_ip(): function test_create_jump_host_cc_auto_select_security_groups (line 200) | async def test_create_jump_host_cc_auto_select_security_groups(): function test_create_jump_host_cc_validation_errors (line 298) | async def test_create_jump_host_cc_validation_errors(): function test_create_jump_host_cc_existing_ssh_rule (line 357) | async def test_create_jump_host_cc_existing_ssh_rule(): FILE: src/elasticache-mcp-server/tests/tools/cc/test_connect_coverage_additional.py function test_configure_security_groups_no_clients_provided (line 29) | async def test_configure_security_groups_no_clients_provided(): function test_configure_security_groups_no_cache_security_groups (line 82) | async def test_configure_security_groups_no_cache_security_groups(): function test_configure_security_groups_no_instance_found (line 106) | async def test_configure_security_groups_no_instance_found(): function test_configure_security_groups_vpc_mismatch (line 133) | async def test_configure_security_groups_vpc_mismatch(): function test_configure_security_groups_no_instance_security_groups (line 174) | async def test_configure_security_groups_no_instance_security_groups(): function test_connect_jump_host_cc_readonly_mode (line 212) | async def test_connect_jump_host_cc_readonly_mode(): function test_get_ssh_tunnel_command_cc_no_instance_found (line 221) | async def test_get_ssh_tunnel_command_cc_no_instance_found(): function test_get_ssh_tunnel_command_cc_no_key_name (line 245) | async def test_get_ssh_tunnel_command_cc_no_key_name(): function test_get_ssh_tunnel_command_cc_no_public_dns (line 280) | async def test_get_ssh_tunnel_command_cc_no_public_dns(): function test_get_ssh_tunnel_command_cc_windows_platform (line 315) | async def test_get_ssh_tunnel_command_cc_windows_platform(): function test_get_ssh_tunnel_command_cc_ubuntu_user (line 351) | async def test_get_ssh_tunnel_command_cc_ubuntu_user(): function test_get_ssh_tunnel_command_cc_no_cache_nodes (line 405) | async def test_get_ssh_tunnel_command_cc_no_cache_nodes(): function test_create_jump_host_cc_readonly_mode (line 449) | async def test_create_jump_host_cc_readonly_mode(): function test_create_jump_host_cc_empty_key_name (line 458) | async def test_create_jump_host_cc_empty_key_name(): function test_create_jump_host_cc_key_pair_not_found (line 480) | async def test_create_jump_host_cc_key_pair_not_found(): function test_create_jump_host_cc_vpc_compatibility_error (line 506) | async def test_create_jump_host_cc_vpc_compatibility_error(): function test_create_jump_host_cc_subnet_not_public (line 551) | async def test_create_jump_host_cc_subnet_not_public(): function test_create_jump_host_cc_client_error_invalid_keypair (line 613) | async def test_create_jump_host_cc_client_error_invalid_keypair(): function test_create_jump_host_cc_other_client_error (line 673) | async def test_create_jump_host_cc_other_client_error(): function test_create_jump_host_cc_no_main_route_table (line 733) | async def test_create_jump_host_cc_no_main_route_table(): function test_create_jump_host_cc_general_exception (line 800) | async def test_create_jump_host_cc_general_exception(): FILE: src/elasticache-mcp-server/tests/tools/cc/test_create.py class CreateRequestKwargs (line 26) | class CreateRequestKwargs(TypedDict, total=False): function create_test_request (line 56) | def create_test_request( function test_create_cache_cluster_basic (line 92) | async def test_create_cache_cluster_basic(): function test_create_memcached_cluster (line 111) | async def test_create_memcached_cluster(): function test_create_cache_cluster_with_tags (line 140) | async def test_create_cache_cluster_with_tags(): function test_create_cache_cluster_invalid_tags (line 176) | async def test_create_cache_cluster_invalid_tags(): function test_create_cache_cluster_with_log_delivery (line 198) | async def test_create_cache_cluster_with_log_delivery(): FILE: src/elasticache-mcp-server/tests/tools/cc/test_create_additional.py function create_test_request (line 25) | def create_test_request( function test_readonly_mode (line 38) | async def test_readonly_mode(): function test_create_cache_cluster_all_optional_params (line 49) | async def test_create_cache_cluster_all_optional_params(): function test_create_cache_cluster_with_tags_list (line 120) | async def test_create_cache_cluster_with_tags_list(): function test_create_cache_cluster_with_tags_null_value (line 145) | async def test_create_cache_cluster_with_tags_null_value(): function test_create_cache_cluster_invalid_tag_formats (line 167) | async def test_create_cache_cluster_invalid_tag_formats(): function test_create_cache_cluster_with_shorthand_log_delivery (line 201) | async def test_create_cache_cluster_with_shorthand_log_delivery(): function test_create_cache_cluster_with_invalid_log_delivery (line 247) | async def test_create_cache_cluster_with_invalid_log_delivery(): FILE: src/elasticache-mcp-server/tests/tools/cc/test_delete.py function test_delete_cache_cluster_readonly_mode (line 10) | async def test_delete_cache_cluster_readonly_mode(): function test_delete_cache_cluster_minimal (line 19) | async def test_delete_cache_cluster_minimal(): function test_delete_cache_cluster_with_snapshot (line 37) | async def test_delete_cache_cluster_with_snapshot(): function test_delete_cache_cluster_not_found (line 59) | async def test_delete_cache_cluster_not_found(): FILE: src/elasticache-mcp-server/tests/tools/cc/test_describe.py function test_describe_cache_clusters_basic (line 9) | async def test_describe_cache_clusters_basic(): function test_describe_cache_clusters_with_id (line 29) | async def test_describe_cache_clusters_with_id(): function test_describe_cache_clusters_with_pagination (line 47) | async def test_describe_cache_clusters_with_pagination(): function test_describe_cache_clusters_with_node_info (line 69) | async def test_describe_cache_clusters_with_node_info(): function test_describe_cache_clusters_not_found (line 93) | async def test_describe_cache_clusters_not_found(): FILE: src/elasticache-mcp-server/tests/tools/cc/test_modify.py function test_modify_cache_cluster_readonly_mode (line 14) | async def test_modify_cache_cluster_readonly_mode(): class ModifyRequestKwargs (line 26) | class ModifyRequestKwargs(TypedDict, total=False): function create_test_request (line 52) | def create_test_request( function test_modify_cache_cluster_basic (line 84) | async def test_modify_cache_cluster_basic(): function test_modify_cache_cluster_all_params (line 107) | async def test_modify_cache_cluster_all_params(): function test_modify_cache_cluster_shorthand_configs (line 190) | async def test_modify_cache_cluster_shorthand_configs(): function test_modify_cache_cluster_scale_config_validation (line 222) | async def test_modify_cache_cluster_scale_config_validation(): FILE: src/elasticache-mcp-server/tests/tools/cc/test_parsers.py function test_parse_shorthand_scale_config_basic (line 21) | def test_parse_shorthand_scale_config_basic(): function test_parse_shorthand_scale_config_full (line 30) | def test_parse_shorthand_scale_config_full(): function test_parse_shorthand_scale_config_boolean_values (line 47) | def test_parse_shorthand_scale_config_boolean_values(): function test_parse_shorthand_scale_config_capacity_validation (line 64) | def test_parse_shorthand_scale_config_capacity_validation(): function test_parse_shorthand_scale_config_invalid_format (line 89) | def test_parse_shorthand_scale_config_invalid_format(): function test_parse_shorthand_scale_config_invalid_parameters (line 112) | def test_parse_shorthand_scale_config_invalid_parameters(): function test_parse_shorthand_scale_config_partial (line 125) | def test_parse_shorthand_scale_config_partial(): FILE: src/elasticache-mcp-server/tests/tools/cc/test_processors.py function test_process_scale_config_shorthand (line 21) | def test_process_scale_config_shorthand(): function test_process_scale_config_json (line 30) | def test_process_scale_config_json(): function test_process_scale_config_invalid_type (line 52) | def test_process_scale_config_invalid_type(): function test_process_scale_config_invalid_field_types (line 61) | def test_process_scale_config_invalid_field_types(): function test_process_scale_config_capacity_validation (line 76) | def test_process_scale_config_capacity_validation(): function test_process_scale_config_partial_json (line 119) | def test_process_scale_config_partial_json(): function test_process_scale_config_invalid_shorthand (line 137) | def test_process_scale_config_invalid_shorthand(): FILE: src/elasticache-mcp-server/tests/tools/ce/test_get_cost_and_usage.py function mock_ce_client (line 23) | def mock_ce_client(): class TestGetCostAndUsage (line 33) | class TestGetCostAndUsage: method test_get_cost_and_usage_daily (line 37) | async def test_get_cost_and_usage_daily(self, mock_ce_client): method test_get_cost_and_usage_monthly (line 80) | async def test_get_cost_and_usage_monthly(self, mock_ce_client): method test_get_cost_and_usage_hourly (line 125) | async def test_get_cost_and_usage_hourly(self, mock_ce_client): method test_get_cost_and_usage_invalid_granularity (line 168) | async def test_get_cost_and_usage_invalid_granularity(self, mock_ce_cl... method test_get_cost_and_usage_invalid_time_period (line 185) | async def test_get_cost_and_usage_invalid_time_period(self, mock_ce_cl... method test_get_cost_and_usage_future_date (line 200) | async def test_get_cost_and_usage_future_date(self, mock_ce_client): FILE: src/elasticache-mcp-server/tests/tools/cw/test_get_metric_statistics.py function test_get_metric_statistics_basic (line 23) | async def test_get_metric_statistics_basic(): function test_get_metric_statistics_minimal_params (line 65) | async def test_get_metric_statistics_minimal_params(): function test_get_metric_statistics_with_extended_stats (line 98) | async def test_get_metric_statistics_with_extended_stats(): function test_get_metric_statistics_error (line 131) | async def test_get_metric_statistics_error(): function test_get_metric_statistics_engine_cpu_utilization (line 157) | async def test_get_metric_statistics_engine_cpu_utilization(): FILE: src/elasticache-mcp-server/tests/tools/cwlogs/test_create_log_group.py function test_create_log_group_basic (line 24) | async def test_create_log_group_basic(): function test_create_log_group_with_all_params (line 45) | async def test_create_log_group_with_all_params(): function test_create_log_group_error (line 76) | async def test_create_log_group_error(): FILE: src/elasticache-mcp-server/tests/tools/cwlogs/test_describe_log_groups.py function test_describe_log_groups_basic (line 24) | async def test_describe_log_groups_basic(): function test_describe_log_groups_with_all_params (line 57) | async def test_describe_log_groups_with_all_params(): function test_describe_log_groups_with_pagination (line 106) | async def test_describe_log_groups_with_pagination(): function test_describe_log_groups_error (line 140) | async def test_describe_log_groups_error(): function test_describe_log_groups_with_max_items (line 167) | async def test_describe_log_groups_with_max_items(): function test_describe_log_groups_with_page_size (line 225) | async def test_describe_log_groups_with_page_size(): function test_describe_log_groups_max_items_with_remainder (line 249) | async def test_describe_log_groups_max_items_with_remainder(): FILE: src/elasticache-mcp-server/tests/tools/cwlogs/test_describe_log_streams.py function test_describe_log_streams_with_max_items (line 23) | async def test_describe_log_streams_with_max_items(): function test_describe_log_streams_max_items_exact (line 78) | async def test_describe_log_streams_max_items_exact(): function test_describe_log_streams_max_items_less (line 109) | async def test_describe_log_streams_max_items_less(): function test_describe_log_streams_with_page_size (line 142) | async def test_describe_log_streams_with_page_size(): function test_describe_log_streams_with_starting_token (line 172) | async def test_describe_log_streams_with_starting_token(): function test_describe_log_streams_basic (line 206) | async def test_describe_log_streams_basic(): function test_describe_log_streams_minimal_params (line 253) | async def test_describe_log_streams_minimal_params(): function test_describe_log_streams_with_identifier (line 276) | async def test_describe_log_streams_with_identifier(): function test_describe_log_streams_error (line 299) | async def test_describe_log_streams_error(): FILE: src/elasticache-mcp-server/tests/tools/cwlogs/test_filter_log_events.py function mock_logs_client (line 25) | def mock_logs_client(): function test_filter_log_events_basic (line 34) | async def test_filter_log_events_basic(mock_logs_client): function test_filter_log_events_with_all_params (line 82) | async def test_filter_log_events_with_all_params(mock_logs_client): function test_filter_log_events_error (line 127) | async def test_filter_log_events_error(mock_logs_client): function test_filter_log_events_pagination (line 143) | async def test_filter_log_events_pagination(mock_logs_client): FILE: src/elasticache-mcp-server/tests/tools/cwlogs/test_get_log_events.py function mock_logs_client (line 25) | def mock_logs_client(): function test_get_log_events_basic (line 34) | async def test_get_log_events_basic(mock_logs_client): function test_get_log_events_with_all_params (line 72) | async def test_get_log_events_with_all_params(mock_logs_client): function test_get_log_events_error (line 112) | async def test_get_log_events_error(mock_logs_client): FILE: src/elasticache-mcp-server/tests/tools/firehose/test_list_delivery_streams.py function test_list_delivery_streams_basic (line 25) | async def test_list_delivery_streams_basic(): function test_list_delivery_streams_with_params (line 49) | async def test_list_delivery_streams_with_params(): function test_list_delivery_streams_empty (line 81) | async def test_list_delivery_streams_empty(): function test_list_delivery_streams_partial_params (line 105) | async def test_list_delivery_streams_partial_params(): function test_list_delivery_streams_error (line 132) | async def test_list_delivery_streams_error(): function test_list_delivery_streams_missing_fields (line 151) | async def test_list_delivery_streams_missing_fields(): FILE: src/elasticache-mcp-server/tests/tools/misc/test_batch_apply_update_action.py function test_batch_apply_update_action_replication_groups (line 11) | async def test_batch_apply_update_action_replication_groups(): function test_batch_apply_update_action_cache_clusters (line 38) | async def test_batch_apply_update_action_cache_clusters(): function test_batch_apply_update_action_invalid_parameter (line 65) | async def test_batch_apply_update_action_invalid_parameter(): function test_batch_apply_update_action_missing_targets (line 87) | async def test_batch_apply_update_action_missing_targets(): FILE: src/elasticache-mcp-server/tests/tools/misc/test_batch_stop_update_action.py function test_batch_stop_update_action_replication_groups (line 11) | async def test_batch_stop_update_action_replication_groups(): function test_batch_stop_update_action_cache_clusters (line 38) | async def test_batch_stop_update_action_cache_clusters(): function test_batch_stop_update_action_invalid_parameter (line 65) | async def test_batch_stop_update_action_invalid_parameter(): function test_batch_stop_update_action_missing_targets (line 87) | async def test_batch_stop_update_action_missing_targets(): FILE: src/elasticache-mcp-server/tests/tools/misc/test_describe_cache_engine_versions.py function test_describe_cache_engine_versions_basic (line 11) | async def test_describe_cache_engine_versions_basic(): function test_describe_cache_engine_versions_redis (line 40) | async def test_describe_cache_engine_versions_redis(): function test_describe_cache_engine_versions_memcached (line 60) | async def test_describe_cache_engine_versions_memcached(): function test_describe_cache_engine_versions_valkey (line 84) | async def test_describe_cache_engine_versions_valkey(): function test_describe_cache_engine_versions_with_pagination (line 104) | async def test_describe_cache_engine_versions_with_pagination(): function test_describe_cache_engine_versions_with_parameter_group_family (line 128) | async def test_describe_cache_engine_versions_with_parameter_group_famil... function test_describe_cache_engine_versions_with_default_only (line 150) | async def test_describe_cache_engine_versions_with_default_only(): function test_describe_cache_engine_versions_invalid_parameter (line 181) | async def test_describe_cache_engine_versions_invalid_parameter(exceptio... function test_describe_cache_engine_versions_invalid_parameter_combination (line 205) | async def test_describe_cache_engine_versions_invalid_parameter_combinat... FILE: src/elasticache-mcp-server/tests/tools/misc/test_describe_engine_default_parameters.py function test_describe_engine_default_parameters_basic (line 11) | async def test_describe_engine_default_parameters_basic(): function test_describe_engine_default_parameters_with_pagination (line 48) | async def test_describe_engine_default_parameters_with_pagination(): function test_describe_engine_default_parameters_invalid_parameter (line 90) | async def test_describe_engine_default_parameters_invalid_parameter(): function test_describe_engine_default_parameters_invalid_parameter_combination (line 112) | async def test_describe_engine_default_parameters_invalid_parameter_comb... FILE: src/elasticache-mcp-server/tests/tools/misc/test_describe_events.py function test_describe_events_basic (line 10) | async def test_describe_events_basic(): function test_describe_events_with_source_type (line 43) | async def test_describe_events_with_source_type(): function test_describe_events_with_source_identifier (line 67) | async def test_describe_events_with_source_identifier(): function test_describe_events_with_time_range (line 91) | async def test_describe_events_with_time_range(): function test_describe_events_with_duration (line 118) | async def test_describe_events_with_duration(): function test_describe_events_with_pagination (line 142) | async def test_describe_events_with_pagination(): function test_describe_events_invalid_parameter (line 168) | async def test_describe_events_invalid_parameter(): function test_describe_events_invalid_parameter_combination (line 187) | async def test_describe_events_invalid_parameter_combination(): FILE: src/elasticache-mcp-server/tests/tools/misc/test_describe_service_updates.py function test_describe_service_updates_basic (line 11) | async def test_describe_service_updates_basic(): function test_describe_service_updates_with_name (line 42) | async def test_describe_service_updates_with_name(): function test_describe_service_updates_with_status (line 65) | async def test_describe_service_updates_with_status(): function test_describe_service_updates_with_pagination (line 90) | async def test_describe_service_updates_with_pagination(): function test_describe_service_updates_invalid_parameter (line 119) | async def test_describe_service_updates_invalid_parameter(): function test_describe_service_updates_invalid_parameter_combination (line 138) | async def test_describe_service_updates_invalid_parameter_combination(): function test_describe_service_updates_empty_response (line 159) | async def test_describe_service_updates_empty_response(): function test_describe_service_updates_multiple_filters (line 175) | async def test_describe_service_updates_multiple_filters(): function test_describe_service_updates_pagination_edge_cases (line 204) | async def test_describe_service_updates_pagination_edge_cases(): FILE: src/elasticache-mcp-server/tests/tools/rg/test_complete_migration.py function test_complete_migration_readonly_mode (line 25) | async def test_complete_migration_readonly_mode(): function create_test_request (line 34) | def create_test_request(**kwargs) -> CompleteMigrationRequest: function mock_elasticache_client (line 45) | def mock_elasticache_client(): class TestCompleteMigration (line 55) | class TestCompleteMigration: method test_complete_migration_basic (line 59) | async def test_complete_migration_basic(self, mock_elasticache_client): method test_complete_migration_with_force (line 78) | async def test_complete_migration_with_force(self, mock_elasticache_cl... method test_complete_migration_aws_exceptions (line 113) | async def test_complete_migration_aws_exceptions(self, mock_elasticach... FILE: src/elasticache-mcp-server/tests/tools/rg/test_connect.py function test_configure_security_groups_success (line 29) | async def test_configure_security_groups_success(): function test_configure_security_groups_vpc_mismatch (line 105) | async def test_configure_security_groups_vpc_mismatch(): function test_connect_jump_host_rg_success (line 140) | async def test_connect_jump_host_rg_success(): function test_get_ssh_tunnel_command_rg_success (line 172) | async def test_get_ssh_tunnel_command_rg_success(): function test_create_jump_host_rg_success (line 230) | async def test_create_jump_host_rg_success(): function test_create_jump_host_rg_private_subnet (line 304) | async def test_create_jump_host_rg_private_subnet(): function test_create_jump_host_rg_invalid_key (line 393) | async def test_create_jump_host_rg_invalid_key(): function test_create_jump_host_rg_default_vpc_default_subnet (line 474) | async def test_create_jump_host_rg_default_vpc_default_subnet(): function test_create_jump_host_rg_default_vpc_map_public_ip (line 547) | async def test_create_jump_host_rg_default_vpc_map_public_ip(): FILE: src/elasticache-mcp-server/tests/tools/rg/test_connect_additional.py function test_configure_security_groups_no_cache_clusters (line 28) | async def test_configure_security_groups_no_cache_clusters(): function test_configure_security_groups_no_subnet_group (line 54) | async def test_configure_security_groups_no_subnet_group(): function test_configure_security_groups_subnet_group_error (line 88) | async def test_configure_security_groups_subnet_group_error(): function test_configure_security_groups_instance_not_found (line 123) | async def test_configure_security_groups_instance_not_found(): function test_configure_security_groups_no_cache_security_groups (line 163) | async def test_configure_security_groups_no_cache_security_groups(): function test_configure_security_groups_no_instance_security_groups (line 215) | async def test_configure_security_groups_no_instance_security_groups(): function test_connect_jump_host_rg_error (line 268) | async def test_connect_jump_host_rg_error(): function test_get_ssh_tunnel_command_rg_instance_not_found (line 281) | async def test_get_ssh_tunnel_command_rg_instance_not_found(): function test_get_ssh_tunnel_command_rg_no_key_pair (line 305) | async def test_get_ssh_tunnel_command_rg_no_key_pair(): function test_get_ssh_tunnel_command_rg_no_public_dns (line 339) | async def test_get_ssh_tunnel_command_rg_no_public_dns(): function test_get_ssh_tunnel_command_rg_windows_instance (line 374) | async def test_get_ssh_tunnel_command_rg_windows_instance(): function test_get_ssh_tunnel_command_rg_no_configuration_endpoint (line 410) | async def test_get_ssh_tunnel_command_rg_no_configuration_endpoint(): function test_create_jump_host_rg_vpc_mismatch (line 456) | async def test_create_jump_host_rg_vpc_mismatch(): function test_create_jump_host_rg_main_route_table (line 501) | async def test_create_jump_host_rg_main_route_table(): function test_create_jump_host_rg_existing_ssh_rule (line 565) | async def test_create_jump_host_rg_existing_ssh_rule(): function test_create_jump_host_rg_no_member_clusters (line 640) | async def test_create_jump_host_rg_no_member_clusters(): function test_get_ssh_tunnel_command_rg_no_member_clusters (line 671) | async def test_get_ssh_tunnel_command_rg_no_member_clusters(): function test_connect_jump_host_rg_no_member_clusters (line 721) | async def test_connect_jump_host_rg_no_member_clusters(): FILE: src/elasticache-mcp-server/tests/tools/rg/test_connect_coverage_additional.py function test_configure_security_groups_no_clients_provided (line 28) | async def test_configure_security_groups_no_clients_provided(): function test_create_jump_host_rg_no_main_route_table (line 93) | async def test_create_jump_host_rg_no_main_route_table(): function test_create_jump_host_rg_igw_route_found (line 157) | async def test_create_jump_host_rg_igw_route_found(): function test_create_jump_host_rg_ssh_rule_already_exists (line 227) | async def test_create_jump_host_rg_ssh_rule_already_exists(): function test_connect_jump_host_rg_readonly_mode (line 310) | async def test_connect_jump_host_rg_readonly_mode(): function test_get_ssh_tunnel_command_rg_no_configuration_endpoint (line 319) | async def test_get_ssh_tunnel_command_rg_no_configuration_endpoint(): function test_create_jump_host_rg_readonly_mode (line 365) | async def test_create_jump_host_rg_readonly_mode(): FILE: src/elasticache-mcp-server/tests/tools/rg/test_connect_optional_fields.py function test_create_jump_host_rg_auto_select_subnet_default_vpc (line 23) | async def test_create_jump_host_rg_auto_select_subnet_default_vpc(): function test_create_jump_host_rg_auto_select_fallback_public_subnet (line 112) | async def test_create_jump_host_rg_auto_select_fallback_public_subnet(): function test_create_jump_host_rg_non_default_vpc_requires_params (line 197) | async def test_create_jump_host_rg_non_default_vpc_requires_params(): function test_create_jump_host_rg_non_default_vpc_requires_security_group (line 246) | async def test_create_jump_host_rg_non_default_vpc_requires_security_gro... function test_create_jump_host_rg_custom_instance_type (line 296) | async def test_create_jump_host_rg_custom_instance_type(): function test_create_jump_host_rg_default_instance_type (line 364) | async def test_create_jump_host_rg_default_instance_type(): function test_create_jump_host_rg_all_optional_params_provided (line 432) | async def test_create_jump_host_rg_all_optional_params_provided(): function test_create_jump_host_rg_main_route_table_check (line 505) | async def test_create_jump_host_rg_main_route_table_check(): FILE: src/elasticache-mcp-server/tests/tools/rg/test_connect_partial_coverage.py function test_create_jump_host_rg_auto_select_subnet_with_map_public_ip (line 25) | async def test_create_jump_host_rg_auto_select_subnet_with_map_public_ip(): function test_create_jump_host_rg_auto_select_security_group (line 131) | async def test_create_jump_host_rg_auto_select_security_group(): function test_create_jump_host_rg_main_route_table_igw_check (line 227) | async def test_create_jump_host_rg_main_route_table_igw_check(): function test_create_jump_host_rg_main_route_table_break_on_igw_found (line 342) | async def test_create_jump_host_rg_main_route_table_break_on_igw_found(): FILE: src/elasticache-mcp-server/tests/tools/rg/test_create.py function create_test_request (line 28) | def create_test_request(**kwargs) -> CreateReplicationGroupRequest: function mock_elasticache_client (line 66) | def mock_elasticache_client(): class TestCreateReplicationGroup (line 76) | class TestCreateReplicationGroup: method test_create_basic_replication_group (line 80) | async def test_create_basic_replication_group(self, mock_elasticache_c... method test_create_replication_group_with_all_params (line 98) | async def test_create_replication_group_with_all_params(self, mock_ela... method test_create_replication_group_with_shorthand_nodegroups (line 215) | async def test_create_replication_group_with_shorthand_nodegroups( method test_create_replication_group_with_multiple_shorthand_nodegroups (line 246) | async def test_create_replication_group_with_multiple_shorthand_nodegr... method test_create_replication_group_with_invalid_shorthand_nodegroups (line 278) | async def test_create_replication_group_with_invalid_shorthand_nodegro... method test_create_replication_group_with_json_nodegroups (line 332) | async def test_create_replication_group_with_json_nodegroups(self, moc... method test_create_replication_group_with_invalid_json_nodegroups (line 369) | async def test_create_replication_group_with_invalid_json_nodegroups( method test_create_replication_group_aws_exceptions (line 449) | async def test_create_replication_group_aws_exceptions(self, mock_elas... FILE: src/elasticache-mcp-server/tests/tools/rg/test_delete.py function test_delete_replication_group_readonly_mode (line 10) | async def test_delete_replication_group_readonly_mode(): function mock_elasticache_client (line 19) | def mock_elasticache_client(): class TestDeleteReplicationGroup (line 29) | class TestDeleteReplicationGroup: method test_delete_basic_replication_group (line 33) | async def test_delete_basic_replication_group(self, mock_elasticache_c... method test_delete_replication_group_with_all_params (line 49) | async def test_delete_replication_group_with_all_params(self, mock_ela... method test_delete_replication_group_not_found (line 71) | async def test_delete_replication_group_not_found(self, mock_elasticac... FILE: src/elasticache-mcp-server/tests/tools/rg/test_describe.py function test_describe_replication_groups_basic (line 9) | async def test_describe_replication_groups_basic(): function test_describe_replication_groups_with_id (line 32) | async def test_describe_replication_groups_with_id(): function test_describe_replication_groups_with_pagination (line 55) | async def test_describe_replication_groups_with_pagination(): function test_describe_replication_groups_not_found (line 80) | async def test_describe_replication_groups_not_found(): function test_describe_replication_groups_invalid_parameter (line 103) | async def test_describe_replication_groups_invalid_parameter(): FILE: src/elasticache-mcp-server/tests/tools/rg/test_modify.py function test_modify_replication_group_readonly_mode (line 14) | async def test_modify_replication_group_readonly_mode(): function test_modify_replication_group_shard_configuration_readonly_mode (line 27) | async def test_modify_replication_group_shard_configuration_readonly_mod... function test_modify_replication_group_basic (line 39) | async def test_modify_replication_group_basic(): function test_modify_replication_group_all_params (line 66) | async def test_modify_replication_group_all_params(): function test_modify_replication_group_shorthand_configs (line 142) | async def test_modify_replication_group_shorthand_configs(): function test_modify_replication_group_node_groups (line 169) | async def test_modify_replication_group_node_groups(): function test_modify_replication_group_user_groups (line 207) | async def test_modify_replication_group_user_groups(): function test_modify_replication_group_none_values (line 243) | async def test_modify_replication_group_none_values(): function test_modify_replication_group_shard_configuration_basic (line 271) | async def test_modify_replication_group_shard_configuration_basic(): function test_modify_replication_group_shard_configuration_shorthand (line 291) | async def test_modify_replication_group_shard_configuration_shorthand(): function test_modify_replication_group_shard_configuration_multiple (line 306) | async def test_modify_replication_group_shard_configuration_multiple(): function test_modify_replication_group_shard_configuration_multiple_shorthand (line 333) | async def test_modify_replication_group_shard_configuration_multiple_sho... function test_modify_replication_group_shard_configuration_invalid_params (line 350) | async def test_modify_replication_group_shard_configuration_invalid_para... function test_modify_replication_group_invalid_params (line 393) | async def test_modify_replication_group_invalid_params(): FILE: src/elasticache-mcp-server/tests/tools/rg/test_parsers.py class TestParseShorthandNodegroup (line 10) | class TestParseShorthandNodegroup: method test_parse_basic_nodegroup (line 13) | def test_parse_basic_nodegroup(self): method test_parse_full_nodegroup (line 21) | def test_parse_full_nodegroup(self): method test_empty_nodegroup (line 39) | def test_empty_nodegroup(self): method test_missing_required_field (line 44) | def test_missing_required_field(self): method test_invalid_format (line 49) | def test_invalid_format(self): method test_empty_key_value (line 54) | def test_empty_key_value(self): method test_invalid_parameter (line 59) | def test_invalid_parameter(self): method test_invalid_replica_count (line 64) | def test_invalid_replica_count(self): method test_nodegroup_with_whitespace (line 69) | def test_nodegroup_with_whitespace(self): class TestParseShorthandLogDelivery (line 77) | class TestParseShorthandLogDelivery: method test_parse_basic_log_delivery (line 80) | def test_parse_basic_log_delivery(self): method test_parse_kinesis_log_delivery (line 96) | def test_parse_kinesis_log_delivery(self): method test_empty_log_delivery (line 112) | def test_empty_log_delivery(self): method test_missing_required_fields (line 117) | def test_missing_required_fields(self): method test_invalid_log_type (line 122) | def test_invalid_log_type(self): method test_invalid_destination_type (line 131) | def test_invalid_destination_type(self): method test_invalid_log_format (line 140) | def test_invalid_log_format(self): method test_invalid_enabled (line 149) | def test_invalid_enabled(self): method test_invalid_destination_details_json (line 158) | def test_invalid_destination_details_json(self): FILE: src/elasticache-mcp-server/tests/tools/rg/test_processors.py class TestProcessLogDeliveryConfigurations (line 10) | class TestProcessLogDeliveryConfigurations: method test_process_shorthand_log_delivery (line 13) | def test_process_shorthand_log_delivery(self): method test_process_multiple_shorthand_log_delivery (line 32) | def test_process_multiple_shorthand_log_delivery(self): method test_process_json_log_delivery (line 63) | def test_process_json_log_delivery(self): method test_process_invalid_json_log_delivery (line 82) | def test_process_invalid_json_log_delivery(self): method test_process_invalid_shorthand_log_delivery (line 89) | def test_process_invalid_shorthand_log_delivery(self): method test_process_invalid_log_delivery_type (line 94) | def test_process_invalid_log_delivery_type(self): method test_process_empty_list_log_delivery (line 101) | def test_process_empty_list_log_delivery(self): class TestProcessNodegroupConfiguration (line 107) | class TestProcessNodegroupConfiguration: method test_process_shorthand_nodegroup (line 110) | def test_process_shorthand_nodegroup(self): method test_process_multiple_shorthand_nodegroups (line 121) | def test_process_multiple_shorthand_nodegroups(self): method test_process_json_nodegroup (line 140) | def test_process_json_nodegroup(self): method test_process_json_nodegroup_with_string_lists (line 161) | def test_process_json_nodegroup_with_string_lists(self): method test_process_invalid_json_nodegroup (line 172) | def test_process_invalid_json_nodegroup(self): method test_process_invalid_shorthand_nodegroup (line 177) | def test_process_invalid_shorthand_nodegroup(self): method test_process_invalid_nodegroup_type (line 182) | def test_process_invalid_nodegroup_type(self): method test_process_json_nodegroup_missing_required (line 189) | def test_process_json_nodegroup_missing_required(self): method test_process_json_nodegroup_invalid_replica_count (line 194) | def test_process_json_nodegroup_invalid_replica_count(self): method test_process_json_nodegroup_invalid_zones (line 199) | def test_process_json_nodegroup_invalid_zones(self): method test_process_nodegroup_all_fields (line 206) | def test_process_nodegroup_all_fields(self): method test_process_empty_list_nodegroup (line 223) | def test_process_empty_list_nodegroup(self): method test_process_nodegroup_minimal_fields (line 228) | def test_process_nodegroup_minimal_fields(self): FILE: src/elasticache-mcp-server/tests/tools/rg/test_start_migration.py function create_test_request (line 26) | def create_test_request(**kwargs) -> StartMigrationRequest: function mock_elasticache_client (line 37) | def mock_elasticache_client(): class TestStartMigration (line 47) | class TestStartMigration: method test_start_migration_basic (line 51) | async def test_start_migration_basic(self, mock_elasticache_client): method test_start_migration_with_shorthand_endpoint (line 71) | async def test_start_migration_with_shorthand_endpoint(self, mock_elas... method test_start_migration_with_invalid_shorthand_endpoint (line 94) | async def test_start_migration_with_invalid_shorthand_endpoint(self, m... method test_start_migration_with_multiple_endpoints (line 151) | async def test_start_migration_with_multiple_endpoints(self, mock_elas... method test_start_migration_with_empty_endpoints (line 180) | async def test_start_migration_with_empty_endpoints(self, mock_elastic... method test_start_migration_aws_exceptions (line 196) | async def test_start_migration_aws_exceptions(self, mock_elasticache_c... FILE: src/elasticache-mcp-server/tests/tools/rg/test_test_migration.py function create_test_request (line 26) | def create_test_request(**kwargs) -> MigrationTestRequest: function mock_elasticache_client (line 37) | def mock_elasticache_client(): class TestTestMigration (line 47) | class TestTestMigration: method test_test_migration_basic (line 51) | async def test_test_migration_basic(self, mock_elasticache_client): method test_test_migration_with_shorthand_endpoint (line 71) | async def test_test_migration_with_shorthand_endpoint(self, mock_elast... method test_test_migration_with_invalid_shorthand_endpoint (line 94) | async def test_test_migration_with_invalid_shorthand_endpoint(self, mo... method test_test_migration_with_multiple_endpoints (line 151) | async def test_test_migration_with_multiple_endpoints(self, mock_elast... method test_test_migration_aws_exceptions (line 172) | async def test_test_migration_aws_exceptions(self, mock_elasticache_cl... FILE: src/elasticache-mcp-server/tests/tools/serverless/test_connect.py function test_configure_security_groups_basic (line 29) | async def test_configure_security_groups_basic(): function test_configure_security_groups_existing_rule (line 93) | async def test_configure_security_groups_existing_rule(): function test_configure_security_groups_vpc_mismatch (line 155) | async def test_configure_security_groups_vpc_mismatch(): function test_connect_jump_host_serverless_success (line 189) | async def test_connect_jump_host_serverless_success(): function test_get_ssh_tunnel_command_serverless_success (line 206) | async def test_get_ssh_tunnel_command_serverless_success(): function test_get_ssh_tunnel_command_serverless_ubuntu (line 265) | async def test_get_ssh_tunnel_command_serverless_ubuntu(): function test_create_jump_host_serverless_success (line 316) | async def test_create_jump_host_serverless_success(): function test_create_jump_host_serverless_private_subnet (line 385) | async def test_create_jump_host_serverless_private_subnet(): function test_configure_security_groups_memcached_port (line 433) | async def test_configure_security_groups_memcached_port(): function test_configure_security_groups_with_endpoint_port (line 497) | async def test_configure_security_groups_with_endpoint_port(): function test_get_ssh_tunnel_command_serverless_memcached (line 565) | async def test_get_ssh_tunnel_command_serverless_memcached(): function test_create_jump_host_serverless_invalid_key (line 619) | async def test_create_jump_host_serverless_invalid_key(): function test_create_jump_host_serverless_default_vpc_default_subnet (line 653) | async def test_create_jump_host_serverless_default_vpc_default_subnet(): function test_create_jump_host_serverless_default_vpc_map_public_ip (line 728) | async def test_create_jump_host_serverless_default_vpc_map_public_ip(): FILE: src/elasticache-mcp-server/tests/tools/serverless/test_connect_additional.py function test_configure_security_groups_no_security_groups (line 29) | async def test_configure_security_groups_no_security_groups(): function test_configure_security_groups_instance_not_found (line 60) | async def test_configure_security_groups_instance_not_found(): function test_configure_security_groups_no_instance_security_groups (line 94) | async def test_configure_security_groups_no_instance_security_groups(): function test_connect_jump_host_serverless_error (line 139) | async def test_connect_jump_host_serverless_error(): function test_get_ssh_tunnel_command_serverless_instance_not_found (line 152) | async def test_get_ssh_tunnel_command_serverless_instance_not_found(): function test_get_ssh_tunnel_command_serverless_no_key_pair (line 176) | async def test_get_ssh_tunnel_command_serverless_no_key_pair(): function test_get_ssh_tunnel_command_serverless_no_public_dns (line 210) | async def test_get_ssh_tunnel_command_serverless_no_public_dns(): function test_get_ssh_tunnel_command_serverless_windows_instance (line 245) | async def test_get_ssh_tunnel_command_serverless_windows_instance(): function test_create_jump_host_serverless_vpc_mismatch (line 281) | async def test_create_jump_host_serverless_vpc_mismatch(): function test_create_jump_host_serverless_main_route_table (line 323) | async def test_create_jump_host_serverless_main_route_table(): function test_configure_security_groups_no_subnet_ids (line 370) | async def test_configure_security_groups_no_subnet_ids(): function test_create_jump_host_serverless_readonly_mode (line 398) | async def test_create_jump_host_serverless_readonly_mode(): function test_connect_jump_host_serverless_readonly_mode (line 408) | async def test_connect_jump_host_serverless_readonly_mode(): function test_create_jump_host_serverless_invalid_key_pair (line 418) | async def test_create_jump_host_serverless_invalid_key_pair(): function test_create_jump_host_serverless_client_error (line 444) | async def test_create_jump_host_serverless_client_error(): function test_create_jump_host_serverless_missing_key_name (line 474) | async def test_create_jump_host_serverless_missing_key_name(): function test_create_jump_host_serverless_existing_ssh_rule (line 495) | async def test_create_jump_host_serverless_existing_ssh_rule(): function test_create_jump_host_serverless_no_security_groups (line 565) | async def test_create_jump_host_serverless_no_security_groups(): function test_create_jump_host_serverless_no_subnet_ids (line 602) | async def test_create_jump_host_serverless_no_subnet_ids(): function test_connect_jump_host_serverless_no_security_groups (line 639) | async def test_connect_jump_host_serverless_no_security_groups(): function test_connect_jump_host_serverless_no_subnet_ids (line 677) | async def test_connect_jump_host_serverless_no_subnet_ids(): FILE: src/elasticache-mcp-server/tests/tools/serverless/test_connect_coverage_additional.py function test_configure_security_groups_no_clients_provided (line 28) | async def test_configure_security_groups_no_clients_provided(): function test_configure_security_groups_memcached_engine (line 81) | async def test_configure_security_groups_memcached_engine(): function test_configure_security_groups_redis_default_port (line 125) | async def test_configure_security_groups_redis_default_port(): function test_create_jump_host_serverless_no_main_route_table (line 169) | async def test_create_jump_host_serverless_no_main_route_table(): function test_connect_jump_host_serverless_readonly_mode (line 242) | async def test_connect_jump_host_serverless_readonly_mode(): function test_get_ssh_tunnel_command_serverless_memcached_default_port (line 251) | async def test_get_ssh_tunnel_command_serverless_memcached_default_port(): function test_get_ssh_tunnel_command_serverless_redis_default_port (line 303) | async def test_get_ssh_tunnel_command_serverless_redis_default_port(): function test_create_jump_host_serverless_readonly_mode (line 355) | async def test_create_jump_host_serverless_readonly_mode(): FILE: src/elasticache-mcp-server/tests/tools/serverless/test_connect_optional_fields.py function test_create_jump_host_serverless_auto_select_subnet_default_vpc (line 23) | async def test_create_jump_host_serverless_auto_select_subnet_default_vp... function test_create_jump_host_serverless_auto_select_fallback_public_subnet (line 109) | async def test_create_jump_host_serverless_auto_select_fallback_public_s... function test_create_jump_host_serverless_non_default_vpc_requires_params (line 191) | async def test_create_jump_host_serverless_non_default_vpc_requires_para... function test_create_jump_host_serverless_non_default_vpc_requires_security_group (line 239) | async def test_create_jump_host_serverless_non_default_vpc_requires_secu... function test_create_jump_host_serverless_custom_instance_type (line 288) | async def test_create_jump_host_serverless_custom_instance_type(): function test_create_jump_host_serverless_default_instance_type (line 352) | async def test_create_jump_host_serverless_default_instance_type(): function test_create_jump_host_serverless_all_optional_params_provided (line 416) | async def test_create_jump_host_serverless_all_optional_params_provided(): FILE: src/elasticache-mcp-server/tests/tools/serverless/test_create.py function test_create_serverless_cache_basic (line 16) | async def test_create_serverless_cache_basic(): function test_create_serverless_cache_all_params (line 56) | async def test_create_serverless_cache_all_params(): function test_create_serverless_cache_exceptions (line 161) | async def test_create_serverless_cache_exceptions(exception_class, error... FILE: src/elasticache-mcp-server/tests/tools/serverless/test_delete.py function test_delete_serverless_cache_basic (line 9) | async def test_delete_serverless_cache_basic(): function test_delete_serverless_cache_with_final_snapshot (line 33) | async def test_delete_serverless_cache_with_final_snapshot(): function test_delete_serverless_cache_exceptions (line 70) | async def test_delete_serverless_cache_exceptions(exception_class, error... FILE: src/elasticache-mcp-server/tests/tools/serverless/test_describe.py function test_describe_serverless_caches_basic (line 9) | async def test_describe_serverless_caches_basic(): function test_describe_serverless_caches_with_name (line 36) | async def test_describe_serverless_caches_with_name(): function test_describe_serverless_caches_with_pagination (line 62) | async def test_describe_serverless_caches_with_pagination(): function test_describe_serverless_caches_with_starting_token (line 92) | async def test_describe_serverless_caches_with_starting_token(): function test_describe_serverless_caches_with_page_size (line 120) | async def test_describe_serverless_caches_with_page_size(): function test_describe_serverless_caches_not_found (line 144) | async def test_describe_serverless_caches_not_found(): function test_describe_serverless_caches_invalid_parameter (line 173) | async def test_describe_serverless_caches_invalid_parameter(): FILE: src/elasticache-mcp-server/tests/tools/serverless/test_modify.py function test_modify_serverless_cache_basic (line 15) | async def test_modify_serverless_cache_basic(): function test_modify_serverless_cache_all_params (line 50) | async def test_modify_serverless_cache_all_params(): function test_modify_serverless_cache_none_values (line 104) | async def test_modify_serverless_cache_none_values(): function test_modify_serverless_cache_exceptions (line 149) | async def test_modify_serverless_cache_exceptions(): FILE: src/finch-mcp-server/awslabs/finch_mcp_server/models.py class Result (line 24) | class Result(BaseModel): FILE: src/finch-mcp-server/awslabs/finch_mcp_server/server.py function get_default_log_path (line 54) | def get_default_log_path(): function configure_logging (line 78) | def configure_logging(server_name: str = 'finch-mcp-server'): function sensitive_data_filter (line 140) | def sensitive_data_filter(record): function ensure_vm_running (line 232) | def ensure_vm_running() -> Dict[str, Any]: function finch_build_container_image (line 278) | async def finch_build_container_image( function finch_push_image (line 362) | async def finch_push_image( function set_enable_aws_resource_write (line 429) | def set_enable_aws_resource_write(enabled: bool): function finch_create_ecr_repo (line 445) | async def finch_create_ecr_repo( function main (line 498) | def main(enable_aws_resource_write: bool = False): FILE: src/finch-mcp-server/awslabs/finch_mcp_server/utils/build.py function contains_ecr_reference (line 32) | def contains_ecr_reference(dockerfile_path: str) -> bool: function build_image (line 58) | def build_image( FILE: src/finch-mcp-server/awslabs/finch_mcp_server/utils/common.py function get_dangerous_patterns (line 33) | def get_dangerous_patterns() -> List[str]: function execute_command (line 94) | def execute_command(command: list, env=None) -> subprocess.CompletedProc... function format_result (line 161) | def format_result(status: str, message: str) -> Dict[str, Any]: FILE: src/finch-mcp-server/awslabs/finch_mcp_server/utils/ecr.py function create_ecr_repository (line 37) | def create_ecr_repository( FILE: src/finch-mcp-server/awslabs/finch_mcp_server/utils/push.py function is_ecr_repository (line 31) | def is_ecr_repository(repository: str) -> bool: function get_image_short_hash (line 53) | def get_image_short_hash(image: str) -> tuple[Dict[str, str], str]: function push_image (line 93) | def push_image(image: str) -> Dict[str, str]: FILE: src/finch-mcp-server/awslabs/finch_mcp_server/utils/vm.py function get_vm_status (line 43) | def get_vm_status() -> subprocess.CompletedProcess: function is_vm_nonexistent (line 60) | def is_vm_nonexistent(status_result: subprocess.CompletedProcess) -> bool: function is_vm_stopped (line 79) | def is_vm_stopped(status_result: subprocess.CompletedProcess) -> bool: function is_vm_running (line 95) | def is_vm_running(status_result: subprocess.CompletedProcess) -> bool: function initialize_vm (line 111) | def initialize_vm() -> Dict[str, str]: function start_stopped_vm (line 136) | def start_stopped_vm() -> Dict[str, str]: function stop_vm (line 163) | def stop_vm(force: bool = False) -> Dict[str, str]: function remove_vm (line 196) | def remove_vm(force: bool = False) -> Dict[str, str]: function restart_running_vm (line 229) | def restart_running_vm() -> Dict[str, str]: function check_finch_installation (line 257) | def check_finch_installation() -> Dict[str, str]: function configure_ecr (line 279) | def configure_ecr() -> tuple[Dict[str, str], bool]: function validate_vm_state (line 375) | def validate_vm_state( FILE: src/finch-mcp-server/tests/test_cli_flags.py function temp_log_file (line 13) | def temp_log_file(): function create_test_path (line 24) | def create_test_path(*parts): class TestArgumentParsing (line 29) | class TestArgumentParsing: method test_default_arguments (line 32) | def test_default_arguments(self): method test_enable_aws_resource_write_flag (line 66) | def test_enable_aws_resource_write_flag(self): method test_log_file_flag (line 79) | def test_log_file_flag(self): method test_disable_file_logging_flag (line 97) | def test_disable_file_logging_flag(self): method test_combined_flags (line 110) | def test_combined_flags(self, temp_log_file): method test_flag_order_independence (line 125) | def test_flag_order_independence(self): class TestEnvironmentVariableHandling (line 146) | class TestEnvironmentVariableHandling: method setup_method (line 149) | def setup_method(self): method test_log_file_sets_environment_variable (line 156) | def test_log_file_sets_environment_variable(self): method test_disable_file_logging_sets_environment_variable (line 165) | def test_disable_file_logging_sets_environment_variable(self): method test_environment_variables_not_set_by_default (line 172) | def test_environment_variables_not_set_by_default(self): method test_log_file_environment_variable_precedence (line 178) | def test_log_file_environment_variable_precedence(self): method test_disable_file_logging_environment_variable_precedence (line 190) | def test_disable_file_logging_environment_variable_precedence(self): class TestMainFunctionBehavior (line 201) | class TestMainFunctionBehavior: method test_main_with_default_settings (line 206) | def test_main_with_default_settings(self, mock_logger, mock_mcp): method test_main_with_aws_resource_write_enabled (line 218) | def test_main_with_aws_resource_write_enabled(self, mock_logger, mock_... method test_main_with_custom_log_file (line 230) | def test_main_with_custom_log_file(self, mock_logger, mock_mcp): method test_main_with_file_logging_disabled (line 251) | def test_main_with_file_logging_disabled(self, mock_logger, mock_mcp): method test_main_with_default_logging (line 260) | def test_main_with_default_logging(self, mock_logger, mock_mcp): class TestSetEnableAwsResourceWrite (line 273) | class TestSetEnableAwsResourceWrite: method test_enable_aws_resource_write_true (line 277) | def test_enable_aws_resource_write_true(self, mock_logger): method test_enable_aws_resource_write_false (line 288) | def test_enable_aws_resource_write_false(self, mock_logger): method test_enable_aws_resource_write_multiple_calls (line 296) | def test_enable_aws_resource_write_multiple_calls(self, mock_logger): class TestFlagValidation (line 311) | class TestFlagValidation: method test_log_file_with_empty_string (line 314) | def test_log_file_with_empty_string(self): method test_log_file_with_special_characters (line 322) | def test_log_file_with_special_characters(self): method test_unknown_flag_handling (line 342) | def test_unknown_flag_handling(self): method test_flag_abbreviations (line 351) | def test_flag_abbreviations(self): method test_help_flag (line 364) | def test_help_flag(self): class TestFlagIntegration (line 376) | class TestFlagIntegration: method setup_method (line 379) | def setup_method(self): method test_full_cli_integration_default (line 388) | def test_full_cli_integration_default(self, mock_main, mock_configure_... method test_full_cli_integration_all_flags (line 415) | def test_full_cli_integration_all_flags(self, mock_main, mock_configur... method test_conflicting_flags_behavior (line 454) | def test_conflicting_flags_behavior(self): class TestFlagDocumentation (line 488) | class TestFlagDocumentation: method test_flag_help_text (line 491) | def test_flag_help_text(self): method test_parser_description (line 521) | def test_parser_description(self): class TestRealWorldCliScenarios (line 529) | class TestRealWorldCliScenarios: method test_production_like_flags (line 532) | def test_production_like_flags(self): method test_development_like_flags (line 549) | def test_development_like_flags(self): method test_debugging_scenario_flags (line 563) | def test_debugging_scenario_flags(self): class TestFlagEdgeCases (line 580) | class TestFlagEdgeCases: method test_log_file_with_unicode_path (line 583) | def test_log_file_with_unicode_path(self): method test_log_file_with_very_long_path (line 593) | def test_log_file_with_very_long_path(self): method test_multiple_same_flags_last_wins (line 603) | def test_multiple_same_flags_last_wins(self): method test_flag_with_equals_syntax (line 615) | def test_flag_with_equals_syntax(self): class TestEnvironmentVariableInteraction (line 627) | class TestEnvironmentVariableInteraction: method setup_method (line 630) | def setup_method(self): method test_cli_flag_overrides_existing_env_var (line 637) | def test_cli_flag_overrides_existing_env_var(self): method test_environment_variable_without_cli_flag (line 649) | def test_environment_variable_without_cli_flag(self): method test_multiple_environment_variables (line 657) | def test_multiple_environment_variables(self): class TestAwsResourceWriteFlag (line 669) | class TestAwsResourceWriteFlag: method test_aws_resource_write_flag_affects_global_state (line 673) | def test_aws_resource_write_flag_affects_global_state(self, mock_logger): method test_aws_resource_write_flag_default_behavior (line 683) | def test_aws_resource_write_flag_default_behavior(self): method test_aws_resource_write_flag_security_implications (line 692) | def test_aws_resource_write_flag_security_implications(self): class TestLoggingFlagInteractions (line 707) | class TestLoggingFlagInteractions: method setup_method (line 710) | def setup_method(self): method test_log_file_and_disable_logging_both_set (line 717) | def test_log_file_and_disable_logging_both_set(self): method test_conflicting_logging_flags_behavior (line 738) | def test_conflicting_logging_flags_behavior(self): method test_empty_log_file_path (line 757) | def test_empty_log_file_path(self): class TestFlagRobustness (line 768) | class TestFlagRobustness: method test_parser_with_invalid_arguments (line 771) | def test_parser_with_invalid_arguments(self): method test_parser_with_missing_required_value (line 780) | def test_parser_with_missing_required_value(self): method test_parser_with_extra_positional_arguments (line 789) | def test_parser_with_extra_positional_arguments(self): method test_flag_case_sensitivity (line 798) | def test_flag_case_sensitivity(self): method test_flag_with_no_value_when_value_expected (line 807) | def test_flag_with_no_value_when_value_expected(self): class TestFlagDocumentationAndUsability (line 817) | class TestFlagDocumentationAndUsability: method test_comprehensive_help_output (line 820) | def test_comprehensive_help_output(self): method test_flag_naming_consistency (line 853) | def test_flag_naming_consistency(self): FILE: src/finch-mcp-server/tests/test_logging_configuration.py class TestLoggingConfiguration (line 26) | class TestLoggingConfiguration: method setup_method (line 29) | def setup_method(self): method test_default_logging_configuration (line 37) | def test_default_logging_configuration(self, mock_logger): method test_disabled_file_logging_via_env (line 55) | def test_disabled_file_logging_via_env(self, mock_logger): method test_custom_log_file_via_env (line 69) | def test_custom_log_file_via_env(self, mock_logger): method test_custom_log_level (line 82) | def test_custom_log_level(self, mock_logger): method test_disable_overrides_custom_file (line 94) | def test_disable_overrides_custom_file(self, mock_logger): class TestGetDefaultLogPath (line 102) | class TestGetDefaultLogPath: method test_unix_default_path (line 105) | def test_unix_default_path(self): method test_windows_default_path (line 124) | def test_windows_default_path(self): method test_windows_no_localappdata (line 142) | def test_windows_no_localappdata(self): method test_fallback_to_none_on_permission_error (line 152) | def test_fallback_to_none_on_permission_error(self): method test_fallback_to_none_when_no_home (line 162) | def test_fallback_to_none_when_no_home(self): class TestIntegrationLogging (line 170) | class TestIntegrationLogging: method test_actual_file_creation_default (line 174) | def test_actual_file_creation_default(self, mock_logger): method test_actual_file_creation_disabled (line 193) | def test_actual_file_creation_disabled(self, mock_logger): method test_actual_custom_file_creation (line 208) | def test_actual_custom_file_creation(self, mock_logger): method test_configure_logging_file_permission_error (line 219) | def test_configure_logging_file_permission_error(self): method test_configure_logging_no_suitable_location (line 234) | def test_configure_logging_no_suitable_location(self): method test_configure_logging_file_success_message (line 245) | def test_configure_logging_file_success_message(self): FILE: src/finch-mcp-server/tests/test_server.py class TestSensitiveDataFilter (line 31) | class TestSensitiveDataFilter: method test_filter_aws_access_key (line 34) | def test_filter_aws_access_key(self): method test_filter_aws_secret_key (line 45) | def test_filter_aws_secret_key(self): method test_filter_api_key (line 59) | def test_filter_api_key(self): method test_filter_password (line 70) | def test_filter_password(self): method test_filter_url_with_credentials (line 81) | def test_filter_url_with_credentials(self): class TestEnsureVmRunning (line 96) | class TestEnsureVmRunning: method test_ensure_vm_running_already_running (line 107) | def test_ensure_vm_running_already_running( method test_ensure_vm_running_stopped (line 140) | def test_ensure_vm_running_stopped( method test_ensure_vm_running_nonexistent (line 173) | def test_ensure_vm_running_nonexistent( method test_ensure_vm_running_failures (line 206) | def test_ensure_vm_running_failures( method test_ensure_vm_running_on_linux (line 252) | def test_ensure_vm_running_on_linux(self, mock_format_result): class TestFinchTools (line 266) | class TestFinchTools: method test_finch_build_container_image_success (line 270) | async def test_finch_build_container_image_success(self): method test_finch_build_container_image_with_ecr (line 315) | async def test_finch_build_container_image_with_ecr(self): method test_finch_build_container_image_with_ecr_error (line 358) | async def test_finch_build_container_image_with_ecr_error(self): method test_finch_build_container_image_finch_not_installed (line 396) | async def test_finch_build_container_image_finch_not_installed(self): method test_finch_build_container_image_vm_error (line 418) | async def test_finch_build_container_image_vm_error(self): method test_finch_build_container_image_build_error (line 445) | async def test_finch_build_container_image_build_error(self): method test_finch_build_container_image_exception (line 475) | async def test_finch_build_container_image_exception(self): method test_finch_push_image_success (line 494) | async def test_finch_push_image_success(self): method test_finch_push_image_with_ecr_error (line 538) | async def test_finch_push_image_with_ecr_error(self): method test_finch_push_image_non_ecr (line 577) | async def test_finch_push_image_non_ecr(self): method test_finch_push_image_finch_not_installed (line 610) | async def test_finch_push_image_finch_not_installed(self): method test_finch_push_image_vm_error (line 628) | async def test_finch_push_image_vm_error(self): method test_finch_push_image_push_error (line 651) | async def test_finch_push_image_push_error(self): method test_finch_push_image_exception (line 676) | async def test_finch_push_image_exception(self): method test_finch_create_ecr_repo_success (line 698) | async def test_finch_create_ecr_repo_success(self): method test_finch_create_ecr_repo_already_exists (line 728) | async def test_finch_create_ecr_repo_already_exists(self): method test_finch_create_ecr_repo_error (line 760) | async def test_finch_create_ecr_repo_error(self): method test_finch_create_ecr_repo_exception (line 790) | async def test_finch_create_ecr_repo_exception(self): method test_finch_create_ecr_repo_readonly_mode (line 817) | async def test_finch_create_ecr_repo_readonly_mode(self): method test_finch_push_image_readonly_mode (line 833) | async def test_finch_push_image_readonly_mode(self): class TestMainFunctionLogging (line 866) | class TestMainFunctionLogging: method test_main_logs_custom_file_path (line 872) | def test_main_logs_custom_file_path(self, mock_mcp, mock_logger): method test_main_logs_stderr_only (line 882) | def test_main_logs_stderr_only(self, mock_mcp, mock_logger): method test_main_logs_default_logging (line 891) | def test_main_logs_default_logging(self, mock_mcp, mock_logger): FILE: src/finch-mcp-server/tests/test_utils_build.py class TestContainsEcrReference (line 8) | class TestContainsEcrReference: method test_contains_ecr_reference_true (line 17) | def test_contains_ecr_reference_true(self, mock_file, mock_exists): method test_contains_ecr_reference_false (line 31) | def test_contains_ecr_reference_false(self, mock_file, mock_exists): method test_contains_ecr_reference_file_not_found (line 42) | def test_contains_ecr_reference_file_not_found(self, mock_exists): method test_contains_ecr_reference_exception (line 53) | def test_contains_ecr_reference_exception(self, mock_file, mock_exists): class TestBuildImage (line 65) | class TestBuildImage: method test_build_image_success (line 71) | def test_build_image_success(self, mock_format_result, mock_execute_co... method test_build_image_failure (line 132) | def test_build_image_failure(self, mock_format_result, mock_execute_co... method test_build_image_dockerfile_not_found (line 156) | def test_build_image_dockerfile_not_found(self, mock_format_result, mo... method test_build_image_context_not_found (line 179) | def test_build_image_context_not_found(self, mock_format_result, mock_... method test_build_image_exception (line 203) | def test_build_image_exception(self, mock_format_result, mock_execute_... FILE: src/finch-mcp-server/tests/test_utils_common.py class TestExecuteCommand (line 12) | class TestExecuteCommand: method test_execute_command_with_default_env (line 17) | def test_execute_command_with_default_env(self, mock_environ_copy, moc... method test_execute_command_with_custom_env (line 39) | def test_execute_command_with_custom_env(self, mock_subprocess_run): method test_execute_command_with_debug_logging (line 59) | def test_execute_command_with_debug_logging( method test_execute_command_with_error (line 86) | def test_execute_command_with_error(self, mock_environ_copy, mock_subp... method test_execute_command_rejects_non_finch_commands (line 104) | def test_execute_command_rejects_non_finch_commands(self, mock_environ... method test_execute_command_rejects_empty_command (line 117) | def test_execute_command_rejects_empty_command(self, mock_environ_copy): method test_execute_command_rejects_docker_command (line 130) | def test_execute_command_rejects_docker_command(self, mock_environ_copy): class TestFormatResult (line 143) | class TestFormatResult: method test_format_result_basic (line 146) | def test_format_result_basic(self): class TestDangerousPatterns (line 155) | class TestDangerousPatterns: method test_get_dangerous_patterns (line 158) | def test_get_dangerous_patterns(self): class TestCommandExecution (line 167) | class TestCommandExecution: method test_execute_command_with_safe_command (line 171) | def test_execute_command_with_safe_command(self, mock_subprocess_run): method test_execute_command_with_dangerous_pattern (line 189) | def test_execute_command_with_dangerous_pattern(self, mock_subprocess_... method test_execute_command_with_non_finch_command (line 199) | def test_execute_command_with_non_finch_command(self, mock_subprocess_... FILE: src/finch-mcp-server/tests/test_utils_ecr.py function aws_credentials (line 13) | async def aws_credentials(): function ecr_client (line 21) | async def ecr_client(aws_credentials): class TestCreateEcrRepository (line 27) | class TestCreateEcrRepository: method test_repository_already_exists (line 30) | def test_repository_already_exists(self, ecr_client): method test_repository_creation_success (line 48) | def test_repository_creation_success(self, ecr_client): method test_describe_error_not_repository_not_found (line 66) | def test_describe_error_not_repository_not_found(self, mock_boto3_clie... method test_create_repository_failure (line 82) | def test_create_repository_failure(self, mock_boto3_client, ecr_client): FILE: src/finch-mcp-server/tests/test_utils_push.py class TestIsEcrRepository (line 8) | class TestIsEcrRepository: method test_valid_ecr_repository (line 11) | def test_valid_ecr_repository(self): method test_invalid_ecr_repository (line 27) | def test_invalid_ecr_repository(self): class TestGetImageShortHash (line 44) | class TestGetImageShortHash: method test_get_image_short_hash_success (line 49) | def test_get_image_short_hash_success(self, mock_format_result, mock_e... method test_get_image_short_hash_command_failure (line 71) | def test_get_image_short_hash_command_failure(self, mock_format_result... method test_get_image_short_hash_no_hash_found (line 95) | def test_get_image_short_hash_no_hash_found(self, mock_format_result, ... class TestPushImage (line 117) | class TestPushImage: method test_push_image_success (line 123) | def test_push_image_success( method test_push_image_hash_failure (line 157) | def test_push_image_hash_failure(self, mock_get_image_short_hash): method test_push_image_tag_failure (line 173) | def test_push_image_tag_failure( method test_push_image_push_failure (line 202) | def test_push_image_push_failure( method test_push_image_without_tag (line 241) | def test_push_image_without_tag( FILE: src/finch-mcp-server/tests/test_utils_vm.py class TestVmStatusChecks (line 25) | class TestVmStatusChecks: method test_is_vm_nonexistent (line 28) | def test_is_vm_nonexistent(self): method test_is_vm_stopped (line 48) | def test_is_vm_stopped(self): method test_is_vm_running (line 68) | def test_is_vm_running(self): class TestVmOperations (line 89) | class TestVmOperations: method test_get_vm_status (line 93) | def test_get_vm_status(self, mock_execute_command): method test_initialize_vm_success (line 108) | def test_initialize_vm_success(self, mock_execute_command): method test_initialize_vm_failure (line 123) | def test_initialize_vm_failure(self, mock_execute_command): method test_initialize_vm_linux (line 137) | def test_initialize_vm_linux(self): method test_start_stopped_vm_success (line 146) | def test_start_stopped_vm_success(self, mock_execute_command): method test_start_stopped_vm_failure (line 161) | def test_start_stopped_vm_failure(self, mock_execute_command): method test_start_stopped_vm_linux (line 175) | def test_start_stopped_vm_linux(self): method test_stop_vm_success (line 184) | def test_stop_vm_success(self, mock_execute_command): method test_stop_vm_force (line 199) | def test_stop_vm_force(self, mock_execute_command): method test_stop_vm_linux (line 213) | def test_stop_vm_linux(self): class TestFinchInstallation (line 221) | class TestFinchInstallation: method test_check_finch_installation_installed (line 225) | def test_check_finch_installation_installed(self, mock_which): method test_check_finch_installation_not_installed (line 236) | def test_check_finch_installation_not_installed(self, mock_which): method test_check_finch_installation_exception (line 247) | def test_check_finch_installation_exception(self, mock_which): class TestEcrConfiguration (line 258) | class TestEcrConfiguration: method test_configure_ecr_existing_config_macos (line 267) | def test_configure_ecr_existing_config_macos( method test_configure_ecr_existing_config_windows (line 298) | def test_configure_ecr_existing_config_windows( method test_configure_ecr_update_config_macos (line 328) | def test_configure_ecr_update_config_macos( method test_configure_ecr_update_config_windows (line 361) | def test_configure_ecr_update_config_windows( method test_configure_ecr_exception_macos (line 391) | def test_configure_ecr_exception_macos(self, mock_open, mock_expanduse... method test_configure_ecr_exception_windows (line 411) | def test_configure_ecr_exception_windows(self, mock_open, mock_exists,... method test_configure_ecr_file_not_found_macos (line 428) | def test_configure_ecr_file_not_found_macos(self, mock_exists): method test_configure_ecr_file_not_found_windows (line 443) | def test_configure_ecr_file_not_found_windows(self, mock_exists, mock_... class TestVmStateValidation (line 457) | class TestVmStateValidation: method test_validate_vm_state_running (line 464) | def test_validate_vm_state_running( method test_validate_vm_state_stopped (line 486) | def test_validate_vm_state_stopped( method test_validate_vm_state_nonexistent (line 508) | def test_validate_vm_state_nonexistent( method test_validate_vm_state_mismatch (line 530) | def test_validate_vm_state_mismatch( method test_validate_vm_state_exception (line 549) | def test_validate_vm_state_exception(self, mock_get_status): FILE: src/frontend-mcp-server/awslabs/frontend_mcp_server/server.py function get_react_docs_by_topic (line 44) | async def get_react_docs_by_topic( function main (line 74) | def main(): FILE: src/frontend-mcp-server/awslabs/frontend_mcp_server/utils/file_utils.py function load_markdown_file (line 20) | def load_markdown_file(filename: str) -> str: FILE: src/frontend-mcp-server/tests/test_file_utils.py function test_load_markdown_file_success (line 22) | def test_load_markdown_file_success(mock_file_open, mock_exists): function test_load_markdown_file_not_found (line 38) | def test_load_markdown_file_not_found(mock_print, mock_exists): FILE: src/frontend-mcp-server/tests/test_init.py class TestInit (line 20) | class TestInit: method test_version (line 23) | def test_version(self): method test_module_reload (line 40) | def test_module_reload(self): FILE: src/frontend-mcp-server/tests/test_main.py class TestMain (line 20) | class TestMain: method test_main_default (line 25) | def test_main_default(self, mock_run): method test_module_execution (line 33) | def test_module_execution(self): FILE: src/frontend-mcp-server/tests/test_server.py function test_get_react_docs_by_topic_essential_knowledge (line 24) | async def test_get_react_docs_by_topic_essential_knowledge(mock_load_mar... function test_get_react_docs_by_topic_troubleshooting (line 39) | async def test_get_react_docs_by_topic_troubleshooting(mock_load_markdown): function test_get_react_docs_by_topic_invalid (line 53) | async def test_get_react_docs_by_topic_invalid(): function test_main_emits_deprecation_warning (line 61) | def test_main_emits_deprecation_warning(mock_mcp): FILE: src/git-repo-research-mcp-server/awslabs/git_repo_research_mcp_server/defaults.py class Constants (line 17) | class Constants: FILE: src/git-repo-research-mcp-server/awslabs/git_repo_research_mcp_server/embeddings.py function create_bedrock_embeddings (line 28) | def create_bedrock_embeddings( function get_embedding_model (line 54) | def get_embedding_model( FILE: src/git-repo-research-mcp-server/awslabs/git_repo_research_mcp_server/github_search.py function github_graphql_request (line 79) | def github_graphql_request( function github_repo_search_graphql (line 138) | def github_repo_search_graphql( function clean_github_url (line 255) | def clean_github_url(url: str) -> str: function extract_org_from_url (line 286) | def extract_org_from_url(url: str) -> Optional[str]: function github_repo_search_rest (line 307) | def github_repo_search_rest( function github_repo_search_wrapper (line 406) | def github_repo_search_wrapper(**kwargs) -> List[Dict[str, Any]]: FILE: src/git-repo-research-mcp-server/awslabs/git_repo_research_mcp_server/indexer.py class RepositoryConfig (line 51) | class RepositoryConfig(BaseModel): method validate_repository_path (line 67) | def validate_repository_path(cls, git_string_url): method validate_chunk_size (line 79) | def validate_chunk_size(cls, chunk_size): method validate_chunk_overlap (line 91) | def validate_chunk_overlap(cls, v: int, info: ValidationInfo) -> int: class IndexConfig (line 107) | class IndexConfig(BaseModel): method validate_embedding_model (line 121) | def validate_embedding_model(cls, embedding_model): method validate_aws_region (line 142) | def validate_aws_region(cls, aws_region_string): function get_docstore_dict (line 155) | def get_docstore_dict(docstore): function ensure_docstore_dict (line 167) | def ensure_docstore_dict(docstore): function get_docstore_dict_size (line 181) | def get_docstore_dict_size(docstore): function save_index_without_pickle (line 193) | def save_index_without_pickle(vector_store, index_path): function save_chunk_map_without_pickle (line 226) | def save_chunk_map_without_pickle(chunk_map, index_path): function load_chunk_map_without_pickle (line 250) | def load_chunk_map_without_pickle(index_path): class RepositoryIndexer (line 283) | class RepositoryIndexer: method __init__ (line 290) | def __init__(self, config: IndexConfig): method _get_index_path (line 311) | def _get_index_path(self, repository_name: str) -> str: method _get_metadata_path (line 324) | def _get_metadata_path(self, repository_name: str) -> str: method _get_chunk_map_path (line 337) | def _get_chunk_map_path(self, repository_name: str) -> str: method index_repository (line 350) | async def index_repository( method load_index_without_pickle (line 490) | def load_index_without_pickle(self, index_path): class RepositoryProcessor (line 537) | class RepositoryProcessor: method prepare_repository (line 540) | async def prepare_repository( method process_content (line 574) | async def process_content( method get_commit_id (line 607) | async def get_commit_id( class IndexBuilder (line 644) | class IndexBuilder: method create_documents (line 647) | async def create_documents( method create_vector_store (line 677) | async def create_vector_store( method save_index (line 731) | def save_index(self, vector_store: FAISS, index_path: str): class FileManager (line 741) | class FileManager: method copy_repository_files (line 744) | async def copy_repository_files( method save_chunk_map (line 791) | def save_chunk_map(self, chunk_map_data: Dict, index_path: str): class MetadataManager (line 801) | class MetadataManager: method create_and_save (line 804) | async def create_and_save( function get_repository_indexer (line 854) | def get_repository_indexer(config: IndexConfig) -> RepositoryIndexer: FILE: src/git-repo-research-mcp-server/awslabs/git_repo_research_mcp_server/models.py class GitHubConfig (line 22) | class GitHubConfig(BaseModel): class IndexMetadata (line 35) | class IndexMetadata(BaseModel): class SearchResult (line 65) | class SearchResult(BaseModel): class SearchResponse (line 81) | class SearchResponse(BaseModel): class IndexedRepositoryInfo (line 104) | class IndexedRepositoryInfo(BaseModel): class IndexedRepositoriesResponse (line 122) | class IndexedRepositoriesResponse(BaseModel): class DetailedIndexedRepositoryInfo (line 136) | class DetailedIndexedRepositoryInfo(IndexedRepositoryInfo): class DetailedIndexedRepositoriesResponse (line 154) | class DetailedIndexedRepositoriesResponse(BaseModel): class EmbeddingModel (line 172) | class EmbeddingModel(str, Enum): class IndexRepositoryResponse (line 185) | class IndexRepositoryResponse(BaseModel): class GitHubRepoSearchInput (line 210) | class GitHubRepoSearchInput(BaseModel): class GitHubRepoSearchResult (line 229) | class GitHubRepoSearchResult(BaseModel): class GitHubRepoSearchResponse (line 253) | class GitHubRepoSearchResponse(BaseModel): class DeleteRepositoryResponse (line 271) | class DeleteRepositoryResponse(BaseModel): FILE: src/git-repo-research-mcp-server/awslabs/git_repo_research_mcp_server/repository.py function is_git_url (line 31) | def is_git_url(repo_path: str) -> bool: function is_git_repo (line 44) | def is_git_repo(path: str) -> bool: function clone_repository (line 60) | def clone_repository(url: str, target_dir: Optional[str] = None) -> str: function get_repository_name (line 99) | def get_repository_name(repo_path: str) -> str: function get_text_files (line 136) | def get_text_files( function get_file_extension_stats (line 189) | def get_file_extension_stats(file_paths: List[str]) -> Dict[str, int]: function read_file_content (line 210) | def read_file_content(file_path: str) -> str: function chunk_text (line 230) | def chunk_text(text: str, chunk_size: int = 1000, chunk_overlap: int = 2... function process_repository (line 265) | def process_repository( function cleanup_repository (line 313) | def cleanup_repository(repo_path: str) -> None: FILE: src/git-repo-research-mcp-server/awslabs/git_repo_research_mcp_server/search.py class RepositorySearcher (line 38) | class RepositorySearcher: method __init__ (line 44) | def __init__( method list_repository_files (line 81) | def list_repository_files(self, repository_name: str) -> Optional[str]: method _generate_directory_tree (line 109) | def _generate_directory_tree(self, path: str) -> str: method _generate_tree (line 129) | def _generate_tree(self, path: str, prefix: str, base_path: str) -> str: method search (line 180) | def search( function get_repository_searcher (line 331) | def get_repository_searcher( FILE: src/git-repo-research-mcp-server/awslabs/git_repo_research_mcp_server/server.py function _resolve_and_validate_under_base (line 56) | def _resolve_and_validate_under_base(file_path: str, base_dir: str) -> P... function mcp_index_repository (line 211) | async def mcp_index_repository( function repository_summary (line 312) | async def repository_summary(repository_name: str) -> str: function list_repositories (line 460) | async def list_repositories() -> str: function access_file_or_directory (line 496) | async def access_file_or_directory(filepath: str) -> Union[str, List[str... function mcp_search_repository (line 650) | async def mcp_search_repository( function mcp_search_github_repos (line 719) | async def mcp_search_github_repos( function mcp_access_file (line 815) | async def mcp_access_file( function mcp_delete_repository (line 871) | async def mcp_delete_repository( function main (line 946) | def main(): FILE: src/git-repo-research-mcp-server/awslabs/git_repo_research_mcp_server/utils.py function get_default_index_dir (line 35) | def get_default_index_dir() -> str: function load_metadata (line 46) | def load_metadata(metadata_path: str) -> Optional[IndexMetadata]: function list_indexed_repositories (line 67) | def list_indexed_repositories( class DateTimeEncoder (line 167) | class DateTimeEncoder(json.JSONEncoder): method default (line 173) | def default(self, o): function format_size (line 187) | def format_size(size_bytes: int) -> str: function delete_indexed_repository (line 206) | async def delete_indexed_repository( FILE: src/git-repo-research-mcp-server/tests/conftest.py function pytest_addoption (line 19) | def pytest_addoption(parser): function pytest_configure (line 35) | def pytest_configure(config): function pytest_collection_modifyitems (line 41) | def pytest_collection_modifyitems(config, items): FILE: src/git-repo-research-mcp-server/tests/test_errors_repository.py function test_repository_indexing (line 23) | async def test_repository_indexing(): FILE: src/git-repo-research-mcp-server/tests/test_github_search_edge_cases.py function test_clean_github_url_basic (line 29) | def test_clean_github_url_basic(): function test_extract_org_from_url_basic (line 36) | def test_extract_org_from_url_basic(): function test_graphql_request_rate_limit (line 44) | async def test_graphql_request_rate_limit(): function test_github_graphql_request_rate_limit_no_token (line 62) | def test_github_graphql_request_rate_limit_no_token(): function test_github_graphql_request_http_error (line 83) | def test_github_graphql_request_http_error(): function test_github_graphql_request_auth_failure (line 98) | def test_github_graphql_request_auth_failure(): function test_github_graphql_request_connection_error (line 124) | def test_github_graphql_request_connection_error(): function test_github_repo_search_graphql_with_errors (line 139) | def test_github_repo_search_graphql_with_errors(): function test_github_repo_search_graphql_with_exception (line 162) | def test_github_repo_search_graphql_with_exception(): function test_github_repo_search_graphql_duplicate_urls (line 187) | def test_github_repo_search_graphql_duplicate_urls(): function test_github_repo_search_graphql_org_mismatch (line 265) | def test_github_repo_search_graphql_org_mismatch(): function test_github_repo_search_rest_with_exception (line 315) | def test_github_repo_search_rest_with_exception(): function test_github_repo_search_rest_with_http_error (line 337) | def test_github_repo_search_rest_with_http_error(): function test_github_repo_search_rest_with_duplicate_urls (line 359) | def test_github_repo_search_rest_with_duplicate_urls(): function test_github_repo_search_rest_with_license_filter (line 423) | def test_github_repo_search_rest_with_license_filter(): function test_github_repo_search_wrapper_with_string_keywords (line 480) | def test_github_repo_search_wrapper_with_string_keywords(): function test_github_repo_search_wrapper_with_args (line 527) | def test_github_repo_search_wrapper_with_args(): function test_github_repo_search_wrapper_with_generic_kwargs (line 574) | def test_github_repo_search_wrapper_with_generic_kwargs(): function test_github_repo_search_wrapper_exception (line 620) | def test_github_repo_search_wrapper_exception(): FILE: src/git-repo-research-mcp-server/tests/test_graphql_github_search.py class TestContext (line 29) | class TestContext: method info (line 32) | async def info(self, message): method error (line 36) | async def error(self, message): method report_progress (line 40) | async def report_progress(self, current, total, message=None): function test_context (line 46) | def test_context(): function mock_graphql_response (line 52) | def mock_graphql_response(): function mock_rest_response (line 104) | def mock_rest_response(): function test_clean_github_url (line 138) | def test_clean_github_url(): function test_extract_org_from_url (line 157) | def test_extract_org_from_url(): function test_github_graphql_request (line 177) | def test_github_graphql_request(mock_graphql_response): function test_github_graphql_request_rate_limit (line 206) | def test_github_graphql_request_rate_limit(): function test_github_repo_search_graphql (line 242) | def test_github_repo_search_graphql(mock_graphql_response): function test_github_repo_search_graphql_with_license_filter (line 281) | def test_github_repo_search_graphql_with_license_filter(mock_graphql_res... function test_github_repo_search_rest (line 308) | def test_github_repo_search_rest(mock_rest_response): function test_github_repo_search_wrapper_with_token (line 345) | def test_github_repo_search_wrapper_with_token(mock_graphql_response): function test_github_repo_search_wrapper_without_token (line 412) | def test_github_repo_search_wrapper_without_token(mock_rest_response): function test_mcp_search_github_repos (line 479) | async def test_mcp_search_github_repos(test_context): function test_mcp_search_github_repos_error_handling (line 557) | async def test_mcp_search_github_repos_error_handling(test_context): FILE: src/git-repo-research-mcp-server/tests/test_local_repository.py class TestContext (line 33) | class TestContext: method info (line 36) | async def info(self, message): method error (line 40) | async def error(self, message): method report_progress (line 44) | async def report_progress(self, current, total, message=None): function test_context (line 50) | def test_context(): function test_git_repo (line 56) | def test_git_repo(): function test_repository_indexing (line 164) | async def test_repository_indexing(test_context, test_git_repo, tmp_path... FILE: src/git-repo-research-mcp-server/tests/test_repository_utils.py function test_get_default_index_dir (line 33) | def test_get_default_index_dir(): function test_load_metadata_file_not_exists (line 50) | def test_load_metadata_file_not_exists(): function test_load_metadata_valid_file (line 66) | def test_load_metadata_valid_file(): function test_load_metadata_invalid_file (line 108) | def test_load_metadata_invalid_file(): function test_list_indexed_repositories_empty_dir (line 132) | def test_list_indexed_repositories_empty_dir(): function test_list_indexed_repositories_with_repositories (line 153) | def test_list_indexed_repositories_with_repositories(): function test_list_indexed_repositories_with_missing_metadata (line 236) | def test_list_indexed_repositories_with_missing_metadata(): function test_list_indexed_repositories_detailed (line 292) | def test_list_indexed_repositories_detailed(): function test_format_size (line 344) | def test_format_size(): function test_delete_indexed_repository_not_found (line 360) | async def test_delete_indexed_repository_not_found(): function test_delete_indexed_repository_success (line 401) | async def test_delete_indexed_repository_success(): function test_delete_indexed_repository_permission_denied (line 448) | async def test_delete_indexed_repository_permission_denied(): function test_delete_indexed_repository_partial_success (line 485) | async def test_delete_indexed_repository_partial_success(): function test_delete_indexed_repository_complete_failure (line 539) | async def test_delete_indexed_repository_complete_failure(): function test_list_indexed_repositories_with_repository_directory (line 586) | def test_list_indexed_repositories_with_repository_directory(): function test_delete_indexed_repository_index_dir_not_exists (line 637) | async def test_delete_indexed_repository_index_dir_not_exists(): function test_delete_indexed_repository_with_file_index (line 658) | async def test_delete_indexed_repository_with_file_index(): function test_delete_indexed_repository_absolute_path (line 701) | async def test_delete_indexed_repository_absolute_path(): FILE: src/git-repo-research-mcp-server/tests/test_rest_github_search.py class MockContext (line 25) | class MockContext: method info (line 28) | def info(self, message): method error (line 32) | def error(self, message): function test_github_repository_search_live (line 39) | async def test_github_repository_search_live(): function test_github_repository_search_no_results_live (line 87) | async def test_github_repository_search_no_results_live(): function test_github_repository_search_with_limit_live (line 116) | async def test_github_repository_search_with_limit_live(): function test_github_repository_order_by_stars_live (line 148) | async def test_github_repository_order_by_stars_live(): FILE: src/git-repo-research-mcp-server/tests/test_search.py class TestContext (line 27) | class TestContext: method info (line 30) | async def info(self, message): method error (line 34) | async def error(self, message): method report_progress (line 38) | async def report_progress(self, current, total, message=None): function test_context (line 44) | def test_context(): function mock_embedding_generator (line 50) | def mock_embedding_generator(): function mock_repository_indexer (line 59) | def mock_repository_indexer(): function test_get_repository_searcher (line 65) | def test_get_repository_searcher(): function test_repository_searcher_init (line 90) | def test_repository_searcher_init(): function test_list_repository_files_success (line 136) | def test_list_repository_files_success(): function test_list_repository_files_not_found (line 176) | def test_list_repository_files_not_found(): function test_list_repository_files_exception (line 203) | def test_list_repository_files_exception(): function test_generate_directory_tree (line 235) | def test_generate_directory_tree(): function test_search_with_repository_name (line 260) | def test_search_with_repository_name(): function test_search_with_directory_path (line 340) | def test_search_with_directory_path(): function test_search_with_similarity_search_with_score_fallback (line 396) | def test_search_with_similarity_search_with_score_fallback(): function test_search_with_both_search_methods_failing (line 458) | def test_search_with_both_search_methods_failing(): FILE: src/git-repo-research-mcp-server/tests/test_server.py class TestContext (line 42) | class TestContext: method info (line 45) | async def info(self, message): method error (line 49) | async def error(self, message): method report_progress (line 53) | async def report_progress(self, current, total, message=None): function mock_embedding_setup (line 59) | def mock_embedding_setup(): function test_context (line 83) | def test_context(): function test_git_repo (line 89) | def test_git_repo(): function test_mcp_index_repository (line 206) | async def test_mcp_index_repository( function test_repository_summary (line 318) | async def test_repository_summary(test_context, test_git_repo, monkeypat... function test_list_repositories (line 423) | async def test_list_repositories(test_context, test_git_repo, monkeypatc... function test_access_file_or_directory (line 472) | async def test_access_file_or_directory( function test_access_file_rejects_non_repository_format (line 543) | async def test_access_file_rejects_non_repository_format(): function test_access_file_rejects_path_traversal (line 568) | async def test_access_file_rejects_path_traversal(): function test_mcp_delete_repository (line 593) | async def test_mcp_delete_repository( function test_mcp_search_github_repos (line 654) | async def test_mcp_search_github_repos(test_context): function test_mcp_access_file (line 706) | async def test_mcp_access_file(test_context): function test_main (line 787) | def test_main(): function test_main_emits_deprecation_warning (line 802) | def test_main_emits_deprecation_warning(): FILE: src/git-repo-research-mcp-server/tests/test_url_repository.py class TestContext (line 30) | class TestContext: method info (line 33) | async def info(self, message): method error (line 37) | async def error(self, message): method report_progress (line 41) | async def report_progress(self, current, total, message=None): function test_context (line 47) | def test_context(): function remote_git_repo (line 53) | def remote_git_repo(): function test_repository_indexing (line 60) | async def test_repository_indexing(test_context, remote_git_repo, tmp_pa... function test_repository_indexing_with_different_output_path (line 264) | async def test_repository_indexing_with_different_output_path( FILE: src/healthimaging-mcp-server/awslabs/healthimaging_mcp_server/healthimaging_operations.py function get_medical_imaging_client (line 79) | def get_medical_imaging_client(): function _convert_datetime_to_string (line 93) | def _convert_datetime_to_string(dt_obj): function create_datastore_operation (line 104) | def create_datastore_operation(request: CreateDatastoreRequest) -> Creat... function delete_datastore_operation (line 122) | def delete_datastore_operation(request: DeleteDatastoreRequest) -> Delet... function get_datastore_operation (line 133) | def get_datastore_operation(request: GetDatastoreRequest) -> GetDatastor... function list_datastores_operation (line 154) | def list_datastores_operation(request: ListDatastoresRequest) -> ListDat... function start_dicom_import_job_operation (line 190) | def start_dicom_import_job_operation( function get_dicom_import_job_operation (line 218) | def get_dicom_import_job_operation(request: GetDICOMImportJobRequest) ->... function list_dicom_import_jobs_operation (line 242) | def list_dicom_import_jobs_operation( function search_image_sets_operation (line 278) | def search_image_sets_operation(request: SearchImageSetsRequest) -> Sear... function get_image_set_operation (line 311) | def get_image_set_operation(request: GetImageSetRequest) -> GetImageSetR... function get_image_set_metadata_operation (line 338) | def get_image_set_metadata_operation( function list_image_set_versions_operation (line 393) | def list_image_set_versions_operation( function update_image_set_metadata_operation (line 431) | def update_image_set_metadata_operation( function delete_image_set_operation (line 458) | def delete_image_set_operation(request: DeleteImageSetRequest) -> Delete... function copy_image_set_operation (line 473) | def copy_image_set_operation(request: CopyImageSetRequest) -> CopyImageS... function get_image_frame_operation (line 534) | def get_image_frame_operation(request: GetImageFrameRequest) -> GetImage... function list_tags_for_resource_operation (line 581) | def list_tags_for_resource_operation( function tag_resource_operation (line 592) | def tag_resource_operation(request: TagResourceRequest) -> TagResourceRe... function untag_resource_operation (line 601) | def untag_resource_operation(request: UntagResourceRequest) -> UntagReso... function start_dicom_export_job_operation (line 610) | def start_dicom_export_job_operation( function get_dicom_export_job_operation (line 647) | def get_dicom_export_job_operation(request: GetDICOMExportJobRequest) ->... function list_dicom_export_jobs_operation (line 668) | def list_dicom_export_jobs_operation( function create_datastore (line 705) | def create_datastore(request: CreateDatastoreRequest) -> CreateDatastore... function delete_datastore (line 710) | def delete_datastore(request: DeleteDatastoreRequest) -> DeleteDatastore... function get_datastore (line 715) | def get_datastore(request: GetDatastoreRequest) -> GetDatastoreResponse: function list_datastores (line 720) | def list_datastores(request: ListDatastoresRequest) -> ListDatastoresRes... function start_dicom_import_job (line 725) | def start_dicom_import_job(request: StartDICOMImportJobRequest) -> Start... function get_dicom_import_job (line 730) | def get_dicom_import_job(request: GetDICOMImportJobRequest) -> GetDICOMI... function list_dicom_import_jobs (line 735) | def list_dicom_import_jobs(request: ListDICOMImportJobsRequest) -> ListD... function search_image_sets (line 740) | def search_image_sets(request: SearchImageSetsRequest) -> SearchImageSet... function get_image_set (line 745) | def get_image_set(request: GetImageSetRequest) -> GetImageSetResponse: function get_image_set_metadata (line 750) | def get_image_set_metadata(request: GetImageSetMetadataRequest) -> GetIm... function list_image_set_versions (line 755) | def list_image_set_versions(request: ListImageSetVersionsRequest) -> Lis... function update_image_set_metadata (line 760) | def update_image_set_metadata( function delete_image_set (line 767) | def delete_image_set(request: DeleteImageSetRequest) -> DeleteImageSetRe... function copy_image_set (line 772) | def copy_image_set(request: CopyImageSetRequest) -> CopyImageSetResponse: function get_image_frame (line 777) | def get_image_frame(request: GetImageFrameRequest) -> GetImageFrameRespo... function list_tags_for_resource (line 782) | def list_tags_for_resource(request: ListTagsForResourceRequest) -> ListT... function tag_resource (line 787) | def tag_resource(request: TagResourceRequest) -> TagResourceResponse: function untag_resource (line 792) | def untag_resource(request: UntagResourceRequest) -> UntagResourceResponse: function start_dicom_export_job (line 797) | def start_dicom_export_job(request: StartDICOMExportJobRequest) -> Start... function get_dicom_export_job (line 802) | def get_dicom_export_job(request: GetDICOMExportJobRequest) -> GetDICOME... function list_dicom_export_jobs (line 807) | def list_dicom_export_jobs(request: ListDICOMExportJobsRequest) -> ListD... function delete_patient_studies_operation (line 815) | def delete_patient_studies_operation(datastore_id: str, patient_id: str)... function delete_study_operation (line 864) | def delete_study_operation(datastore_id: str, study_instance_uid: str) -... function search_by_patient_id_operation (line 918) | def search_by_patient_id_operation( function search_by_study_uid_operation (line 940) | def search_by_study_uid_operation( function search_by_series_uid_operation (line 967) | def search_by_series_uid_operation( function get_patient_studies_operation (line 994) | def get_patient_studies_operation(datastore_id: str, patient_id: str) ->... function get_patient_series_operation (line 1045) | def get_patient_series_operation(datastore_id: str, patient_id: str) -> ... function get_study_primary_image_sets_operation (line 1097) | def get_study_primary_image_sets_operation( function delete_series_by_uid_operation (line 1145) | def delete_series_by_uid_operation(datastore_id: str, series_instance_ui... function get_series_primary_image_set_operation (line 1214) | def get_series_primary_image_set_operation( function get_patient_dicomweb_studies_operation (line 1260) | def get_patient_dicomweb_studies_operation(datastore_id: str, patient_id... function delete_instance_in_study_operation (line 1362) | def delete_instance_in_study_operation( function delete_instance_in_series_operation (line 1496) | def delete_instance_in_series_operation( function update_patient_study_metadata_operation (line 1631) | def update_patient_study_metadata_operation( function delete_patient_studies (line 1713) | def delete_patient_studies(datastore_id: str, patient_id: str) -> Dict[s... function delete_study (line 1718) | def delete_study(datastore_id: str, study_instance_uid: str) -> Dict[str... function search_by_patient_id (line 1723) | def search_by_patient_id( function search_by_study_uid (line 1730) | def search_by_study_uid( function search_by_series_uid (line 1737) | def search_by_series_uid( function get_patient_studies (line 1744) | def get_patient_studies(datastore_id: str, patient_id: str) -> Dict[str,... function get_patient_series (line 1749) | def get_patient_series(datastore_id: str, patient_id: str) -> Dict[str, ... function get_study_primary_image_sets (line 1754) | def get_study_primary_image_sets(datastore_id: str, study_instance_uid: ... function delete_series_by_uid (line 1759) | def delete_series_by_uid(datastore_id: str, series_instance_uid: str) ->... function get_series_primary_image_set (line 1764) | def get_series_primary_image_set(datastore_id: str, series_instance_uid:... function get_patient_dicomweb_studies (line 1769) | def get_patient_dicomweb_studies(datastore_id: str, patient_id: str) -> ... function delete_instance_in_study (line 1774) | def delete_instance_in_study( function delete_instance_in_series (line 1781) | def delete_instance_in_series( function update_patient_study_metadata (line 1788) | def update_patient_study_metadata( function bulk_update_patient_metadata_operation (line 1803) | def bulk_update_patient_metadata_operation( function bulk_delete_by_criteria_operation (line 1871) | def bulk_delete_by_criteria_operation( function remove_series_from_image_set_operation (line 1939) | def remove_series_from_image_set_operation( function remove_instance_from_image_set_operation (line 1983) | def remove_instance_from_image_set_operation( function bulk_update_patient_metadata (line 2070) | def bulk_update_patient_metadata( function bulk_delete_by_criteria (line 2077) | def bulk_delete_by_criteria( function remove_series_from_image_set (line 2085) | def remove_series_from_image_set( function remove_instance_from_image_set (line 2092) | def remove_instance_from_image_set( FILE: src/healthimaging-mcp-server/awslabs/healthimaging_mcp_server/models.py class DatastoreStatus (line 22) | class DatastoreStatus(str, Enum): class JobStatus (line 31) | class JobStatus(str, Enum): class ImageSetState (line 40) | class ImageSetState(str, Enum): class DatastoreProperties (line 49) | class DatastoreProperties(BaseModel): class DatastoreSummary (line 61) | class DatastoreSummary(BaseModel): class DICOMImportJobProperties (line 72) | class DICOMImportJobProperties(BaseModel): class DICOMImportJobSummary (line 87) | class DICOMImportJobSummary(BaseModel): class ImageSetProperties (line 99) | class ImageSetProperties(BaseModel): class ImageSetsMetadataSummary (line 112) | class ImageSetsMetadataSummary(BaseModel): class DICOMExportJobProperties (line 122) | class DICOMExportJobProperties(BaseModel): class DICOMExportJobSummary (line 136) | class DICOMExportJobSummary(BaseModel): class CreateDatastoreRequest (line 149) | class CreateDatastoreRequest(BaseModel): class DeleteDatastoreRequest (line 157) | class DeleteDatastoreRequest(BaseModel): method validate_datastore_id (line 164) | def validate_datastore_id(cls, v): class GetDatastoreRequest (line 173) | class GetDatastoreRequest(BaseModel): method validate_datastore_id (line 180) | def validate_datastore_id(cls, v): class ListDatastoresRequest (line 189) | class ListDatastoresRequest(BaseModel): method validate_max_results (line 200) | def validate_max_results(cls, v): class StartDICOMImportJobRequest (line 208) | class StartDICOMImportJobRequest(BaseModel): method validate_datastore_id (line 221) | def validate_datastore_id(cls, v): class GetDICOMImportJobRequest (line 230) | class GetDICOMImportJobRequest(BaseModel): method validate_datastore_id (line 238) | def validate_datastore_id(cls, v): class ListDICOMImportJobsRequest (line 247) | class ListDICOMImportJobsRequest(BaseModel): method validate_datastore_id (line 257) | def validate_datastore_id(cls, v): method validate_max_results (line 267) | def validate_max_results(cls, v): class SearchImageSetsRequest (line 275) | class SearchImageSetsRequest(BaseModel): method validate_datastore_id (line 285) | def validate_datastore_id(cls, v): method validate_max_results (line 295) | def validate_max_results(cls, v): class GetImageSetRequest (line 303) | class GetImageSetRequest(BaseModel): method validate_datastore_id (line 312) | def validate_datastore_id(cls, v): class DeleteImageSetRequest (line 321) | class DeleteImageSetRequest(BaseModel): method validate_datastore_id (line 330) | def validate_datastore_id(cls, v): class ListImageSetVersionsRequest (line 339) | class ListImageSetVersionsRequest(BaseModel): method validate_datastore_id (line 349) | def validate_datastore_id(cls, v): method validate_max_results (line 359) | def validate_max_results(cls, v): class UpdateImageSetMetadataRequest (line 367) | class UpdateImageSetMetadataRequest(BaseModel): method validate_datastore_id (line 377) | def validate_datastore_id(cls, v): class GetImageSetMetadataRequest (line 386) | class GetImageSetMetadataRequest(BaseModel): method validate_datastore_id (line 395) | def validate_datastore_id(cls, v): class CopyImageSetRequest (line 404) | class CopyImageSetRequest(BaseModel): method validate_datastore_id (line 414) | def validate_datastore_id(cls, v): class GetImageFrameRequest (line 423) | class GetImageFrameRequest(BaseModel): method validate_datastore_id (line 432) | def validate_datastore_id(cls, v): class StartDICOMExportJobRequest (line 441) | class StartDICOMExportJobRequest(BaseModel): method validate_datastore_id (line 461) | def validate_datastore_id(cls, v): class GetDICOMExportJobRequest (line 470) | class GetDICOMExportJobRequest(BaseModel): method validate_datastore_id (line 478) | def validate_datastore_id(cls, v): class ListDICOMExportJobsRequest (line 487) | class ListDICOMExportJobsRequest(BaseModel): method validate_datastore_id (line 497) | def validate_datastore_id(cls, v): method validate_max_results (line 507) | def validate_max_results(cls, v): class ListTagsForResourceRequest (line 516) | class ListTagsForResourceRequest(BaseModel): class TagResourceRequest (line 522) | class TagResourceRequest(BaseModel): class UntagResourceRequest (line 529) | class UntagResourceRequest(BaseModel): class CreateDatastoreResponse (line 537) | class CreateDatastoreResponse(BaseModel): class DeleteDatastoreResponse (line 544) | class DeleteDatastoreResponse(BaseModel): class GetDatastoreResponse (line 551) | class GetDatastoreResponse(BaseModel): class ListDatastoresResponse (line 559) | class ListDatastoresResponse(BaseModel): class StartDICOMImportJobResponse (line 568) | class StartDICOMImportJobResponse(BaseModel): class GetDICOMImportJobResponse (line 577) | class GetDICOMImportJobResponse(BaseModel): class ListDICOMImportJobsResponse (line 585) | class ListDICOMImportJobsResponse(BaseModel): class SearchImageSetsResponse (line 594) | class SearchImageSetsResponse(BaseModel): class GetImageSetResponse (line 603) | class GetImageSetResponse(BaseModel): class DeleteImageSetResponse (line 617) | class DeleteImageSetResponse(BaseModel): class ListImageSetVersionsResponse (line 625) | class ListImageSetVersionsResponse(BaseModel): class UpdateImageSetMetadataResponse (line 634) | class UpdateImageSetMetadataResponse(BaseModel): class GetImageSetMetadataResponse (line 647) | class GetImageSetMetadataResponse(BaseModel): class CopyImageSetResponse (line 657) | class CopyImageSetResponse(BaseModel): class GetImageFrameResponse (line 669) | class GetImageFrameResponse(BaseModel): class StartDICOMExportJobResponse (line 676) | class StartDICOMExportJobResponse(BaseModel): class GetDICOMExportJobResponse (line 685) | class GetDICOMExportJobResponse(BaseModel): class ListDICOMExportJobsResponse (line 693) | class ListDICOMExportJobsResponse(BaseModel): class ListTagsForResourceResponse (line 703) | class ListTagsForResourceResponse(BaseModel): class TagResourceResponse (line 709) | class TagResourceResponse(BaseModel): class UntagResourceResponse (line 715) | class UntagResourceResponse(BaseModel): FILE: src/healthimaging-mcp-server/awslabs/healthimaging_mcp_server/server.py function _handle_field_value (line 70) | def _handle_field_value(value): function _convert_to_datastore_status (line 75) | def _convert_to_datastore_status(value: Optional[str]) -> Optional[Datas... function _convert_to_job_status (line 85) | def _convert_to_job_status(value: Optional[str]) -> Optional[JobStatus]: function create_server (line 161) | def create_server(): function create_datastore (line 173) | def create_datastore( function delete_datastore (line 188) | def delete_datastore( function get_datastore (line 197) | def get_datastore( function list_datastores (line 206) | def list_datastores( function start_dicom_import_job (line 225) | def start_dicom_import_job( function get_dicom_import_job (line 248) | def get_dicom_import_job( function list_dicom_import_jobs (line 258) | def list_dicom_import_jobs( function search_image_sets (line 279) | def search_image_sets( function get_image_set (line 298) | def get_image_set( function get_image_set_metadata (line 313) | def get_image_set_metadata( function list_image_set_versions (line 328) | def list_image_set_versions( function update_image_set_metadata (line 347) | def update_image_set_metadata( function delete_image_set (line 364) | def delete_image_set( function copy_image_set (line 379) | def copy_image_set( function get_image_frame (line 396) | def get_image_frame( function list_tags_for_resource (line 411) | def list_tags_for_resource( function tag_resource (line 420) | def tag_resource( function untag_resource (line 430) | def untag_resource( function start_dicom_export_job (line 440) | def start_dicom_export_job( function get_dicom_export_job (line 473) | def get_dicom_export_job( function list_dicom_export_jobs (line 483) | def list_dicom_export_jobs( function delete_patient_studies (line 507) | def delete_patient_studies( function delete_study (line 516) | def delete_study( function search_by_patient_id (line 525) | def search_by_patient_id( function search_by_study_uid (line 535) | def search_by_study_uid( function search_by_series_uid (line 547) | def search_by_series_uid( function get_patient_studies (line 559) | def get_patient_studies( function get_patient_series (line 568) | def get_patient_series( function get_study_primary_image_sets (line 577) | def get_study_primary_image_sets( function delete_series_by_uid (line 586) | def delete_series_by_uid( function get_series_primary_image_set (line 595) | def get_series_primary_image_set( function get_patient_dicomweb_studies (line 604) | def get_patient_dicomweb_studies( function delete_instance_in_study (line 613) | def delete_instance_in_study( function delete_instance_in_series (line 625) | def delete_instance_in_series( function update_patient_study_metadata (line 637) | def update_patient_study_metadata( function bulk_update_patient_metadata (line 653) | def bulk_update_patient_metadata( function bulk_delete_by_criteria (line 667) | def bulk_delete_by_criteria( function remove_series_from_image_set (line 684) | def remove_series_from_image_set( function remove_instance_from_image_set (line 698) | def remove_instance_from_image_set( function main (line 714) | def main(): FILE: src/healthimaging-mcp-server/tests/conftest.py function sample_datastore_id (line 23) | def sample_datastore_id(): function sample_image_set_id (line 29) | def sample_image_set_id(): function sample_patient_id (line 35) | def sample_patient_id(): function sample_study_uid (line 41) | def sample_study_uid(): function sample_series_uid (line 47) | def sample_series_uid(): function sample_search_criteria (line 53) | def sample_search_criteria(): function sample_image_set_metadata (line 59) | def sample_image_set_metadata(): function mock_boto3_session (line 100) | def mock_boto3_session(): function mock_fastmcp_app (line 115) | def mock_fastmcp_app(): FILE: src/healthimaging-mcp-server/tests/test_main.py class TestMain (line 18) | class TestMain: method test_main_module_exists (line 21) | def test_main_module_exists(self): method test_main_imports_server_main (line 27) | def test_main_imports_server_main(self): method test_main_function_exists (line 34) | def test_main_function_exists(self): FILE: src/healthimaging-mcp-server/tests/test_operations.py class TestDatastoreOperations (line 67) | class TestDatastoreOperations: method test_create_datastore_with_all_optional_params (line 71) | def test_create_datastore_with_all_optional_params(self, mock_boto_cli... method test_create_datastore_without_optional_params (line 97) | def test_create_datastore_without_optional_params(self, mock_boto_clie... method test_list_datastores_with_all_optional_params (line 115) | def test_list_datastores_with_all_optional_params(self, mock_boto_clie... method test_list_datastores_without_optional_params (line 147) | def test_list_datastores_without_optional_params(self, mock_boto_client): class TestDICOMJobOperations (line 162) | class TestDICOMJobOperations: method test_start_dicom_import_job_with_optional_params (line 166) | def test_start_dicom_import_job_with_optional_params(self, mock_boto_c... method test_start_dicom_export_job_with_optional_params (line 199) | def test_start_dicom_export_job_with_optional_params(self, mock_boto_c... method test_list_dicom_import_jobs_with_optional_params (line 245) | def test_list_dicom_import_jobs_with_optional_params(self, mock_boto_c... method test_list_dicom_export_jobs_with_optional_params (line 281) | def test_list_dicom_export_jobs_with_optional_params(self, mock_boto_c... method test_get_dicom_export_job_operation (line 318) | def test_get_dicom_export_job_operation(self, mock_boto_client): class TestImageSetOperations (line 347) | class TestImageSetOperations: method test_search_image_sets_with_optional_params (line 351) | def test_search_image_sets_with_optional_params(self, mock_boto_client): method test_get_image_set_with_optional_params (line 391) | def test_get_image_set_with_optional_params(self, mock_boto_client): method test_get_image_set_metadata_with_optional_params (line 418) | def test_get_image_set_metadata_with_optional_params(self, mock_boto_c... method test_list_image_set_versions_with_optional_params (line 441) | def test_list_image_set_versions_with_optional_params(self, mock_boto_... class TestTaggingOperations (line 480) | class TestTaggingOperations: method test_tag_resource_operation (line 484) | def test_tag_resource_operation(self, mock_boto_client): method test_untag_resource_operation (line 504) | def test_untag_resource_operation(self, mock_boto_client): class TestAdvancedDICOMOperations (line 524) | class TestAdvancedDICOMOperations: method test_delete_patient_studies_operation (line 528) | def test_delete_patient_studies_operation(self, mock_boto_client): method test_delete_study_operation (line 563) | def test_delete_study_operation(self, mock_boto_client): method test_search_by_patient_id_operation (line 593) | def test_search_by_patient_id_operation(self, mock_boto_client): method test_search_by_study_uid_operation (line 620) | def test_search_by_study_uid_operation(self, mock_boto_client): method test_search_by_series_uid_operation (line 652) | def test_search_by_series_uid_operation(self, mock_boto_client): method test_get_patient_studies_operation (line 684) | def test_get_patient_studies_operation(self, mock_boto_client): method test_get_patient_series_operation (line 715) | def test_get_patient_series_operation(self, mock_boto_client): method test_get_study_primary_image_sets_operation (line 747) | def test_get_study_primary_image_sets_operation(self, mock_boto_client): class TestErrorHandlingAndEdgeCases (line 780) | class TestErrorHandlingAndEdgeCases: method test_get_image_set_metadata_streaming_body_error (line 784) | def test_get_image_set_metadata_streaming_body_error(self, mock_boto_c... method test_get_image_set_metadata_string_content (line 811) | def test_get_image_set_metadata_string_content(self, mock_boto_client): method test_get_image_set_metadata_none_blob (line 838) | def test_get_image_set_metadata_none_blob(self, mock_boto_client): method test_get_image_frame_streaming_body_error (line 861) | def test_get_image_frame_streaming_body_error(self, mock_boto_client): method test_delete_patient_studies_with_delete_error (line 890) | def test_delete_patient_studies_with_delete_error(self, mock_boto_clie... method test_advanced_operations_client_errors (line 921) | def test_advanced_operations_client_errors(self, mock_boto_client): method test_delete_series_by_uid_operation (line 948) | def test_delete_series_by_uid_operation(self, mock_boto_client): method test_get_series_primary_image_set_operation (line 979) | def test_get_series_primary_image_set_operation(self, mock_boto_client): method test_get_patient_dicomweb_studies_operation (line 1005) | def test_get_patient_dicomweb_studies_operation(self, mock_boto_client): method test_delete_instance_in_study_operation (line 1040) | def test_delete_instance_in_study_operation(self, mock_boto_client): method test_delete_instance_in_series_operation (line 1077) | def test_delete_instance_in_series_operation(self, mock_boto_client): method test_update_patient_study_metadata_operation (line 1114) | def test_update_patient_study_metadata_operation(self, mock_boto_client): method test_new_operations_with_errors (line 1149) | def test_new_operations_with_errors(self, mock_boto_client): method test_get_series_primary_image_set_not_found (line 1171) | def test_get_series_primary_image_set_not_found(self, mock_boto_client): method test_delete_instance_not_found (line 1194) | def test_delete_instance_not_found(self, mock_boto_client): method test_get_image_set_metadata_bytes_content (line 1225) | def test_get_image_set_metadata_bytes_content(self, mock_boto_client): method test_get_image_set_metadata_other_content (line 1249) | def test_get_image_set_metadata_other_content(self, mock_boto_client): method test_get_image_frame_bytes_content (line 1273) | def test_get_image_frame_bytes_content(self, mock_boto_client): method test_get_image_frame_other_content (line 1299) | def test_get_image_frame_other_content(self, mock_boto_client): method test_get_image_set_metadata_streaming_non_string (line 1325) | def test_get_image_set_metadata_streaming_non_string(self, mock_boto_c... method test_get_image_frame_streaming_non_string (line 1352) | def test_get_image_frame_streaming_non_string(self, mock_boto_client): method test_get_image_frame_none_blob (line 1381) | def test_get_image_frame_none_blob(self, mock_boto_client): method test_get_image_frame_streaming_string_content (line 1406) | def test_get_image_frame_streaming_string_content(self, mock_boto_clie... class TestBulkOperations (line 1435) | class TestBulkOperations: method test_bulk_update_patient_metadata_operation (line 1439) | def test_bulk_update_patient_metadata_operation(self, mock_boto_client): method test_bulk_delete_by_criteria_operation (line 1469) | def test_bulk_delete_by_criteria_operation(self, mock_boto_client): method test_bulk_operations_with_errors (line 1493) | def test_bulk_operations_with_errors(self, mock_boto_client): class TestDICOMHierarchyOperations (line 1513) | class TestDICOMHierarchyOperations: method test_remove_series_from_image_set_operation (line 1517) | def test_remove_series_from_image_set_operation(self, mock_boto_client): method test_remove_instance_from_image_set_operation (line 1544) | def test_remove_instance_from_image_set_operation(self, mock_boto_clie... method test_hierarchy_operations_with_errors (line 1595) | def test_hierarchy_operations_with_errors(self, mock_boto_client): FILE: src/healthimaging-mcp-server/tests/test_server.py class TestHealthImagingServer (line 10) | class TestHealthImagingServer: method test_app_is_fastmcp_instance (line 13) | def test_app_is_fastmcp_instance(self): method test_create_datastore_success (line 17) | def test_create_datastore_success(self): method test_get_datastore_success (line 38) | def test_get_datastore_success(self): method test_list_datastores_success (line 59) | def test_list_datastores_success(self): method test_search_image_sets_success (line 82) | def test_search_image_sets_success(self): method test_delete_datastore_success (line 110) | def test_delete_datastore_success(self): method test_error_handling (line 128) | def test_error_handling(self): method test_get_image_set_success (line 143) | def test_get_image_set_success(self): method test_delete_image_set_success (line 165) | def test_delete_image_set_success(self): method test_get_image_set_metadata_success (line 186) | def test_get_image_set_metadata_success(self): method test_get_image_frame_success (line 208) | def test_get_image_frame_success(self): method test_copy_image_set_success (line 230) | def test_copy_image_set_success(self): method test_update_image_set_metadata_success (line 259) | def test_update_image_set_metadata_success(self): method test_start_dicom_import_job_success (line 284) | def test_start_dicom_import_job_success(self): method test_get_dicom_import_job_success (line 307) | def test_get_dicom_import_job_success(self): method test_list_dicom_import_jobs_success (line 331) | def test_list_dicom_import_jobs_success(self): method test_list_tags_for_resource_success (line 355) | def test_list_tags_for_resource_success(self): method test_tag_resource_success (line 373) | def test_tag_resource_success(self): method test_untag_resource_success (line 390) | def test_untag_resource_success(self): method test_main_function_exists (line 407) | def test_main_function_exists(self): method test_main_module_execution (line 413) | def test_main_module_execution(self): method test_main_module_import (line 422) | def test_main_module_import(self): method test_list_image_set_versions_success (line 430) | def test_list_image_set_versions_success(self): method test_start_dicom_export_job_success (line 455) | def test_start_dicom_export_job_success(self): method test_get_dicom_export_job_success (line 479) | def test_get_dicom_export_job_success(self): method test_list_dicom_export_jobs_success (line 505) | def test_list_dicom_export_jobs_success(self): method test_multiple_error_scenarios (line 529) | def test_multiple_error_scenarios(self): function test_create_datastore_no_credentials_error (line 565) | async def test_create_datastore_no_credentials_error(): function test_create_datastore_boto_core_error (line 575) | async def test_create_datastore_boto_core_error(): function test_delete_datastore_client_error (line 585) | async def test_delete_datastore_client_error(): function test_get_datastore_client_error (line 604) | async def test_get_datastore_client_error(): function test_list_datastores_client_error (line 623) | async def test_list_datastores_client_error(): function test_search_image_sets_client_error (line 638) | async def test_search_image_sets_client_error(): function test_get_image_set_client_error (line 663) | async def test_get_image_set_client_error(): function test_delete_image_set_client_error (line 686) | async def test_delete_image_set_client_error(): function test_get_image_set_metadata_client_error (line 707) | async def test_get_image_set_metadata_client_error(): function test_get_image_frame_client_error (line 730) | async def test_get_image_frame_client_error(): function test_copy_image_set_client_error (line 752) | async def test_copy_image_set_client_error(): function test_update_image_set_metadata_client_error (line 776) | async def test_update_image_set_metadata_client_error(): function test_start_dicom_import_job_client_error (line 803) | async def test_start_dicom_import_job_client_error(): function test_get_dicom_import_job_client_error (line 829) | async def test_get_dicom_import_job_client_error(): function test_list_dicom_import_jobs_client_error (line 852) | async def test_list_dicom_import_jobs_client_error(): function test_start_dicom_export_job_client_error (line 869) | async def test_start_dicom_export_job_client_error(): function test_get_dicom_export_job_client_error (line 895) | async def test_get_dicom_export_job_client_error(): function test_list_dicom_export_jobs_client_error (line 918) | async def test_list_dicom_export_jobs_client_error(): function test_list_tags_for_resource_client_error (line 935) | async def test_list_tags_for_resource_client_error(): function test_tag_resource_client_error (line 957) | async def test_tag_resource_client_error(): function test_untag_resource_client_error (line 978) | async def test_untag_resource_client_error(): class TestAdvancedDICOMServerOperations (line 1000) | class TestAdvancedDICOMServerOperations: method test_delete_patient_studies_success (line 1003) | def test_delete_patient_studies_success(self): method test_delete_study_success (line 1037) | def test_delete_study_success(self): method test_search_by_patient_id_success (line 1071) | def test_search_by_patient_id_success(self): method test_search_by_study_uid_success (line 1098) | def test_search_by_study_uid_success(self): method test_search_by_series_uid_success (line 1125) | def test_search_by_series_uid_success(self): method test_get_patient_studies_success (line 1152) | def test_get_patient_studies_success(self): method test_get_patient_series_success (line 1184) | def test_get_patient_series_success(self): method test_get_study_primary_image_sets_success (line 1216) | def test_get_study_primary_image_sets_success(self): method test_advanced_dicom_error_handling (line 1244) | def test_advanced_dicom_error_handling(self): method test_delete_series_by_uid_success (line 1263) | def test_delete_series_by_uid_success(self): method test_get_series_primary_image_set_success (line 1297) | def test_get_series_primary_image_set_success(self): method test_get_patient_dicomweb_studies_success (line 1327) | def test_get_patient_dicomweb_studies_success(self): method test_delete_instance_in_study_success (line 1365) | def test_delete_instance_in_study_success(self): method test_delete_instance_in_series_success (line 1409) | def test_delete_instance_in_series_success(self): method test_update_patient_study_metadata_success (line 1453) | def test_update_patient_study_metadata_success(self): method test_new_operations_error_handling (line 1494) | def test_new_operations_error_handling(self): function test_main_function_coverage (line 1514) | async def test_main_function_coverage(): class TestBulkOperationsServer (line 1523) | class TestBulkOperationsServer: method test_bulk_update_patient_metadata_success (line 1529) | def test_bulk_update_patient_metadata_success(self, mock_operation): method test_bulk_delete_by_criteria_success (line 1550) | def test_bulk_delete_by_criteria_success(self, mock_operation): method test_bulk_operations_error_handling (line 1571) | def test_bulk_operations_error_handling(self, mock_operation): class TestDICOMHierarchyOperationsServer (line 1588) | class TestDICOMHierarchyOperationsServer: method test_remove_series_from_image_set_success (line 1594) | def test_remove_series_from_image_set_success(self, mock_operation): method test_remove_instance_from_image_set_success (line 1616) | def test_remove_instance_from_image_set_success(self, mock_operation): method test_hierarchy_operations_error_handling (line 1645) | def test_hierarchy_operations_error_handling(self, mock_operation): class TestEnumConversionFunctions (line 1660) | class TestEnumConversionFunctions: method test_convert_to_datastore_status_valid_values (line 1663) | def test_convert_to_datastore_status_valid_values(self): method test_convert_to_datastore_status_none_value (line 1674) | def test_convert_to_datastore_status_none_value(self): method test_convert_to_datastore_status_invalid_value (line 1680) | def test_convert_to_datastore_status_invalid_value(self): method test_convert_to_job_status_valid_values (line 1686) | def test_convert_to_job_status_valid_values(self): method test_convert_to_job_status_none_value (line 1697) | def test_convert_to_job_status_none_value(self): method test_convert_to_job_status_invalid_value (line 1703) | def test_convert_to_job_status_invalid_value(self): FILE: src/healthimaging-mcp-server/tests/test_validation_edge_cases.py class TestValidationEdgeCases (line 26) | class TestValidationEdgeCases: method test_empty_string_datastore_id_validation (line 29) | def test_empty_string_datastore_id_validation(self): method test_wrong_length_datastore_id_validation (line 37) | def test_wrong_length_datastore_id_validation(self): method test_max_results_boundary_validation (line 49) | def test_max_results_boundary_validation(self): method test_all_datastore_id_models_empty_validation (line 79) | def test_all_datastore_id_models_empty_validation(self): method test_all_datastore_id_models_wrong_length_validation (line 144) | def test_all_datastore_id_models_wrong_length_validation(self): FILE: src/healthlake-mcp-server/awslabs/healthlake_mcp_server/fhir_operations.py function validate_datastore_id (line 38) | def validate_datastore_id(datastore_id: str) -> str: class FHIRSearchError (line 45) | class FHIRSearchError(Exception): method __init__ (line 48) | def __init__(self, message: str, invalid_params: Optional[List[str]] =... class AWSAuth (line 54) | class AWSAuth(httpx.Auth): method __init__ (line 57) | def __init__(self, credentials, region: str, service: str = 'healthlak... method auth_flow (line 63) | def auth_flow(self, request): class HealthLakeClient (line 99) | class HealthLakeClient: method __init__ (line 102) | def __init__(self, region_name: Optional[str] = None): method list_datastores (line 117) | async def list_datastores(self, filter_status: Optional[str] = None) -... method get_datastore_details (line 130) | async def get_datastore_details(self, datastore_id: str) -> Dict[str, ... method _get_fhir_endpoint (line 139) | def _get_fhir_endpoint(self, datastore_id: str) -> str: method _build_search_request (line 143) | def _build_search_request( method _validate_search_request (line 192) | def _validate_search_request( method _process_bundle (line 228) | def _process_bundle(self, bundle: Dict[str, Any]) -> Dict[str, Any]: method _process_bundle_with_includes (line 286) | def _process_bundle_with_includes(self, bundle: Dict[str, Any]) -> Dic... method _create_helpful_error_message (line 336) | def _create_helpful_error_message(self, error: Exception) -> str: method patient_everything (line 358) | async def patient_everything( method search_resources (line 405) | async def search_resources( method read_resource (line 482) | async def read_resource( method create_resource (line 501) | async def create_resource( method update_resource (line 523) | async def update_resource( method delete_resource (line 550) | async def delete_resource( method start_import_job (line 569) | async def start_import_job( method start_export_job (line 630) | async def start_export_job( method list_jobs (line 653) | async def list_jobs( method _get_aws_auth (line 686) | def _get_aws_auth(self): FILE: src/healthlake-mcp-server/awslabs/healthlake_mcp_server/main.py function parse_args (line 37) | def parse_args(): function main (line 48) | async def main() -> None: function sync_main (line 71) | def sync_main() -> None: FILE: src/healthlake-mcp-server/awslabs/healthlake_mcp_server/models.py class FHIRResource (line 26) | class FHIRResource(BaseModel): class SearchParameters (line 34) | class SearchParameters(BaseModel): class CreateResourceRequest (line 41) | class CreateResourceRequest(BaseModel): method validate_datastore_id (line 50) | def validate_datastore_id(cls, v): class UpdateResourceRequest (line 57) | class UpdateResourceRequest(BaseModel): method validate_datastore_id (line 67) | def validate_datastore_id(cls, v): class DatastoreFilter (line 74) | class DatastoreFilter(BaseModel): class ImportJobConfig (line 80) | class ImportJobConfig(BaseModel): method validate_datastore_id (line 90) | def validate_datastore_id(cls, v): class ExportJobConfig (line 97) | class ExportJobConfig(BaseModel): method validate_datastore_id (line 107) | def validate_datastore_id(cls, v): class JobFilter (line 114) | class JobFilter(BaseModel): FILE: src/healthlake-mcp-server/awslabs/healthlake_mcp_server/server.py class DateTimeEncoder (line 60) | class DateTimeEncoder(json.JSONEncoder): method default (line 63) | def default(self, o): class InputValidationError (line 70) | class InputValidationError(Exception): function validate_count (line 76) | def validate_count(count: int) -> int: function create_error_response (line 83) | def create_error_response(message: str, error_type: str = 'error') -> Li... function create_success_response (line 93) | def create_success_response(data: Any) -> List[TextContent]: class ToolHandler (line 98) | class ToolHandler: method __init__ (line 101) | def __init__(self, healthlake_client: HealthLakeClient, read_only: boo... method handle_tool (line 127) | async def handle_tool(self, name: str, arguments: Dict[str, Any]) -> L... method _handle_list_datastores (line 139) | async def _handle_list_datastores(self, args: Dict[str, Any]) -> Dict[... method _handle_get_datastore (line 143) | async def _handle_get_datastore(self, args: Dict[str, Any]) -> Dict[st... method _handle_create (line 148) | async def _handle_create(self, args: Dict[str, Any]) -> Dict[str, Any]: method _handle_read (line 160) | async def _handle_read(self, args: Dict[str, Any]) -> Dict[str, Any]: method _handle_update (line 169) | async def _handle_update(self, args: Dict[str, Any]) -> Dict[str, Any]: method _handle_delete (line 182) | async def _handle_delete(self, args: Dict[str, Any]) -> Dict[str, Any]: method _handle_search (line 194) | async def _handle_search(self, args: Dict[str, Any]) -> Dict[str, Any]: method _handle_patient_everything (line 212) | async def _handle_patient_everything(self, args: Dict[str, Any]) -> Di... method _handle_import_job (line 228) | async def _handle_import_job(self, args: Dict[str, Any]) -> Dict[str, ... method _handle_export_job (line 242) | async def _handle_export_job(self, args: Dict[str, Any]) -> Dict[str, ... method _handle_list_jobs (line 255) | async def _handle_list_jobs(self, args: Dict[str, Any]) -> Dict[str, A... function create_healthlake_server (line 267) | def create_healthlake_server(read_only: bool = False) -> Server: FILE: src/healthlake-mcp-server/tests/conftest.py function sample_datastore_id (line 7) | def sample_datastore_id(): function sample_args (line 13) | def sample_args(): FILE: src/healthlake-mcp-server/tests/test_fhir_client_comprehensive.py class TestValidateDatastoreId (line 14) | class TestValidateDatastoreId: method test_valid_datastore_id (line 17) | def test_valid_datastore_id(self): method test_invalid_length_short (line 23) | def test_invalid_length_short(self): method test_invalid_length_long (line 28) | def test_invalid_length_long(self): method test_empty_datastore_id (line 33) | def test_empty_datastore_id(self): class TestHealthLakeClientInit (line 39) | class TestHealthLakeClientInit: method test_init_with_region (line 43) | def test_init_with_region(self, mock_session): method test_init_no_credentials (line 55) | def test_init_no_credentials(self, mock_session): class TestAsyncDatastoreOperations (line 63) | class TestAsyncDatastoreOperations: method mock_client (line 67) | def mock_client(self): method test_list_datastores_success (line 75) | async def test_list_datastores_success(self, mock_client): method test_list_datastores_with_filter (line 90) | async def test_list_datastores_with_filter(self, mock_client): method test_list_datastores_client_error (line 104) | async def test_list_datastores_client_error(self, mock_client): method test_get_datastore_details_success (line 114) | async def test_get_datastore_details_success(self, mock_client): method test_get_datastore_details_client_error (line 130) | async def test_get_datastore_details_client_error(self, mock_client): class TestAsyncCRUDOperations (line 142) | class TestAsyncCRUDOperations: method mock_client_with_auth (line 146) | def mock_client_with_auth(self): method test_read_resource_success (line 161) | async def test_read_resource_success(self, mock_httpx, mock_client_wit... method test_create_resource_success (line 182) | async def test_create_resource_success(self, mock_httpx, mock_client_w... method test_update_resource_success (line 203) | async def test_update_resource_success(self, mock_httpx, mock_client_w... method test_delete_resource_success (line 224) | async def test_delete_resource_success(self, mock_httpx, mock_client_w... method test_crud_operation_http_error (line 243) | async def test_crud_operation_http_error(self, mock_httpx, mock_client... method test_validate_search_request_valid (line 259) | def test_validate_search_request_valid(self): method test_validate_search_request_empty_resource_type (line 267) | def test_validate_search_request_empty_resource_type(self): method test_validate_search_request_invalid_count_low (line 275) | def test_validate_search_request_invalid_count_low(self): method test_validate_search_request_invalid_count_high (line 283) | def test_validate_search_request_invalid_count_high(self): method test_validate_search_request_invalid_include_format (line 291) | def test_validate_search_request_invalid_include_format(self): method test_validate_search_request_invalid_revinclude_format (line 301) | def test_validate_search_request_invalid_revinclude_format(self): class TestBundleProcessing (line 312) | class TestBundleProcessing: method test_process_bundle_basic (line 315) | def test_process_bundle_basic(self): method test_process_bundle_with_next_link (line 338) | def test_process_bundle_with_next_link(self): method test_process_bundle_missing_total (line 358) | def test_process_bundle_missing_total(self): class TestSearchRequestBuilding (line 369) | class TestSearchRequestBuilding: method test_build_search_request_basic (line 372) | def test_build_search_request_basic(self): method test_build_search_request_with_params (line 385) | def test_build_search_request_with_params(self): method test_build_search_request_with_modifiers (line 399) | def test_build_search_request_with_modifiers(self): method test_build_search_request_with_includes (line 413) | def test_build_search_request_with_includes(self): method test_build_search_request_with_next_token (line 428) | def test_build_search_request_with_next_token(self): class TestErrorHandling (line 445) | class TestErrorHandling: method test_fhir_search_error_creation (line 448) | def test_fhir_search_error_creation(self): method test_create_helpful_error_message_400 (line 455) | def test_create_helpful_error_message_400(self): method test_create_helpful_error_message_validation (line 465) | def test_create_helpful_error_message_validation(self): method test_create_helpful_error_message_generic (line 475) | def test_create_helpful_error_message_generic(self): class TestExportJobOperations (line 485) | class TestExportJobOperations: method mock_client (line 489) | def mock_client(self): method test_start_export_job_success (line 497) | async def test_start_export_job_success(self, mock_client): method test_start_export_job_with_job_name (line 516) | async def test_start_export_job_with_job_name(self, mock_client): method test_start_export_job_client_error (line 537) | async def test_start_export_job_client_error(self, mock_client): class TestAWSAuth (line 552) | class TestAWSAuth: method test_aws_auth_initialization (line 555) | def test_aws_auth_initialization(self): method test_aws_auth_custom_service (line 564) | def test_aws_auth_custom_service(self): class TestAsyncJobOperations (line 572) | class TestAsyncJobOperations: method mock_client (line 576) | def mock_client(self): method test_start_import_job_success (line 584) | async def test_start_import_job_success(self, mock_client): method test_start_import_job_validation_error (line 600) | async def test_start_import_job_validation_error(self, mock_client): method test_list_jobs_both_types (line 611) | async def test_list_jobs_both_types(self, mock_client): method test_list_jobs_import_only (line 625) | async def test_list_jobs_import_only(self, mock_client): method test_list_jobs_export_only (line 638) | async def test_list_jobs_export_only(self, mock_client): method test_list_jobs_with_status_filter (line 651) | async def test_list_jobs_with_status_filter(self, mock_client): class TestAWSAuthFlow (line 666) | class TestAWSAuthFlow: method mock_request (line 670) | def mock_request(self): method mock_credentials (line 681) | def mock_credentials(self): method test_aws_auth_flow_post_request (line 689) | def test_aws_auth_flow_post_request(self, mock_request, mock_credentia... method test_aws_auth_flow_get_request (line 725) | def test_aws_auth_flow_get_request(self, mock_credentials): method test_aws_auth_flow_with_content_length (line 756) | def test_aws_auth_flow_with_content_length(self, mock_request, mock_cr... method test_aws_auth_flow_custom_service (line 777) | def test_aws_auth_flow_custom_service(self, mock_request, mock_credent... class TestAWSAuthMethod (line 790) | class TestAWSAuthMethod: method mock_client (line 794) | def mock_client(self): method test_get_aws_auth_success (line 802) | def test_get_aws_auth_success(self, mock_client): method test_get_aws_auth_no_credentials (line 813) | def test_get_aws_auth_no_credentials(self, mock_client): class TestHTTPErrorScenarios (line 821) | class TestHTTPErrorScenarios: method mock_client_with_auth (line 825) | def mock_client_with_auth(self): method test_search_resources_http_timeout (line 840) | async def test_search_resources_http_timeout(self, mock_httpx, mock_cl... method test_search_resources_http_400_error (line 855) | async def test_search_resources_http_400_error(self, mock_httpx, mock_... method test_patient_everything_connection_error (line 879) | async def test_patient_everything_connection_error(self, mock_httpx, m... method test_create_resource_json_decode_error (line 894) | async def test_create_resource_json_decode_error(self, mock_httpx, moc... class TestBundleProcessingEdgeCases (line 910) | class TestBundleProcessingEdgeCases: method test_process_bundle_with_includes_complex (line 913) | def test_process_bundle_with_includes_complex(self): method test_process_bundle_malformed_pagination_url (line 948) | def test_process_bundle_malformed_pagination_url(self): method test_build_search_request_list_values (line 964) | def test_build_search_request_list_values(self): class TestFHIRSearchAdvanced (line 979) | class TestFHIRSearchAdvanced: method test_search_with_chained_params (line 982) | def test_search_with_chained_params(self): class TestFHIRErrorHandling (line 1003) | class TestFHIRErrorHandling: method test_pagination_error_handling (line 1006) | def test_pagination_error_handling(self): class TestAWSAuthErrors (line 1023) | class TestAWSAuthErrors: method test_client_initialization_with_no_credentials (line 1027) | def test_client_initialization_with_no_credentials(self, mock_session): class TestBundleProcessingExtended (line 1038) | class TestBundleProcessingExtended: method test_process_bundle_url_parsing_error (line 1042) | def test_process_bundle_url_parsing_error(self, mock_session): class TestJobOperationErrorHandling (line 1064) | class TestJobOperationErrorHandling: method test_start_import_job_validation_exception (line 1069) | async def test_start_import_job_validation_exception(self, mock_session): method test_start_import_job_access_denied (line 1094) | async def test_start_import_job_access_denied(self, mock_session): method test_start_import_job_resource_not_found (line 1119) | async def test_start_import_job_resource_not_found(self, mock_session): method test_list_jobs_client_error (line 1144) | async def test_list_jobs_client_error(self, mock_session): class TestFHIRSearchValidationExtended (line 1163) | class TestFHIRSearchValidationExtended: method test_validate_search_request_empty_resource_type (line 1167) | def test_validate_search_request_empty_resource_type(self, mock_session): method test_validate_search_request_invalid_include_format (line 1180) | def test_validate_search_request_invalid_include_format(self, mock_ses... method test_validate_search_request_invalid_revinclude_format (line 1195) | def test_validate_search_request_invalid_revinclude_format(self, mock_... class TestAWSAuthExtended (line 1210) | class TestAWSAuthExtended: method test_get_aws_auth_no_credentials_error (line 1213) | def test_get_aws_auth_no_credentials_error(self): FILE: src/healthlake-mcp-server/tests/test_fhir_error_scenarios.py class TestFHIRErrorScenarios (line 14) | class TestFHIRErrorScenarios: method client (line 18) | def client(self): method test_search_with_invalid_parameters (line 23) | async def test_search_with_invalid_parameters(self, client): method test_patient_everything_error_handling (line 32) | async def test_patient_everything_error_handling(self, client): method test_resource_operations_network_errors (line 46) | async def test_resource_operations_network_errors(self, client): method test_import_job_error_scenarios (line 66) | async def test_import_job_error_scenarios(self, client): method test_list_jobs_invalid_type (line 115) | async def test_list_jobs_invalid_type(self, client): method test_helpful_error_message_creation (line 122) | async def test_helpful_error_message_creation(self, client): method test_bundle_processing_edge_cases (line 129) | async def test_bundle_processing_edge_cases(self, client): method test_auth_error_handling (line 147) | async def test_auth_error_handling(self, client): method test_validate_datastore_id_edge_cases (line 153) | def test_validate_datastore_id_edge_cases(self): method test_search_error_re_raise (line 167) | async def test_search_error_re_raise(self, client): method test_export_job_error_handling (line 173) | async def test_export_job_error_handling(self, client): method test_pagination_next_url_extraction (line 188) | async def test_pagination_next_url_extraction(self, client): method test_import_job_with_kms_key (line 203) | async def test_import_job_with_kms_key(self, client): method test_import_job_with_name (line 220) | async def test_import_job_with_name(self, client): method test_import_job_unknown_error_coverage (line 237) | async def test_import_job_unknown_error_coverage(self, client): method test_list_export_jobs_with_status_filter (line 253) | async def test_list_export_jobs_with_status_filter(self, client): method test_import_job_invalid_output_config_coverage (line 264) | async def test_import_job_invalid_output_config_coverage(self, client): FILE: src/healthlake-mcp-server/tests/test_fhir_operations.py class TestHealthLakeClient (line 9) | class TestHealthLakeClient: method test_client_initialization (line 13) | def test_client_initialization(self, mock_session): method test_get_aws_auth_success (line 24) | def test_get_aws_auth_success(self, mock_session): class TestDatastoreOperations (line 43) | class TestDatastoreOperations: method mock_client (line 47) | def mock_client(self): method test_list_datastores_success (line 55) | async def test_list_datastores_success(self, mock_client): method test_get_datastore_details_success (line 66) | async def test_get_datastore_details_success(self, mock_client): class TestResourceOperations (line 79) | class TestResourceOperations: method mock_client (line 83) | def mock_client(self): method test_create_resource_success (line 91) | async def test_create_resource_success(self, mock_client): method test_read_resource_success (line 114) | async def test_read_resource_success(self, mock_client): class TestSearchOperations (line 137) | class TestSearchOperations: method mock_client (line 141) | def mock_client(self): method test_search_validation_empty_resource_type (line 149) | async def test_search_validation_empty_resource_type(self, mock_client): method test_search_validation_invalid_count (line 164) | async def test_search_validation_invalid_count(self, mock_client): class TestJobOperations (line 180) | class TestJobOperations: method mock_client (line 184) | def mock_client(self): method test_start_import_job_success (line 192) | async def test_start_import_job_success(self, mock_client): method test_start_export_job_success (line 207) | async def test_start_export_job_success(self, mock_client): method test_list_jobs_both_types (line 221) | async def test_list_jobs_both_types(self, mock_client): class TestErrorHandling (line 235) | class TestErrorHandling: method mock_client (line 239) | def mock_client(self): method test_client_error_handling (line 247) | async def test_client_error_handling(self, mock_client): method test_list_jobs_error_handling (line 258) | async def test_list_jobs_error_handling(self, mock_client): class TestAWSAuth (line 274) | class TestAWSAuth: method test_aws_auth_initialization (line 277) | def test_aws_auth_initialization(self): method test_aws_auth_custom_service (line 286) | def test_aws_auth_custom_service(self): FILE: src/healthlake-mcp-server/tests/test_integration_mock_based.py class TestPhase1ComponentIntegration (line 8) | class TestPhase1ComponentIntegration: method test_server_to_client_integration (line 11) | async def test_server_to_client_integration(self): class TestPhase2EndToEndFlow (line 41) | class TestPhase2EndToEndFlow: method test_complete_tool_call_flow (line 44) | async def test_complete_tool_call_flow(self): class TestPhase3RealisticScenarios (line 60) | class TestPhase3RealisticScenarios: method test_user_creates_then_updates_patient_scenario (line 63) | async def test_user_creates_then_updates_patient_scenario(self): method test_multi_step_workflow_integration (line 114) | async def test_multi_step_workflow_integration(self): FILE: src/healthlake-mcp-server/tests/test_main.py class TestMainFunction (line 8) | class TestMainFunction: method test_main_success (line 14) | async def test_main_success(self, mock_stdio_server, mock_create_serve... method test_main_exception_handling (line 46) | async def test_main_exception_handling(self, mock_logger, mock_create_... class TestSyncMain (line 64) | class TestSyncMain: method test_sync_main_calls_asyncio_run (line 68) | def test_sync_main_calls_asyncio_run(self, mock_asyncio_run): class TestMainGuard (line 75) | class TestMainGuard: method test_main_guard_not_executed_when_imported (line 78) | def test_main_guard_not_executed_when_imported(self): FILE: src/healthlake-mcp-server/tests/test_main_edge_cases.py class TestMainEdgeCases (line 6) | class TestMainEdgeCases: method test_sync_main_function (line 9) | def test_sync_main_function(self): method test_main_module_name_check (line 19) | def test_main_module_name_check(self): FILE: src/healthlake-mcp-server/tests/test_mcp_integration_coverage.py class TestMCPIntegrationCoverage (line 24) | class TestMCPIntegrationCoverage: method test_mcp_call_tool_validation_error (line 27) | async def test_mcp_call_tool_validation_error(self): method test_mcp_call_tool_client_error_not_found (line 49) | async def test_mcp_call_tool_client_error_not_found(self): method test_mcp_call_tool_client_error_validation_exception (line 78) | async def test_mcp_call_tool_client_error_validation_exception(self): method test_mcp_call_tool_client_error_unknown (line 111) | async def test_mcp_call_tool_client_error_unknown(self): method test_mcp_call_tool_no_credentials_error (line 138) | async def test_mcp_call_tool_no_credentials_error(self): method test_mcp_call_tool_unexpected_error (line 161) | async def test_mcp_call_tool_unexpected_error(self): method test_mcp_list_tools_handler (line 184) | async def test_mcp_list_tools_handler(self): method test_mcp_list_resources_handler_success (line 197) | async def test_mcp_list_resources_handler_success(self): method test_mcp_list_resources_handler_error (line 226) | async def test_mcp_list_resources_handler_error(self): method test_mcp_read_resource_handler_success (line 242) | async def test_mcp_read_resource_handler_success(self): method test_mcp_read_resource_handler_invalid_uri (line 268) | async def test_mcp_read_resource_handler_invalid_uri(self): FILE: src/healthlake-mcp-server/tests/test_models.py class TestFHIRResource (line 18) | class TestFHIRResource: method test_valid_fhir_resource (line 21) | def test_valid_fhir_resource(self): method test_fhir_resource_without_id (line 27) | def test_fhir_resource_without_id(self): class TestSearchParameters (line 34) | class TestSearchParameters: method test_valid_search_parameters (line 37) | def test_valid_search_parameters(self): method test_default_count (line 43) | def test_default_count(self): class TestCreateResourceRequest (line 49) | class TestCreateResourceRequest: method test_valid_create_request (line 52) | def test_valid_create_request(self): method test_invalid_datastore_id (line 63) | def test_invalid_datastore_id(self): class TestUpdateResourceRequest (line 73) | class TestUpdateResourceRequest: method test_valid_update_request (line 76) | def test_valid_update_request(self): class TestDatastoreFilter (line 89) | class TestDatastoreFilter: method test_valid_active_filter (line 92) | def test_valid_active_filter(self): method test_valid_creating_filter (line 97) | def test_valid_creating_filter(self): method test_none_status (line 102) | def test_none_status(self): method test_invalid_status_value (line 107) | def test_invalid_status_value(self): class TestImportJobConfig (line 113) | class TestImportJobConfig: method test_valid_import_config (line 116) | def test_valid_import_config(self): method test_import_config_with_job_name (line 126) | def test_import_config_with_job_name(self): class TestExportJobConfig (line 137) | class TestExportJobConfig: method test_valid_export_config (line 140) | def test_valid_export_config(self): method test_export_config_with_job_name (line 150) | def test_export_config_with_job_name(self): class TestJobFilter (line 161) | class TestJobFilter: method test_valid_import_job_filter (line 164) | def test_valid_import_job_filter(self): method test_valid_export_job_filter (line 170) | def test_valid_export_job_filter(self): method test_invalid_job_status (line 176) | def test_invalid_job_status(self): method test_invalid_job_type (line 181) | def test_invalid_job_type(self): class TestValidationFunctions (line 187) | class TestValidationFunctions: method test_validate_datastore_id_valid (line 190) | def test_validate_datastore_id_valid(self): method test_validate_datastore_id_invalid_length (line 196) | def test_validate_datastore_id_invalid_length(self): method test_validate_datastore_id_empty (line 201) | def test_validate_datastore_id_empty(self): FILE: src/healthlake-mcp-server/tests/test_models_edge_cases.py class TestModelsEdgeCases (line 13) | class TestModelsEdgeCases: method test_create_resource_request_invalid_datastore_id (line 16) | def test_create_resource_request_invalid_datastore_id(self): method test_update_resource_request_invalid_datastore_id (line 25) | def test_update_resource_request_invalid_datastore_id(self): method test_import_job_config_invalid_datastore_id (line 35) | def test_import_job_config_invalid_datastore_id(self): method test_export_job_config_invalid_datastore_id (line 44) | def test_export_job_config_invalid_datastore_id(self): method test_valid_alphanumeric_datastore_ids (line 53) | def test_valid_alphanumeric_datastore_ids(self): FILE: src/healthlake-mcp-server/tests/test_readonly_mode.py class TestParseArgs (line 29) | class TestParseArgs: method test_parse_args_readonly_flag (line 32) | def test_parse_args_readonly_flag(self): method test_parse_args_no_readonly_flag (line 38) | def test_parse_args_no_readonly_flag(self): method test_parse_args_help_message (line 44) | def test_parse_args_help_message(self): class TestReadOnlyModeLogging (line 51) | class TestReadOnlyModeLogging: method test_readonly_mode_logging (line 58) | async def test_readonly_mode_logging( method test_full_mode_logging (line 93) | async def test_full_mode_logging( class TestToolHandlerReadOnly (line 123) | class TestToolHandlerReadOnly: method test_readonly_handler_initialization (line 127) | def test_readonly_handler_initialization(self, mock_client): method test_full_handler_initialization (line 136) | def test_full_handler_initialization(self, mock_client): method test_readonly_blocks_write_tools (line 145) | async def test_readonly_blocks_write_tools(self, mock_client): method test_readonly_allows_read_tools (line 156) | async def test_readonly_allows_read_tools(self, mock_client): class TestWriteOperationSafetyChecks (line 172) | class TestWriteOperationSafetyChecks: method test_create_safety_check (line 176) | async def test_create_safety_check(self, mock_client): method test_update_safety_check (line 184) | async def test_update_safety_check(self, mock_client): method test_delete_safety_check (line 192) | async def test_delete_safety_check(self, mock_client): method test_import_job_safety_check (line 200) | async def test_import_job_safety_check(self, mock_client): method test_export_job_safety_check (line 208) | async def test_export_job_safety_check(self, mock_client): class TestServerCreation (line 216) | class TestServerCreation: method test_create_readonly_server (line 220) | def test_create_readonly_server(self, mock_client): method test_create_full_server (line 226) | def test_create_full_server(self, mock_client): method test_create_server_default_mode (line 232) | def test_create_server_default_mode(self, mock_client): class TestToolFiltering (line 238) | class TestToolFiltering: method test_readonly_tool_filtering (line 241) | async def test_readonly_tool_filtering(self): method test_full_mode_tool_availability (line 250) | async def test_full_mode_tool_availability(self): class TestReadOnlyErrorHandling (line 260) | class TestReadOnlyErrorHandling: method test_readonly_error_message_format (line 263) | def test_readonly_error_message_format(self): method test_readonly_violation_detection (line 269) | def test_readonly_violation_detection(self): FILE: src/healthlake-mcp-server/tests/test_server_core.py class TestServerCreation (line 15) | class TestServerCreation: method test_server_creation (line 19) | def test_server_creation(self, mock_client_class): class TestDateTimeEncoder (line 30) | class TestDateTimeEncoder: method test_datetime_encoding (line 33) | def test_datetime_encoding(self): method test_strftime_object_encoding (line 40) | def test_strftime_object_encoding(self): class TestResponseHelpers (line 55) | class TestResponseHelpers: method test_create_error_response (line 58) | def test_create_error_response(self): method test_create_success_response (line 66) | def test_create_success_response(self): method test_create_success_response_with_datetime (line 73) | def test_create_success_response_with_datetime(self): class TestToolHandlers (line 81) | class TestToolHandlers: method test_list_datastores_handler (line 85) | def test_list_datastores_handler(self, mock_client_class): method test_get_datastore_details_handler (line 105) | def test_get_datastore_details_handler(self, mock_client_class): class TestErrorHandling (line 129) | class TestErrorHandling: method test_input_validation_error_handling (line 132) | def test_input_validation_error_handling(self): method test_client_error_handling (line 141) | def test_client_error_handling(self): class TestResourceLogic (line 164) | class TestResourceLogic: method test_status_emoji_logic (line 167) | def test_status_emoji_logic(self): method test_datastore_name_fallback (line 179) | def test_datastore_name_fallback(self): method test_uri_processing (line 191) | def test_uri_processing(self): method test_json_encoding_with_datetime (line 207) | def test_json_encoding_with_datetime(self): FILE: src/healthlake-mcp-server/tests/test_server_error_handling.py class TestServerErrorHandling (line 14) | class TestServerErrorHandling: method test_resource_read_invalid_uri (line 17) | async def test_resource_read_invalid_uri(self): method test_tool_handler_validation_errors (line 28) | async def test_tool_handler_validation_errors(self): method test_tool_handler_aws_errors (line 39) | async def test_tool_handler_aws_errors(self): method test_tool_handler_credential_errors (line 82) | async def test_tool_handler_credential_errors(self): method test_list_resources_error_handling (line 98) | async def test_list_resources_error_handling(self): method test_server_integration_error_paths (line 108) | async def test_server_integration_error_paths(self): method test_handle_call_tool_error_paths (line 124) | async def test_handle_call_tool_error_paths(self): method test_datastore_id_extraction (line 142) | async def test_datastore_id_extraction(self): FILE: src/healthlake-mcp-server/tests/test_server_mcp_handlers.py class TestMCPServerHandlers (line 9) | class TestMCPServerHandlers: method test_list_resources_handler_with_datastores (line 13) | async def test_list_resources_handler_with_datastores(self, mock_clien... method test_list_resources_handler_exception (line 59) | async def test_list_resources_handler_exception(self, mock_client_class): method test_read_resource_handler_valid_uri (line 73) | async def test_read_resource_handler_valid_uri(self, mock_client_class): method test_read_resource_handler_invalid_uri (line 96) | async def test_read_resource_handler_invalid_uri(self, mock_client_cla... method test_call_tool_handler_validation_error (line 109) | async def test_call_tool_handler_validation_error(self, mock_client_cl... method test_call_tool_handler_client_error_resource_not_found (line 129) | async def test_call_tool_handler_client_error_resource_not_found(self,... method test_call_tool_handler_client_error_validation (line 148) | async def test_call_tool_handler_client_error_validation(self, mock_cl... method test_call_tool_handler_no_credentials_error (line 171) | async def test_call_tool_handler_no_credentials_error(self, mock_clien... method test_call_tool_handler_generic_exception (line 188) | async def test_call_tool_handler_generic_exception(self, mock_client_c... FILE: src/healthlake-mcp-server/tests/test_server_toolhandler.py class TestValidationFunctions (line 19) | class TestValidationFunctions: method test_validate_count_valid (line 22) | def test_validate_count_valid(self): method test_validate_count_too_low (line 28) | def test_validate_count_too_low(self): method test_validate_count_too_high (line 33) | def test_validate_count_too_high(self): class TestToolHandler (line 39) | class TestToolHandler: method handler (line 43) | def handler(self): method test_handle_list_datastores (line 48) | async def test_handle_list_datastores(self, handler): method test_handle_get_datastore_details (line 59) | async def test_handle_get_datastore_details(self, handler): method test_handle_create_resource (line 72) | async def test_handle_create_resource(self, handler): method test_handle_read_resource (line 88) | async def test_handle_read_resource(self, handler): method test_handle_update_resource (line 104) | async def test_handle_update_resource(self, handler): method test_handle_delete_resource (line 121) | async def test_handle_delete_resource(self, handler): method test_handle_search_resources (line 137) | async def test_handle_search_resources(self, handler): method test_handle_patient_everything (line 153) | async def test_handle_patient_everything(self, handler): method test_handle_start_import_job (line 167) | async def test_handle_start_import_job(self, handler): method test_handle_start_export_job (line 184) | async def test_handle_start_export_job(self, handler): method test_handle_list_jobs (line 200) | async def test_handle_list_jobs(self, handler): method test_handle_unknown_tool (line 215) | async def test_handle_unknown_tool(self, handler): class TestServerHandlers (line 221) | class TestServerHandlers: method test_server_list_resources_success (line 225) | def test_server_list_resources_success(self, mock_client_class): method test_server_read_resource_success (line 253) | def test_server_read_resource_success(self, mock_client_class): method test_server_call_tool_error_handling (line 280) | def test_server_call_tool_error_handling(self, mock_client_class): class TestDateTimeEncoderComplete (line 333) | class TestDateTimeEncoderComplete: method test_datetime_encoder_with_datetime (line 336) | def test_datetime_encoder_with_datetime(self): method test_datetime_encoder_with_strftime_object (line 343) | def test_datetime_encoder_with_strftime_object(self): method test_datetime_encoder_with_invalid_object (line 359) | def test_datetime_encoder_with_invalid_object(self): class TestResponseFunctions (line 367) | class TestResponseFunctions: method test_create_error_response_basic (line 370) | def test_create_error_response_basic(self): method test_create_error_response_with_type (line 378) | def test_create_error_response_with_type(self): method test_create_success_response_basic (line 385) | def test_create_success_response_basic(self): method test_create_success_response_with_datetime (line 394) | def test_create_success_response_with_datetime(self): FILE: src/healthlake-mcp-server/tests/test_server_validation.py class TestServerValidationLogic (line 8) | class TestServerValidationLogic: method handler (line 12) | def handler(self): method test_search_resources_count_validation_low (line 17) | async def test_search_resources_count_validation_low(self, handler): method test_search_resources_count_validation_high (line 31) | async def test_search_resources_count_validation_high(self, handler): method test_search_resources_count_validation_valid (line 45) | async def test_search_resources_count_validation_valid(self, handler): method test_patient_everything_count_validation_low (line 70) | async def test_patient_everything_count_validation_low(self, handler): method test_patient_everything_count_validation_high (line 84) | async def test_patient_everything_count_validation_high(self, handler): method test_patient_everything_count_validation_valid (line 98) | async def test_patient_everything_count_validation_valid(self, handler): method test_search_resources_default_count (line 123) | async def test_search_resources_default_count(self, handler): method test_patient_everything_default_count (line 146) | async def test_patient_everything_default_count(self, handler): FILE: src/iam-mcp-server/awslabs/iam_mcp_server/aws_client.py function get_iam_client (line 25) | def get_iam_client(region: Optional[str] = None) -> Any: function get_aws_client (line 56) | def get_aws_client(service_name: str, region: Optional[str] = None) -> Any: FILE: src/iam-mcp-server/awslabs/iam_mcp_server/context.py class Context (line 20) | class Context: method initialize (line 27) | def initialize(cls, readonly: bool = False, region: Optional[str] = No... method is_readonly (line 38) | def is_readonly(cls) -> bool: method get_region (line 43) | def get_region(cls) -> Optional[str]: method set_region (line 48) | def set_region(cls, region: str): method set_readonly (line 53) | def set_readonly(cls, readonly: bool): FILE: src/iam-mcp-server/awslabs/iam_mcp_server/errors.py class IamMcpError (line 20) | class IamMcpError(Exception): method __init__ (line 23) | def __init__(self, message: str, error_code: str = 'IamMcpError'): class IamClientError (line 35) | class IamClientError(IamMcpError): method __init__ (line 38) | def __init__(self, message: str): class IamPermissionError (line 47) | class IamPermissionError(IamMcpError): method __init__ (line 50) | def __init__(self, message: str): class IamResourceNotFoundError (line 59) | class IamResourceNotFoundError(IamMcpError): method __init__ (line 62) | def __init__(self, message: str): class IamValidationError (line 71) | class IamValidationError(IamMcpError): method __init__ (line 74) | def __init__(self, message: str): function handle_iam_error (line 83) | def handle_iam_error(error: Exception) -> IamMcpError: FILE: src/iam-mcp-server/awslabs/iam_mcp_server/models.py class IamUser (line 21) | class IamUser(BaseModel): class IamRole (line 34) | class IamRole(BaseModel): class IamPolicy (line 51) | class IamPolicy(BaseModel): class IamGroup (line 73) | class IamGroup(BaseModel): class AccessKey (line 83) | class AccessKey(BaseModel): class AttachedPolicy (line 91) | class AttachedPolicy(BaseModel): class UserDetailsResponse (line 98) | class UserDetailsResponse(BaseModel): class UsersListResponse (line 116) | class UsersListResponse(BaseModel): class RolesListResponse (line 125) | class RolesListResponse(BaseModel): class PoliciesListResponse (line 134) | class PoliciesListResponse(BaseModel): class CreateUserResponse (line 143) | class CreateUserResponse(BaseModel): class CreateRoleResponse (line 150) | class CreateRoleResponse(BaseModel): class CreateAccessKeyResponse (line 157) | class CreateAccessKeyResponse(BaseModel): class OperationResponse (line 169) | class OperationResponse(BaseModel): class PolicyAttachmentResponse (line 176) | class PolicyAttachmentResponse(BaseModel): class SimulationResult (line 185) | class SimulationResult(BaseModel): class PolicySimulationResponse (line 199) | class PolicySimulationResponse(BaseModel): class GroupDetailsResponse (line 210) | class GroupDetailsResponse(BaseModel): class GroupsListResponse (line 223) | class GroupsListResponse(BaseModel): class CreateGroupResponse (line 232) | class CreateGroupResponse(BaseModel): class GroupMembershipResponse (line 239) | class GroupMembershipResponse(BaseModel): class GroupPolicyAttachmentResponse (line 247) | class GroupPolicyAttachmentResponse(BaseModel): class InlinePolicy (line 255) | class InlinePolicy(BaseModel): class InlinePolicyResponse (line 262) | class InlinePolicyResponse(BaseModel): class InlinePolicyListResponse (line 272) | class InlinePolicyListResponse(BaseModel): class ManagedPolicyResponse (line 281) | class ManagedPolicyResponse(BaseModel): FILE: src/iam-mcp-server/awslabs/iam_mcp_server/server.py function list_users (line 88) | async def list_users( function get_user (line 156) | async def get_user( function create_user (line 244) | async def create_user( function delete_user (line 317) | async def delete_user( function list_roles (line 371) | async def list_roles( function create_role (line 422) | async def create_role( function list_policies (line 501) | async def list_policies( function get_managed_policy_document (line 564) | async def get_managed_policy_document( function attach_user_policy (line 621) | async def attach_user_policy( function detach_user_policy (line 654) | async def detach_user_policy( function create_access_key (line 687) | async def create_access_key( function delete_access_key (line 725) | async def delete_access_key( function simulate_principal_policy (line 758) | async def simulate_principal_policy( function list_groups (line 820) | async def list_groups( function get_group (line 879) | async def get_group( function create_group (line 944) | async def create_group( function delete_group (line 991) | async def delete_group( function add_user_to_group (line 1038) | async def add_user_to_group( function remove_user_from_group (line 1069) | async def remove_user_from_group( function attach_group_policy (line 1100) | async def attach_group_policy( function detach_group_policy (line 1131) | async def detach_group_policy( function put_user_policy (line 1165) | async def put_user_policy( function get_user_policy (line 1239) | async def get_user_policy( function delete_user_policy (line 1282) | async def delete_user_policy( function put_role_policy (line 1333) | async def put_role_policy( function get_role_policy (line 1401) | async def get_role_policy( function delete_role_policy (line 1444) | async def delete_role_policy( function list_user_policies (line 1492) | async def list_user_policies( function list_role_policies (line 1532) | async def list_role_policies( function main (line 1571) | def main(): FILE: src/iam-mcp-server/examples/get_policy_document_example.py function main (line 27) | async def main(): FILE: src/iam-mcp-server/examples/inline_policy_demo.py function demo_user_inline_policies (line 39) | async def demo_user_inline_policies(): function demo_role_inline_policies (line 86) | async def demo_role_inline_policies(): function main (line 127) | async def main(): FILE: src/iam-mcp-server/tests/test_context.py function test_context_initialization (line 20) | def test_context_initialization(): function test_context_region (line 29) | def test_context_region(): function test_context_readonly_mode (line 43) | def test_context_readonly_mode(): FILE: src/iam-mcp-server/tests/test_errors.py function test_iam_validation_error (line 28) | def test_iam_validation_error(): function test_handle_iam_error_entity_already_exists (line 35) | def test_handle_iam_error_entity_already_exists(): function test_handle_iam_error_entity_already_exists_exception (line 49) | def test_handle_iam_error_entity_already_exists_exception(): function test_handle_iam_error_invalid_input (line 63) | def test_handle_iam_error_invalid_input(): function test_handle_iam_error_invalid_input_exception (line 75) | def test_handle_iam_error_invalid_input_exception(): function test_handle_iam_error_validation_exception (line 89) | def test_handle_iam_error_validation_exception(): function test_handle_iam_error_limit_exceeded (line 101) | def test_handle_iam_error_limit_exceeded(): function test_handle_iam_error_limit_exceeded_exception (line 113) | def test_handle_iam_error_limit_exceeded_exception(): function test_handle_iam_error_service_failure (line 125) | def test_handle_iam_error_service_failure(): function test_handle_iam_error_service_failure_exception (line 138) | def test_handle_iam_error_service_failure_exception(): function test_handle_iam_error_throttling (line 153) | def test_handle_iam_error_throttling(): function test_handle_iam_error_throttling_exception (line 166) | def test_handle_iam_error_throttling_exception(): function test_handle_iam_error_incomplete_signature (line 179) | def test_handle_iam_error_incomplete_signature(): function test_handle_iam_error_invalid_action (line 193) | def test_handle_iam_error_invalid_action(): function test_handle_iam_error_invalid_client_token_id (line 205) | def test_handle_iam_error_invalid_client_token_id(): function test_handle_iam_error_not_authorized (line 219) | def test_handle_iam_error_not_authorized(): function test_handle_iam_error_request_expired (line 231) | def test_handle_iam_error_request_expired(): function test_handle_iam_error_signature_does_not_match (line 243) | def test_handle_iam_error_signature_does_not_match(): function test_handle_iam_error_token_refresh_required (line 257) | def test_handle_iam_error_token_refresh_required(): function test_handle_iam_error_group_already_exists (line 274) | def test_handle_iam_error_group_already_exists(): function test_handle_iam_error_group_not_found (line 288) | def test_handle_iam_error_group_not_found(): function test_handle_iam_error_group_delete_conflict (line 302) | def test_handle_iam_error_group_delete_conflict(): function test_handle_iam_error_group_policy_attachment (line 319) | def test_handle_iam_error_group_policy_attachment(): function test_handle_iam_error_user_not_in_group (line 336) | def test_handle_iam_error_user_not_in_group(): FILE: src/iam-mcp-server/tests/test_inline_policies.py function sample_policy_document (line 37) | def sample_policy_document(): function sample_policy_document_str (line 52) | def sample_policy_document_str(): class TestUserInlinePolicies (line 68) | class TestUserInlinePolicies: method test_put_user_policy_success_dict (line 72) | async def test_put_user_policy_success_dict(self, mock_get_client, sam... method test_put_user_policy_success_string (line 99) | async def test_put_user_policy_success_string( method test_put_user_policy_readonly_mode (line 127) | async def test_put_user_policy_readonly_mode(self, mock_get_client, sa... method test_put_user_policy_validation_errors (line 140) | async def test_put_user_policy_validation_errors(self, sample_policy_d... method test_get_user_policy_success (line 163) | async def test_get_user_policy_success(self, mock_get_client, sample_p... method test_get_user_policy_validation_errors (line 187) | async def test_get_user_policy_validation_errors(self): method test_delete_user_policy_success (line 198) | async def test_delete_user_policy_success(self, mock_get_client): method test_delete_user_policy_readonly_mode (line 221) | async def test_delete_user_policy_readonly_mode(self, mock_get_client): method test_list_user_policies_success (line 231) | async def test_list_user_policies_success(self, mock_get_client): method test_list_user_policies_validation_error (line 251) | async def test_list_user_policies_validation_error(self): class TestRoleInlinePolicies (line 257) | class TestRoleInlinePolicies: method test_put_role_policy_success (line 261) | async def test_put_role_policy_success(self, mock_get_client, sample_p... method test_put_role_policy_readonly_mode (line 288) | async def test_put_role_policy_readonly_mode(self, mock_get_client, sa... method test_put_role_policy_validation_errors (line 301) | async def test_put_role_policy_validation_errors(self, sample_policy_d... method test_get_role_policy_success (line 318) | async def test_get_role_policy_success(self, mock_get_client, sample_p... method test_delete_role_policy_success (line 343) | async def test_delete_role_policy_success(self, mock_get_client): method test_list_role_policies_success (line 366) | async def test_list_role_policies_success(self, mock_get_client): class TestInlinePolicyErrorHandling (line 385) | class TestInlinePolicyErrorHandling: method test_put_user_policy_aws_error (line 389) | async def test_put_user_policy_aws_error(self, mock_get_client, sample... method test_get_user_policy_not_found (line 409) | async def test_get_user_policy_not_found(self, mock_get_client): method test_delete_user_policy_not_found (line 424) | async def test_delete_user_policy_not_found(self, mock_get_client): class TestErrorHandlingCoverage (line 440) | class TestErrorHandlingCoverage: method test_get_managed_policy_document_error_handling (line 444) | async def test_get_managed_policy_document_error_handling(self, mock_g... method test_put_user_policy_invalid_json_error (line 463) | async def test_put_user_policy_invalid_json_error(self, mock_get_client): method test_put_role_policy_invalid_json_error (line 475) | async def test_put_role_policy_invalid_json_error(self, mock_get_client): method test_get_user_policy_exception_handling (line 487) | async def test_get_user_policy_exception_handling(self, mock_get_client): method test_get_role_policy_exception_handling (line 499) | async def test_get_role_policy_exception_handling(self, mock_get_client): method test_delete_user_policy_exception_handling (line 511) | async def test_delete_user_policy_exception_handling(self, mock_get_cl... method test_delete_role_policy_exception_handling (line 524) | async def test_delete_role_policy_exception_handling(self, mock_get_cl... method test_list_user_policies_exception_handling (line 537) | async def test_list_user_policies_exception_handling(self, mock_get_cl... method test_list_role_policies_exception_handling (line 549) | async def test_list_role_policies_exception_handling(self, mock_get_cl... FILE: src/iam-mcp-server/tests/test_server.py function test_get_iam_client (line 34) | def test_get_iam_client(): function test_get_iam_client_with_region (line 48) | def test_get_iam_client_with_region(): function test_handle_iam_error_access_denied (line 63) | def test_handle_iam_error_access_denied(): function test_handle_iam_error_no_such_entity (line 79) | def test_handle_iam_error_no_such_entity(): function test_context_initialization (line 90) | def test_context_initialization(): function test_context_readonly_mode (line 98) | def test_context_readonly_mode(): function test_list_users_mock (line 108) | async def test_list_users_mock(): function test_create_user_readonly_mode (line 142) | async def test_create_user_readonly_mode(): function test_create_user_success (line 158) | async def test_create_user_success(): function test_get_iam_client_error (line 193) | def test_get_iam_client_error(): function test_get_aws_client (line 204) | def test_get_aws_client(): function test_get_aws_client_with_region (line 220) | def test_get_aws_client_with_region(): function test_get_aws_client_error (line 236) | def test_get_aws_client_error(): function test_context_get_region (line 249) | def test_context_get_region(): function test_handle_iam_error_throttling (line 260) | def test_handle_iam_error_throttling(): function test_handle_iam_error_invalid_user_type (line 274) | def test_handle_iam_error_invalid_user_type(): function test_handle_iam_error_generic (line 288) | def test_handle_iam_error_generic(): function test_list_roles (line 300) | async def test_list_roles(): function test_list_policies (line 329) | async def test_list_policies(): function test_get_managed_policy_document (line 363) | async def test_get_managed_policy_document(): function test_create_role (line 399) | async def test_create_role(): function test_create_role_invalid_json (line 440) | async def test_create_role_invalid_json(): function test_create_role_readonly (line 454) | async def test_create_role_readonly(): function test_get_user (line 473) | async def test_get_user(): function test_get_user_not_found (line 529) | async def test_get_user_not_found(): function test_delete_user (line 549) | async def test_delete_user(): function test_list_users_with_exception (line 557) | async def test_list_users_with_exception(): function test_get_user_with_exception (line 571) | async def test_get_user_with_exception(): function test_create_user_with_exception (line 585) | async def test_create_user_with_exception(): function test_delete_user_with_exception (line 599) | async def test_delete_user_with_exception(): function test_list_roles_with_exception (line 613) | async def test_list_roles_with_exception(): function test_create_role_with_exception (line 627) | async def test_create_role_with_exception(): function test_list_policies_with_exception (line 643) | async def test_list_policies_with_exception(): function test_attach_user_policy_with_exception (line 657) | async def test_attach_user_policy_with_exception(): function test_detach_user_policy_with_exception (line 673) | async def test_detach_user_policy_with_exception(): function test_create_access_key_with_exception (line 689) | async def test_create_access_key_with_exception(): function test_delete_access_key_with_exception (line 703) | async def test_delete_access_key_with_exception(): function test_simulate_principal_policy_success (line 720) | async def test_simulate_principal_policy_success(): function test_simulate_principal_policy_with_exception (line 760) | async def test_simulate_principal_policy_with_exception(): function test_delete_user_success (line 777) | async def test_delete_user_success(): function test_delete_user_readonly (line 800) | async def test_delete_user_readonly(): function test_delete_user_force (line 814) | async def test_delete_user_force(): function test_attach_user_policy (line 849) | async def test_attach_user_policy(): function test_attach_user_policy_readonly (line 870) | async def test_attach_user_policy_readonly(): function test_detach_user_policy (line 886) | async def test_detach_user_policy(): function test_detach_user_policy_readonly (line 907) | async def test_detach_user_policy_readonly(): function test_create_access_key (line 923) | async def test_create_access_key(): function test_create_access_key_readonly (line 956) | async def test_create_access_key_readonly(): function test_delete_access_key (line 970) | async def test_delete_access_key(): function test_delete_access_key_readonly (line 992) | async def test_delete_access_key_readonly(): function test_main_function (line 1011) | def test_main_function(): function test_list_groups (line 1034) | async def test_list_groups(): function test_list_groups_with_path_prefix (line 1074) | async def test_list_groups_with_path_prefix(): function test_get_group (line 1104) | async def test_get_group(): function test_create_group (line 1153) | async def test_create_group(): function test_create_group_readonly (line 1183) | async def test_create_group_readonly(): function test_delete_group (line 1194) | async def test_delete_group(): function test_delete_group_force (line 1212) | async def test_delete_group_force(): function test_delete_group_readonly (line 1250) | async def test_delete_group_readonly(): function test_add_user_to_group (line 1261) | async def test_add_user_to_group(): function test_add_user_to_group_readonly (line 1283) | async def test_add_user_to_group_readonly(): function test_remove_user_from_group (line 1294) | async def test_remove_user_from_group(): function test_remove_user_from_group_readonly (line 1316) | async def test_remove_user_from_group_readonly(): function test_attach_group_policy (line 1327) | async def test_attach_group_policy(): function test_attach_group_policy_readonly (line 1354) | async def test_attach_group_policy_readonly(): function test_detach_group_policy (line 1367) | async def test_detach_group_policy(): function test_detach_group_policy_readonly (line 1394) | async def test_detach_group_policy_readonly(): function test_list_groups_with_exception (line 1410) | async def test_list_groups_with_exception(): function test_get_group_with_exception (line 1427) | async def test_get_group_with_exception(): function test_create_group_with_exception (line 1444) | async def test_create_group_with_exception(): function test_delete_group_with_exception (line 1466) | async def test_delete_group_with_exception(): function test_add_user_to_group_with_exception (line 1483) | async def test_add_user_to_group_with_exception(): function test_attach_group_policy_with_exception (line 1503) | async def test_attach_group_policy_with_exception(): FILE: src/lambda-tool-mcp-server/awslabs/lambda_tool_mcp_server/server.py function validate_function_name (line 68) | def validate_function_name(function_name: str) -> bool: function sanitize_tool_name (line 80) | def sanitize_tool_name(name: str) -> str: function format_lambda_response (line 96) | def format_lambda_response(function_name: str, payload: bytes) -> str: function invoke_lambda_function_impl (line 107) | async def invoke_lambda_function_impl(function_name: str, parameters: di... function get_schema_from_registry (line 131) | def get_schema_from_registry(schema_arn: str) -> Optional[dict]: function create_lambda_tool (line 170) | def create_lambda_tool(function_name: str, description: str, schema_arn:... function get_schema_arn_from_function_arn (line 207) | def get_schema_arn_from_function_arn(function_arn: str) -> Optional[str]: function filter_functions_by_tag (line 237) | def filter_functions_by_tag(functions, tag_key, tag_value): function get_all_lambda_functions (line 267) | def get_all_lambda_functions(): function register_lambda_functions (line 278) | def register_lambda_functions(): function main (line 324) | def main(): FILE: src/lambda-tool-mcp-server/examples/sample_functions/customer-create/app.py function lambda_handler (line 16) | def lambda_handler(event: dict, context: dict) -> dict: FILE: src/lambda-tool-mcp-server/examples/sample_functions/customer-id-from-email/app.py function lambda_handler (line 16) | def lambda_handler(event: dict, context: dict) -> dict: FILE: src/lambda-tool-mcp-server/examples/sample_functions/customer-info-from-id/app.py function lambda_handler (line 16) | def lambda_handler(event: dict, context: dict) -> dict: FILE: src/lambda-tool-mcp-server/tests/conftest.py function mock_lambda_client (line 9) | def mock_lambda_client(): FILE: src/lambda-tool-mcp-server/tests/test_format_lambda_response.py function test_format_lambda_response_unicode_decode_error (line 12) | def test_format_lambda_response_unicode_decode_error(): FILE: src/lambda-tool-mcp-server/tests/test_integration.py class TestServerIntegration (line 16) | class TestServerIntegration: method test_mcp_initialization (line 20) | def test_mcp_initialization(self, mock_lambda_client): method test_tool_registration (line 34) | def test_tool_registration(self, mock_lambda_client, mock_create_lambd... method test_tool_invocation (line 59) | async def test_tool_invocation(self, mock_lambda_client): class TestToolFunctionality (line 87) | class TestToolFunctionality: method test_lambda_function_tool (line 92) | async def test_lambda_function_tool(self, mock_lambda_client): method test_lambda_function_tool_error (line 127) | async def test_lambda_function_tool_error(self, mock_lambda_client): FILE: src/lambda-tool-mcp-server/tests/test_integration_coverage.py class TestServerIntegrationCoverage (line 16) | class TestServerIntegrationCoverage: method test_lambda_function_binary_response (line 21) | async def test_lambda_function_binary_response(self, mock_lambda_client): method test_lambda_function_empty_response (line 51) | async def test_lambda_function_empty_response(self, mock_lambda_client): class TestToolFunctionalityCoverage (line 76) | class TestToolFunctionalityCoverage: method test_lambda_function_complex_json (line 81) | async def test_lambda_function_complex_json(self, mock_lambda_client): FILE: src/lambda-tool-mcp-server/tests/test_register_lambda_functions.py class TestRegisterLambdaFunctionsSpecific (line 13) | class TestRegisterLambdaFunctionsSpecific: method test_register_with_only_tag_key (line 19) | def test_register_with_only_tag_key(self, mock_create_lambda_tool, moc... method test_register_with_only_tag_value (line 38) | def test_register_with_only_tag_value( FILE: src/lambda-tool-mcp-server/tests/test_schema_integration.py class TestSchemaRegistry (line 17) | class TestSchemaRegistry: method test_get_schema_valid_arn (line 20) | def test_get_schema_valid_arn(self, caplog): method test_get_schema_invalid_arn_format (line 42) | def test_get_schema_invalid_arn_format(self, caplog): method test_get_schema_invalid_path (line 58) | def test_get_schema_invalid_path(self, caplog): method test_get_schema_client_error (line 76) | def test_get_schema_client_error(self, caplog): class TestSchemaArnRetrieval (line 96) | class TestSchemaArnRetrieval: method test_get_schema_arn_from_tags (line 103) | def test_get_schema_arn_from_tags(self): method test_get_schema_arn_no_tag_key_configured (line 120) | def test_get_schema_arn_no_tag_key_configured(self): method test_get_schema_arn_tag_not_found (line 135) | def test_get_schema_arn_tag_not_found(self): method test_get_schema_arn_client_error (line 152) | def test_get_schema_arn_client_error(self, caplog): class TestToolCreationWithSchema (line 175) | class TestToolCreationWithSchema: method test_create_tool_with_valid_schema (line 179) | def test_create_tool_with_valid_schema(self, mock_mcp): method test_create_tool_schema_fetch_error (line 209) | def test_create_tool_schema_fetch_error(self, mock_mcp, caplog): method test_create_tool_without_schema (line 237) | def test_create_tool_without_schema(self, mock_mcp): FILE: src/lambda-tool-mcp-server/tests/test_server.py class TestValidateFunctionName (line 21) | class TestValidateFunctionName: method test_empty_prefix_and_list (line 24) | def test_empty_prefix_and_list(self): method test_prefix_match (line 29) | def test_prefix_match(self): method test_list_match (line 35) | def test_list_match(self): method test_prefix_and_list (line 43) | def test_prefix_and_list(self): class TestSanitizeToolName (line 49) | class TestSanitizeToolName: method test_remove_prefix (line 54) | def test_remove_prefix(self): method test_invalid_characters (line 58) | def test_invalid_characters(self): method test_numeric_first_character (line 65) | def test_numeric_first_character(self): method test_valid_name (line 69) | def test_valid_name(self): class TestFormatLambdaResponse (line 73) | class TestFormatLambdaResponse: method test_json_payload (line 76) | def test_json_payload(self): method test_non_json_payload (line 83) | def test_non_json_payload(self): method test_json_decode_error (line 89) | def test_json_decode_error(self): class TestInvokeLambdaFunctionImpl (line 95) | class TestInvokeLambdaFunctionImpl: method test_successful_invocation (line 99) | async def test_successful_invocation(self, mock_lambda_client): method test_function_error (line 122) | async def test_function_error(self, mock_lambda_client): method test_non_json_response (line 138) | async def test_non_json_response(self, mock_lambda_client): class TestCreateLambdaTool (line 149) | class TestCreateLambdaTool: method test_create_tool (line 153) | def test_create_tool(self, mock_mcp): method test_create_tool_with_prefix (line 178) | def test_create_tool_with_prefix(self, mock_mcp): class TestFilterFunctionsByTag (line 192) | class TestFilterFunctionsByTag: method test_matching_tags (line 195) | def test_matching_tags(self, mock_lambda_client): method test_no_matching_tags (line 220) | def test_no_matching_tags(self, mock_lambda_client): method test_error_getting_tags (line 241) | def test_error_getting_tags(self, mock_lambda_client): class TestRegisterLambdaFunctions (line 260) | class TestRegisterLambdaFunctions: method test_register_with_prefix (line 266) | def test_register_with_prefix(self, mock_create_lambda_tool, mock_lamb... method test_register_with_list (line 284) | def test_register_with_list(self, mock_create_lambda_tool, mock_lambda... method test_register_with_tags (line 343) | def test_register_with_tags(self, mock_create_lambda_tool, mock_lambda... method test_register_with_no_filters (line 397) | def test_register_with_no_filters(self, mock_create_lambda_tool, mock_... method test_register_error_handling (line 417) | def test_register_error_handling(self, mock_lambda_client): class TestMain (line 425) | class TestMain: method test_main_stdio (line 430) | def test_main_stdio(self, mock_mcp, mock_register_lambda_functions): method test_main_default (line 445) | def test_main_default(self, mock_run): FILE: src/lambda-tool-mcp-server/tests/test_server_coverage.py class TestFormatLambdaResponseCoverage (line 20) | class TestFormatLambdaResponseCoverage: method test_unicode_decode_error (line 23) | def test_unicode_decode_error(self): method test_format_lambda_response_variants (line 40) | def test_format_lambda_response_variants(self): class TestFilterFunctionsByTagCoverage (line 56) | class TestFilterFunctionsByTagCoverage: method test_specific_error_getting_tags (line 59) | def test_specific_error_getting_tags(self, caplog): class TestRegisterLambdaFunctionsCoverage (line 84) | class TestRegisterLambdaFunctionsCoverage: method test_register_with_incomplete_tag_config (line 90) | def test_register_with_incomplete_tag_config( method test_register_with_incomplete_tag_config_reversed (line 111) | def test_register_with_incomplete_tag_config_reversed( class TestValidateFunctionNameCoverage (line 130) | class TestValidateFunctionNameCoverage: method test_validate_function_name_edge_cases (line 133) | def test_validate_function_name_edge_cases(self): class TestSanitizeToolNameCoverage (line 151) | class TestSanitizeToolNameCoverage: method test_sanitize_tool_name_edge_cases (line 154) | def test_sanitize_tool_name_edge_cases(self): FILE: src/lambda-tool-mcp-server/tests/test_server_coverage_additional.py class TestRegisterLambdaFunctionsAdditionalCoverage (line 15) | class TestRegisterLambdaFunctionsAdditionalCoverage: method test_register_with_incomplete_tag_config_direct_env (line 27) | def test_register_with_incomplete_tag_config_direct_env(self, mock_lam... FILE: src/mcp-lambda-handler/awslabs/mcp_lambda_handler/mcp_lambda_handler.py class SessionData (line 59) | class SessionData(Generic[T]): method __init__ (line 62) | def __init__(self, data: Dict[str, Any]): method get (line 66) | def get(self, key: str, default: T = None) -> T: method set (line 70) | def set(self, key: str, value: T) -> None: method raw (line 74) | def raw(self) -> Dict[str, Any]: class MCPLambdaHandler (line 79) | class MCPLambdaHandler: method __init__ (line 82) | def __init__( method get_session (line 114) | def get_session(self) -> Optional[SessionData]: method set_session (line 127) | def set_session(self, data: Dict[str, Any]) -> bool: method update_session (line 142) | def update_session(self, updater_func: Callable[[SessionData], None]) ... method tool (line 162) | def tool(self): method add_resource (line 285) | def add_resource(self, resource: Resource) -> None: method resource (line 293) | def resource( method _create_error_response (line 320) | def _create_error_response( method _error_code_to_http_status (line 345) | def _error_code_to_http_status(self, error_code: int) -> int: method _convert_result_to_content (line 356) | def _convert_result_to_content(self, result: Any) -> List[Dict]: method _create_success_response (line 389) | def _create_success_response( method handle_request (line 401) | def handle_request(self, event: Dict, context: Any) -> Dict: FILE: src/mcp-lambda-handler/awslabs/mcp_lambda_handler/session.py class SessionStore (line 34) | class SessionStore(ABC): method create_session (line 38) | def create_session(self, session_data: Optional[Dict[str, Any]] = None... method get_session (line 51) | def get_session(self, session_id: str) -> Optional[Dict[str, Any]]: method update_session (line 64) | def update_session(self, session_id: str, session_data: Dict[str, Any]... method delete_session (line 78) | def delete_session(self, session_id: str) -> bool: class NoOpSessionStore (line 91) | class NoOpSessionStore(SessionStore): method create_session (line 94) | def create_session(self, session_data: Optional[Dict[str, Any]] = None... method get_session (line 98) | def get_session(self, session_id: str) -> Optional[Dict[str, Any]]: method update_session (line 102) | def update_session(self, session_id: str, session_data: Dict[str, Any]... method delete_session (line 106) | def delete_session(self, session_id: str) -> bool: class DynamoDBSessionStore (line 111) | class DynamoDBSessionStore(SessionStore): method __init__ (line 114) | def __init__(self, table_name: str = 'mcp_sessions'): method create_session (line 125) | def create_session(self, session_data: Optional[Dict[str, Any]] = None... method get_session (line 154) | def get_session(self, session_id: str) -> Optional[Dict[str, Any]]: method update_session (line 182) | def update_session(self, session_id: str, session_data: Dict[str, Any]... method delete_session (line 205) | def delete_session(self, session_id: str) -> bool: FILE: src/mcp-lambda-handler/awslabs/mcp_lambda_handler/types.py class JSONRPCError (line 23) | class JSONRPCError: method model_dump_json (line 28) | def model_dump_json(self) -> str: class JSONRPCResponse (line 41) | class JSONRPCResponse: method model_dump_json (line 48) | def model_dump_json(self) -> str: class ServerInfo (line 62) | class ServerInfo: method model_dump (line 66) | def model_dump(self) -> Dict: class Capabilities (line 71) | class Capabilities: method model_dump (line 75) | def model_dump(self) -> Dict: class InitializeResult (line 83) | class InitializeResult: method model_dump (line 88) | def model_dump(self) -> Dict: method model_dump_json (line 95) | def model_dump_json(self) -> str: class JSONRPCRequest (line 102) | class JSONRPCRequest: method model_validate (line 109) | def model_validate(cls, data: Dict) -> 'JSONRPCRequest': class TextContent (line 119) | class TextContent: method model_dump (line 123) | def model_dump(self) -> Dict: method model_dump_json (line 126) | def model_dump_json(self) -> str: class ErrorContent (line 133) | class ErrorContent: method model_dump (line 137) | def model_dump(self) -> Dict: method model_dump_json (line 140) | def model_dump_json(self) -> str: class ImageContent (line 147) | class ImageContent: method model_dump (line 152) | def model_dump(self) -> Dict: method model_dump_json (line 155) | def model_dump_json(self) -> str: class ResourceContent (line 162) | class ResourceContent: method model_dump (line 168) | def model_dump(self) -> Dict: class Resource (line 180) | class Resource: method __post_init__ (line 186) | def __post_init__(self): method model_dump (line 191) | def model_dump(self) -> Dict: method read_content (line 199) | def read_content(self) -> 'ResourceContent': class FileResource (line 204) | class FileResource(Resource): method __init__ (line 205) | def __init__( method read_content (line 225) | def read_content(self) -> ResourceContent: class StaticResource (line 258) | class StaticResource(Resource): method __init__ (line 259) | def __init__( method read_content (line 280) | def read_content(self) -> ResourceContent: FILE: src/mcp-lambda-handler/tests/test_lambda_handler.py function test_tool_decorator_registers_tool (line 29) | def test_tool_decorator_registers_tool(): function test_get_set_update_session (line 46) | def test_get_set_update_session(monkeypatch): function test_get_set_update_session_no_session (line 67) | def test_get_set_update_session_no_session(): function test_create_error_and_success_response (line 80) | def test_create_error_and_success_response(): function test_error_code_to_http_status (line 116) | def test_error_code_to_http_status(): function test_handle_request_invalid_event (line 125) | def test_handle_request_invalid_event(): function test_handle_request_valid (line 148) | def test_handle_request_valid(monkeypatch): function test_noop_session_store (line 202) | def test_noop_session_store(): function test_dynamodb_session_store_methods (line 212) | def test_dynamodb_session_store_methods(): function test_jsonrpcerror_model_dump_json (line 249) | def test_jsonrpcerror_model_dump_json(): function test_jsonrpcresponse_model_dump_json (line 257) | def test_jsonrpcresponse_model_dump_json(): function test_serverinfo_model_dump (line 265) | def test_serverinfo_model_dump(): function test_capabilities_model_dump (line 273) | def test_capabilities_model_dump(): function test_initialize_result_model_dump_json (line 280) | def test_initialize_result_model_dump_json(): function test_jsonrpcrequest_model_validate (line 288) | def test_jsonrpcrequest_model_validate(): function test_textcontent_model_dump_json (line 296) | def test_textcontent_model_dump_json(): function test_errorcontent_model_dump_json (line 302) | def test_errorcontent_model_dump_json(): function test_imagecontent_model_dump_json (line 308) | def test_imagecontent_model_dump_json(): function make_lambda_event (line 314) | def make_lambda_event(jsonrpc_payload): function test_lambda_handler_success (line 346) | def test_lambda_handler_success(): function test_lambda_handler_invalid_json (line 380) | def test_lambda_handler_invalid_json(): function test_lambda_handler_method_not_found (line 396) | def test_lambda_handler_method_not_found(): function test_handle_request_notification (line 416) | def test_handle_request_notification(): function test_handle_request_ping (line 428) | def test_handle_request_ping(): function test_handle_request_delete_session (line 443) | def test_handle_request_delete_session(): function test_handle_request_unsupported_content_type (line 459) | def test_handle_request_unsupported_content_type(): function test_handle_request_session_required (line 468) | def test_handle_request_session_required(): function test_handle_request_tool_exception (line 485) | def test_handle_request_tool_exception(): function test_tool_decorator_no_docstring (line 506) | def test_tool_decorator_no_docstring(): function test_tool_decorator_enum_type (line 518) | def test_tool_decorator_enum_type(): function test_tool_decorator_type_hints (line 559) | def test_tool_decorator_type_hints(): function test_tool_decorator_with_no_origin_type_hints (line 582) | def test_tool_decorator_with_no_origin_type_hints(): function test_tool_decorator_optional_type_hints (line 599) | def test_tool_decorator_optional_type_hints(): function test_tool_decorator_union_type_hints (line 632) | def test_tool_decorator_union_type_hints(): function test_tool_decorator_dictionary_type_hints (line 649) | def test_tool_decorator_dictionary_type_hints(): function test_tool_decorator_list_type_hints (line 673) | def test_tool_decorator_list_type_hints(): function test_tool_decorator_recursive_dictionary_type_hints (line 694) | def test_tool_decorator_recursive_dictionary_type_hints(): function test_create_error_response_minimal (line 717) | def test_create_error_response_minimal(): function test_create_success_response_no_session (line 725) | def test_create_success_response_no_session(): function test_dynamodb_sessionstore_get_session_exception (line 733) | def test_dynamodb_sessionstore_get_session_exception(): function test_dynamodb_sessionstore_create_session_exception (line 743) | def test_dynamodb_sessionstore_create_session_exception(): function test_types_model_dump_json (line 786) | def test_types_model_dump_json(model_class, test_data, expected_checks): function test_types_model_dump (line 813) | def test_types_model_dump(model_class, test_data, expected_values): function test_handle_image_byte_streams (line 822) | def test_handle_image_byte_streams(): function test_handle_request_delete_session_failure (line 899) | def test_handle_request_delete_session_failure(): function test_handle_request_malformed_jsonrpc (line 915) | def test_handle_request_malformed_jsonrpc(): function test_handle_request_finally_clears_context (line 925) | def test_handle_request_finally_clears_context(): function test_sessiondata_methods (line 942) | def test_sessiondata_methods(): function test_dynamodb_delete_session_exception (line 953) | def test_dynamodb_delete_session_exception(): function test_resource_model_dump (line 964) | def test_resource_model_dump(): function test_resource_content_model_dump (line 987) | def test_resource_content_model_dump(): function test_static_resource (line 1014) | def test_static_resource(): function test_file_resource_text_file (line 1040) | def test_file_resource_text_file(): function test_file_resource_json_file (line 1073) | def test_file_resource_json_file(): function test_file_resource_yaml_file (line 1092) | def test_file_resource_yaml_file(): function test_file_resource_binary_file (line 1110) | def test_file_resource_binary_file(): function test_file_resource_unknown_extension (line 1137) | def test_file_resource_unknown_extension(): function test_file_resource_not_found (line 1156) | def test_file_resource_not_found(): function test_add_resource (line 1166) | def test_add_resource(): function test_resource_decorator (line 1180) | def test_resource_decorator(): function test_resource_decorator_default_mime_type (line 1236) | def test_resource_decorator_default_mime_type(): function test_handle_resources_list (line 1248) | def test_handle_resources_list(): function test_handle_resources_read (line 1284) | def test_handle_resources_read(resource_type, expected_content): function test_handle_resources_read_missing_uri (line 1345) | def test_handle_resources_read_missing_uri(): function test_handle_resources_read_not_found (line 1361) | def test_handle_resources_read_not_found(): function test_handle_resources_read_exception (line 1382) | def test_handle_resources_read_exception(): function test_initialize_includes_resources_capability (line 1411) | def test_initialize_includes_resources_capability(): function test_tool_names_preserve_snake_case (line 1430) | def test_tool_names_preserve_snake_case(): function test_multiple_resources_same_handler (line 1488) | def test_multiple_resources_same_handler(): FILE: src/memcached-mcp-server/awslabs/memcached_mcp_server/common/connection.py class MemcachedConnectionManager (line 25) | class MemcachedConnectionManager: method get_connection (line 31) | def get_connection(cls) -> RetryingClient: method close_connection (line 91) | def close_connection(cls) -> None: FILE: src/memcached-mcp-server/awslabs/memcached_mcp_server/context.py class Context (line 18) | class Context: method initialize (line 24) | def initialize(cls, readonly: bool = False): method readonly_mode (line 33) | def readonly_mode(cls) -> bool: FILE: src/memcached-mcp-server/awslabs/memcached_mcp_server/main.py function health_check (line 28) | async def health_check(request): class MemcachedMCPServer (line 36) | class MemcachedMCPServer: method run (line 39) | def run(self): function main (line 44) | def main(): FILE: src/memcached-mcp-server/awslabs/memcached_mcp_server/tools/cache.py function cache_get (line 25) | async def cache_get(key: str) -> str: function cache_gets (line 45) | async def cache_gets(key: str) -> str: function cache_get_many (line 66) | async def cache_get_many(keys: List[str]) -> str: function cache_get_multi (line 86) | async def cache_get_multi(keys: List[str]) -> str: function cache_set (line 99) | async def cache_set(key: str, value: Any, expire: Optional[int] = None) ... function cache_cas (line 123) | async def cache_cas(key: str, value: Any, cas: int, expire: Optional[int... function cache_set_many (line 149) | async def cache_set_many(mapping: Dict[str, Any], expire: Optional[int] ... function cache_set_multi (line 174) | async def cache_set_multi(mapping: Dict[str, Any], expire: Optional[int]... function cache_add (line 188) | async def cache_add(key: str, value: Any, expire: Optional[int] = None) ... function cache_replace (line 213) | async def cache_replace(key: str, value: Any, expire: Optional[int] = No... function cache_append (line 238) | async def cache_append(key: str, value: str) -> str: function cache_prepend (line 261) | async def cache_prepend(key: str, value: str) -> str: function cache_delete (line 284) | async def cache_delete(key: str) -> str: function cache_delete_many (line 306) | async def cache_delete_many(keys: List[str]) -> str: function cache_delete_multi (line 329) | async def cache_delete_multi(keys: List[str]) -> str: function cache_incr (line 342) | async def cache_incr(key: str, value: int = 1) -> str: function cache_decr (line 366) | async def cache_decr(key: str, value: int = 1) -> str: function cache_touch (line 390) | async def cache_touch(key: str, expire: int) -> str: function cache_stats (line 413) | async def cache_stats(args: Optional[List[str]] = None) -> str: function cache_flush_all (line 431) | async def cache_flush_all(delay: int = 0) -> str: function cache_quit (line 453) | async def cache_quit() -> str: function cache_version (line 469) | async def cache_version() -> str: FILE: src/memcached-mcp-server/tests/test_cache.py function mock_client (line 11) | def mock_client(): function test_cache_gets_success (line 22) | async def test_cache_gets_success(mock_client): function test_cache_gets_not_found (line 31) | async def test_cache_gets_not_found(mock_client): function test_cache_gets_error (line 40) | async def test_cache_gets_error(mock_client): function test_cache_get_success (line 48) | async def test_cache_get_success(mock_client): function test_cache_get_not_found (line 57) | async def test_cache_get_not_found(mock_client): function test_cache_get_error (line 66) | async def test_cache_get_error(mock_client): function test_cache_set_success (line 74) | async def test_cache_set_success(mock_client): function test_cache_set_with_expiry (line 83) | async def test_cache_set_with_expiry(mock_client): function test_cache_set_error (line 92) | async def test_cache_set_error(mock_client): function test_cache_delete_success (line 100) | async def test_cache_delete_success(mock_client): function test_cache_delete_not_found (line 109) | async def test_cache_delete_not_found(mock_client): function test_cache_get_many_success (line 118) | async def test_cache_get_many_success(mock_client): function test_cache_get_many_empty (line 127) | async def test_cache_get_many_empty(mock_client): function test_cache_incr_success (line 135) | async def test_cache_incr_success(mock_client): function test_cache_incr_not_found (line 144) | async def test_cache_incr_not_found(mock_client): function test_cache_flush_all_success (line 152) | async def test_cache_flush_all_success(mock_client): function test_cache_flush_all_with_delay (line 160) | async def test_cache_flush_all_with_delay(mock_client): function test_cache_cas_success (line 168) | async def test_cache_cas_success(mock_client): function test_cache_cas_with_expiry (line 177) | async def test_cache_cas_with_expiry(mock_client): function test_cache_cas_failed (line 186) | async def test_cache_cas_failed(mock_client): function test_cache_cas_error (line 194) | async def test_cache_cas_error(mock_client): function test_cache_set_many_error (line 202) | async def test_cache_set_many_error(mock_client): function test_cache_set_many_partial_failure (line 210) | async def test_cache_set_many_partial_failure(mock_client): function test_cache_add_success (line 218) | async def test_cache_add_success(mock_client): function test_cache_add_exists (line 227) | async def test_cache_add_exists(mock_client): function test_cache_add_error (line 235) | async def test_cache_add_error(mock_client): function test_cache_replace_success (line 243) | async def test_cache_replace_success(mock_client): function test_cache_replace_not_found (line 252) | async def test_cache_replace_not_found(mock_client): function test_cache_replace_error (line 260) | async def test_cache_replace_error(mock_client): function test_cache_append_success (line 268) | async def test_cache_append_success(mock_client): function test_cache_append_not_found (line 277) | async def test_cache_append_not_found(mock_client): function test_cache_append_error (line 285) | async def test_cache_append_error(mock_client): function test_cache_prepend_success (line 293) | async def test_cache_prepend_success(mock_client): function test_cache_prepend_not_found (line 302) | async def test_cache_prepend_not_found(mock_client): function test_cache_prepend_error (line 310) | async def test_cache_prepend_error(mock_client): function test_cache_delete_error (line 318) | async def test_cache_delete_error(mock_client): function test_cache_delete_many_success (line 326) | async def test_cache_delete_many_success(mock_client): function test_cache_delete_many_partial_failure (line 335) | async def test_cache_delete_many_partial_failure(mock_client): function test_cache_delete_many_error (line 343) | async def test_cache_delete_many_error(mock_client): function test_cache_incr_error (line 351) | async def test_cache_incr_error(mock_client): function test_cache_decr_success (line 359) | async def test_cache_decr_success(mock_client): function test_cache_decr_not_found (line 368) | async def test_cache_decr_not_found(mock_client): function test_cache_decr_error (line 376) | async def test_cache_decr_error(mock_client): function test_cache_touch_success (line 384) | async def test_cache_touch_success(mock_client): function test_cache_touch_not_found (line 393) | async def test_cache_touch_not_found(mock_client): function test_cache_touch_error (line 401) | async def test_cache_touch_error(mock_client): function test_cache_stats_success (line 409) | async def test_cache_stats_success(mock_client): function test_cache_stats_with_args (line 418) | async def test_cache_stats_with_args(mock_client): function test_cache_stats_error (line 427) | async def test_cache_stats_error(mock_client): function test_cache_flush_all_error (line 435) | async def test_cache_flush_all_error(mock_client): function test_cache_quit_success (line 443) | async def test_cache_quit_success(mock_client): function test_cache_quit_error (line 455) | async def test_cache_quit_error(mock_client): function test_cache_version_error (line 463) | async def test_cache_version_error(mock_client): function test_cache_version_success (line 471) | async def test_cache_version_success(mock_client): FILE: src/memcached-mcp-server/tests/test_cache_readonly.py class TestCacheReadonly (line 22) | class TestCacheReadonly: method mock_client (line 26) | def mock_client(self): method mock_context (line 36) | def mock_context(self): method test_cache_set_readonly (line 43) | async def test_cache_set_readonly(self, mock_client, mock_context): method test_cache_delete_readonly (line 53) | async def test_cache_delete_readonly(self, mock_client, mock_context): method test_cache_incr_readonly (line 62) | async def test_cache_incr_readonly(self, mock_client, mock_context): method test_cache_append_readonly (line 71) | async def test_cache_append_readonly(self, mock_client, mock_context): method test_cache_flush_all_readonly (line 81) | async def test_cache_flush_all_readonly(self, mock_client, mock_context): method test_cache_cas_readonly (line 88) | async def test_cache_cas_readonly(self, mock_client, mock_context): method test_cache_set_many_readonly (line 99) | async def test_cache_set_many_readonly(self, mock_client, mock_context): method test_cache_add_readonly (line 108) | async def test_cache_add_readonly(self, mock_client, mock_context): method test_cache_replace_readonly (line 118) | async def test_cache_replace_readonly(self, mock_client, mock_context): method test_cache_prepend_readonly (line 128) | async def test_cache_prepend_readonly(self, mock_client, mock_context): method test_cache_delete_many_readonly (line 138) | async def test_cache_delete_many_readonly(self, mock_client, mock_cont... method test_cache_decr_readonly (line 147) | async def test_cache_decr_readonly(self, mock_client, mock_context): method test_cache_touch_readonly (line 156) | async def test_cache_touch_readonly(self, mock_client, mock_context): FILE: src/memcached-mcp-server/tests/test_connection.py class TestMemcachedConnectionManager (line 11) | class TestMemcachedConnectionManager(unittest.TestCase): method setUp (line 14) | def setUp(self): method tearDown (line 18) | def tearDown(self): method test_get_connection_default_values (line 24) | def test_get_connection_default_values(self, mock_retrying_client, moc... method test_get_connection_custom_values (line 53) | def test_get_connection_custom_values(self, mock_retrying_client, mock... method test_get_connection_singleton (line 86) | def test_get_connection_singleton(self, mock_retrying_client, mock_cli... method test_close_connection_existing (line 105) | def test_close_connection_existing(self, mock_retrying_client): method test_close_connection_no_connection (line 119) | def test_close_connection_no_connection(self): method test_get_connection_with_tls_default (line 127) | def test_get_connection_with_tls_default(self, mock_ssl_context, mock_... method test_get_connection_with_tls_custom_certs (line 155) | def test_get_connection_with_tls_custom_certs(self, mock_ssl_context, ... method test_get_connection_with_tls_no_verify (line 188) | def test_get_connection_with_tls_no_verify(self, mock_ssl_context, moc... FILE: src/memcached-mcp-server/tests/test_init.py class TestInit (line 20) | class TestInit: method test_version (line 23) | def test_version(self): method test_module_reload (line 40) | def test_module_reload(self): FILE: src/memcached-mcp-server/tests/test_main.py class TestMain (line 20) | class TestMain: method test_main_default (line 25) | def test_main_default(self, mock_run): method test_module_execution (line 33) | def test_module_execution(self): FILE: src/mysql-mcp-server/awslabs/mysql_mcp_server/connection/abstract_db_connection.py class AbstractDBConnection (line 21) | class AbstractDBConnection(ABC): method __init__ (line 24) | def __init__(self, readonly: bool): method readonly_query (line 33) | def readonly_query(self) -> bool: method execute_query (line 42) | async def execute_query( method close (line 57) | async def close(self) -> None: method check_connection_health (line 62) | async def check_connection_health(self) -> bool: FILE: src/mysql-mcp-server/awslabs/mysql_mcp_server/connection/asyncmy_pool_connection.py class AsyncmyPoolConnection (line 30) | class AsyncmyPoolConnection(AbstractDBConnection): method __init__ (line 41) | def __init__( method initialize_pool (line 77) | async def initialize_pool(self): method _set_all_connections_readonly (line 100) | async def _set_all_connections_readonly(self): method _get_connection (line 115) | async def _get_connection(self): method execute_query (line 125) | async def execute_query( method close (line 183) | async def close(self) -> None: method check_connection_health (line 191) | async def check_connection_health(self) -> bool: function _convert_parameters (line 201) | def _convert_parameters(self, parameters: List[Dict[str, Any]]) -> Dict[... function _get_credentials_from_secret (line 225) | def _get_credentials_from_secret(secret_arn: str, region: str) -> Tuple[... FILE: src/mysql-mcp-server/awslabs/mysql_mcp_server/connection/db_connection_singleton.py class DBConnectionSingleton (line 21) | class DBConnectionSingleton: method __init__ (line 26) | def __init__( method initialize (line 87) | def initialize( method get (line 123) | def get(cls): method db_connection (line 136) | def db_connection(self): FILE: src/mysql-mcp-server/awslabs/mysql_mcp_server/connection/rds_data_api_connection.py class RDSDataAPIConnection (line 25) | class RDSDataAPIConnection(AbstractDBConnection): method __init__ (line 28) | def __init__( method execute_query (line 56) | async def execute_query( method close (line 80) | async def close(self) -> None: method check_connection_health (line 85) | async def check_connection_health(self) -> bool: FILE: src/mysql-mcp-server/awslabs/mysql_mcp_server/mutable_sql_detector.py function detect_mutating_keywords (line 109) | def detect_mutating_keywords(sql: str) -> list[str]: function check_sql_injection_risk (line 131) | def check_sql_injection_risk(sql: str) -> list[dict]: FILE: src/mysql-mcp-server/awslabs/mysql_mcp_server/server.py class DummyCtx (line 39) | class DummyCtx: method error (line 42) | async def error(self, message): function extract_cell (line 52) | def extract_cell(cell: dict): function parse_execute_response (line 69) | def parse_execute_response(response: dict) -> list[dict]: function run_query (line 89) | async def run_query( function get_table_schema (line 163) | async def get_table_schema( function main (line 212) | def main(): FILE: src/mysql-mcp-server/tests/conftest.py class MockException (line 7) | class MockException(Enum): class Mock_boto3_client (line 15) | class Mock_boto3_client: method __init__ (line 18) | def __init__(self, error: MockException = MockException.No): method begin_transaction (line 28) | def begin_transaction(self, **kwargs) -> dict: method commit_transaction (line 58) | def commit_transaction(self, **kwargs) -> dict: method rollback_transaction (line 88) | def rollback_transaction(self, **kwargs) -> dict: method execute_statement (line 118) | def execute_statement(self, **kwargs) -> dict: method add_mock_response (line 152) | def add_mock_response(self, response): class Mock_DBConnection (line 161) | class Mock_DBConnection: method __init__ (line 164) | def __init__(self, readonly, error: MockException = MockException.No): method data_client (line 179) | def data_client(self): method readonly_query (line 188) | def readonly_query(self): method execute_query (line 196) | async def execute_query( class DummyCtx (line 228) | class DummyCtx: method error (line 231) | async def error(self, message): function mock_DBConnection (line 242) | def mock_DBConnection(): FILE: src/mysql-mcp-server/tests/test_abstract_db_connection.py class _Concrete (line 23) | class _Concrete(AbstractDBConnection): method execute_query (line 26) | async def execute_query(self, sql: str, parameters=None): method close (line 30) | async def close(self) -> None: method check_connection_health (line 34) | async def check_connection_health(self) -> bool: function test_readonly_property_covers_return_line (line 39) | def test_readonly_property_covers_return_line(): function test_calling_base_execute_query_noop_covers_line (line 48) | async def test_calling_base_execute_query_noop_covers_line(): function test_calling_base_close_noop_covers_line (line 57) | async def test_calling_base_close_noop_covers_line(): function test_calling_base_check_connection_health_noop_covers_line (line 65) | async def test_calling_base_check_connection_health_noop_covers_line(): FILE: src/mysql-mcp-server/tests/test_asyncmy_pool_connection.py class AsyncContextManagerMock (line 26) | class AsyncContextManagerMock: method __init__ (line 29) | def __init__(self, return_value): method __aenter__ (line 37) | async def __aenter__(self): method __aexit__ (line 41) | async def __aexit__(self, exc_type, exc, tb): function test_initialize_pool_creates_pool (line 47) | async def test_initialize_pool_creates_pool(): function test_execute_query_returns_results (line 73) | async def test_execute_query_returns_results(): function test_readonly_mode_set (line 108) | async def test_readonly_mode_set(): function test_check_connection_health_returns_true (line 139) | async def test_check_connection_health_returns_true(): function test_get_connection_pool_none_raises (line 159) | async def test_get_connection_pool_none_raises(): function test_execute_query_with_parameters_and_exception (line 181) | async def test_execute_query_with_parameters_and_exception(): function test_close_closes_pool (line 212) | async def test_close_closes_pool(): function test_get_credentials_from_secret (line 234) | def test_get_credentials_from_secret(): function test_initialize_pool_calls_set_readonly_when_flag_true (line 254) | async def test_initialize_pool_calls_set_readonly_when_flag_true(): function test_set_all_connections_readonly_no_pool_returns (line 282) | async def test_set_all_connections_readonly_no_pool_returns(): function test_set_all_connections_readonly_handles_exception (line 301) | async def test_set_all_connections_readonly_handles_exception(): function test_get_connection_initializes_and_returns_acquire_callable (line 328) | async def test_get_connection_initializes_and_returns_acquire_callable(): function test_execute_query_readonly_and_parameter_types_mapped_boolean_as_long (line 358) | async def test_execute_query_readonly_and_parameter_types_mapped_boolean... function test_execute_query_no_results_branch (line 426) | async def test_execute_query_no_results_branch(): function test_check_connection_health_returns_false_on_exception (line 455) | async def test_check_connection_health_returns_false_on_exception(): function test_get_credentials_from_secret_missing_username_raises (line 473) | def test_get_credentials_from_secret_missing_username_raises(): function test_get_credentials_from_secret_missing_password_raises (line 486) | def test_get_credentials_from_secret_missing_password_raises(): function test_get_credentials_from_secret_no_secret_string_raises (line 499) | def test_get_credentials_from_secret_no_secret_string_raises(): function test_get_credentials_from_secret_boto_exception_wrapped (line 511) | def test_get_credentials_from_secret_boto_exception_wrapped(): FILE: src/mysql-mcp-server/tests/test_db_connection_singleton.py class TestDBConnectionSingleton (line 22) | class TestDBConnectionSingleton: method test_data_api_singleton_initialization (line 25) | def test_data_api_singleton_initialization(self): method test_asyncmy_singleton_initialization (line 59) | def test_asyncmy_singleton_initialization(self): method test_data_api_singleton_validation_missing_params (line 95) | def test_data_api_singleton_validation_missing_params(self): method test_asyncmy_singleton_validation_missing_params (line 111) | def test_asyncmy_singleton_validation_missing_params(self): method test_singleton_get_without_initialization (line 127) | def test_singleton_get_without_initialization(self): FILE: src/mysql-mcp-server/tests/test_rds_data_api_connection.py function test_execute_query_with_parameters_calls_client_correctly (line 25) | async def test_execute_query_with_parameters_calls_client_correctly(): function test_execute_query_without_parameters_excludes_parameters_key (line 59) | async def test_execute_query_without_parameters_excludes_parameters_key(): function test_init_creates_boto_client_when_not_test (line 83) | def test_init_creates_boto_client_when_not_test(): function test_close_is_noop (line 105) | async def test_close_is_noop(): function test_check_connection_health_true_when_records_present (line 119) | async def test_check_connection_health_true_when_records_present(): function test_check_connection_health_false_when_no_records (line 134) | async def test_check_connection_health_false_when_no_records(): function test_check_connection_health_false_on_exception (line 149) | async def test_check_connection_health_false_on_exception(): FILE: src/mysql-mcp-server/tests/test_server.py function wrap_value (line 414) | def wrap_value(val): function mock_execute_statement_response (line 444) | def mock_execute_statement_response( function get_mock_normal_query_response (line 483) | def get_mock_normal_query_response(): function validate_normal_query_response (line 489) | def validate_normal_query_response(column_records): function test_run_query_well_formatted_response (line 497) | async def test_run_query_well_formatted_response(): function test_run_query_safe_read_queries_on_redonly_settings (line 523) | async def test_run_query_safe_read_queries_on_redonly_settings(): function test_run_query_risky_queries_without_parameters (line 549) | async def test_run_query_risky_queries_without_parameters(): function test_run_query_throw_client_error (line 577) | async def test_run_query_throw_client_error(): function test_run_query_throw_unexpected_error (line 595) | async def test_run_query_throw_unexpected_error(): function test_run_query_write_queries_on_readonly_setting (line 613) | async def test_run_query_write_queries_on_readonly_setting(): function test_run_query_write_queries_on_write_allowed_setting (line 635) | async def test_run_query_write_queries_on_write_allowed_setting(): function test_get_table_schema (line 664) | async def test_get_table_schema(): function test_main_with_valid_parameters (line 687) | def test_main_with_valid_parameters(monkeypatch, capsys): function test_main_with_invalid_parameters (line 729) | def test_main_with_invalid_parameters(monkeypatch, capsys): function test_main_with_invalid_asyncmy_parameters (line 766) | def test_main_with_invalid_asyncmy_parameters(monkeypatch, capsys): function test_main_with_valid_asyncmy_parameters (line 795) | def test_main_with_valid_asyncmy_parameters(monkeypatch, capsys): function test_get_table_schema_asyncmy_connection (line 840) | async def test_get_table_schema_asyncmy_connection(): function test_main_parser_error_neither_connection_method (line 891) | def test_main_parser_error_neither_connection_method(monkeypatch): function test_main_parser_error_both_connection_methods (line 918) | def test_main_parser_error_both_connection_methods(monkeypatch): FILE: src/nova-canvas-mcp-server/awslabs/nova_canvas_mcp_server/models.py class Quality (line 23) | class Quality(str, Enum): class TaskType (line 35) | class TaskType(str, Enum): class ImageGenerationConfig (line 47) | class ImageGenerationConfig(BaseModel): method must_be_divisible_by_16 (line 71) | def must_be_divisible_by_16(cls, v: int) -> int: method validate_aspect_ratio_and_total_pixels (line 88) | def validate_aspect_ratio_and_total_pixels(self): class TextToImageParams (line 117) | class TextToImageParams(BaseModel): class ColorGuidedGenerationParams (line 131) | class ColorGuidedGenerationParams(BaseModel): method validate_hex_colors (line 148) | def validate_hex_colors(cls, v: List[str]) -> List[str]: class TextImageRequest (line 169) | class TextImageRequest(BaseModel): method to_api_dict (line 188) | def to_api_dict(self) -> Dict[str, Any]: class ColorGuidedRequest (line 208) | class ColorGuidedRequest(BaseModel): method to_api_dict (line 227) | def to_api_dict(self) -> Dict[str, Any]: class McpImageGenerationResponse (line 247) | class McpImageGenerationResponse(BaseModel): class ImageGenerationResponse (line 258) | class ImageGenerationResponse(BaseModel): class Config (line 281) | class Config: method __getitem__ (line 286) | def __getitem__(self, key: str) -> Any: FILE: src/nova-canvas-mcp-server/awslabs/nova_canvas_mcp_server/novacanvas.py function save_generated_images (line 53) | def save_generated_images( function invoke_nova_canvas (line 110) | async def invoke_nova_canvas( function generate_image_with_text (line 145) | async def generate_image_with_text( function generate_image_with_colors (line 271) | async def generate_image_with_colors( FILE: src/nova-canvas-mcp-server/awslabs/nova_canvas_mcp_server/server.py function mcp_generate_image (line 105) | async def mcp_generate_image( function mcp_generate_image_with_colors (line 218) | async def mcp_generate_image_with_colors( function main (line 330) | def main(): FILE: src/nova-canvas-mcp-server/tests/conftest.py function temp_workspace_dir (line 25) | def temp_workspace_dir() -> Generator[str, None, None]: function mock_bedrock_runtime_client (line 32) | def mock_bedrock_runtime_client() -> MagicMock: function sample_text_prompt (line 52) | def sample_text_prompt() -> str: function sample_negative_prompt (line 58) | def sample_negative_prompt() -> str: function sample_colors (line 64) | def sample_colors() -> List[str]: function sample_base64_images (line 70) | def sample_base64_images() -> List[str]: function mock_successful_response (line 79) | def mock_successful_response() -> Dict: function mock_error_response (line 90) | def mock_error_response() -> Dict: function mock_context (line 96) | def mock_context() -> AsyncMock: FILE: src/nova-canvas-mcp-server/tests/test_models.py class TestEnums (line 31) | class TestEnums: method test_quality_enum (line 34) | def test_quality_enum(self): method test_task_type_enum (line 39) | def test_task_type_enum(self): class TestImageGenerationConfig (line 45) | class TestImageGenerationConfig: method test_default_values (line 48) | def test_default_values(self): method test_custom_values (line 58) | def test_custom_values(self): method test_width_height_divisible_by_16 (line 75) | def test_width_height_divisible_by_16(self): method test_width_height_bounds (line 88) | def test_width_height_bounds(self): method test_cfg_scale_bounds (line 108) | def test_cfg_scale_bounds(self): method test_seed_bounds (line 122) | def test_seed_bounds(self): method test_number_of_images_bounds (line 136) | def test_number_of_images_bounds(self): method test_aspect_ratio_validation (line 150) | def test_aspect_ratio_validation(self): method test_total_pixels_validation (line 164) | def test_total_pixels_validation(self): class TestTextToImageParams (line 174) | class TestTextToImageParams: method test_valid_params (line 177) | def test_valid_params(self): method test_with_negative_text (line 183) | def test_with_negative_text(self): method test_text_length_validation (line 191) | def test_text_length_validation(self): method test_negative_text_length_validation (line 201) | def test_negative_text_length_validation(self): class TestColorGuidedGenerationParams (line 212) | class TestColorGuidedGenerationParams: method test_valid_params (line 215) | def test_valid_params(self): method test_with_negative_text (line 224) | def test_with_negative_text(self): method test_hex_color_validation (line 235) | def test_hex_color_validation(self): method test_colors_max_length (line 261) | def test_colors_max_length(self): class TestTextImageRequest (line 273) | class TestTextImageRequest: method test_default_values (line 276) | def test_default_values(self): method test_custom_values (line 286) | def test_custom_values(self): method test_to_api_dict (line 305) | def test_to_api_dict(self): class TestColorGuidedRequest (line 343) | class TestColorGuidedRequest: method test_default_values (line 346) | def test_default_values(self): method test_custom_values (line 359) | def test_custom_values(self): method test_to_api_dict (line 380) | def test_to_api_dict(self): class TestMcpImageGenerationResponse (line 430) | class TestMcpImageGenerationResponse: method test_success_response (line 433) | def test_success_response(self): class TestImageGenerationResponse (line 442) | class TestImageGenerationResponse: method test_success_response (line 445) | def test_success_response(self): method test_error_response (line 460) | def test_error_response(self): method test_with_optional_fields (line 475) | def test_with_optional_fields(self): method test_dictionary_access (line 492) | def test_dictionary_access(self): FILE: src/nova-canvas-mcp-server/tests/test_novacanvas.py class TestSaveGeneratedImages (line 38) | class TestSaveGeneratedImages: method test_save_images_with_filename (line 41) | def test_save_images_with_filename(self, temp_workspace_dir, sample_ba... method test_save_images_without_filename (line 62) | def test_save_images_without_filename(self, temp_workspace_dir, sample... method test_save_single_image (line 83) | def test_save_single_image(self, temp_workspace_dir): method test_save_images_creates_output_dir (line 104) | def test_save_images_creates_output_dir(self, temp_workspace_dir, samp... class TestInvokeNovaCanvas (line 127) | class TestInvokeNovaCanvas: method test_successful_invocation (line 131) | async def test_successful_invocation( method test_api_error (line 161) | async def test_api_error(self, mock_bedrock_runtime_client): class TestGenerateImageWithText (line 176) | class TestGenerateImageWithText: method test_successful_generation (line 182) | async def test_successful_generation( method test_generation_with_negative_prompt (line 240) | async def test_generation_with_negative_prompt( method test_validation_error (line 276) | async def test_validation_error(self, mock_invoke_nova_canvas, mock_be... method test_api_error (line 296) | async def test_api_error( method test_default_parameters (line 318) | async def test_default_parameters( class TestGenerateImageWithColors (line 349) | class TestGenerateImageWithColors: method test_successful_generation (line 355) | async def test_successful_generation( method test_generation_with_negative_prompt (line 417) | async def test_generation_with_negative_prompt( method test_validation_error (line 457) | async def test_validation_error( method test_api_error (line 480) | async def test_api_error( method test_default_parameters (line 508) | async def test_default_parameters( FILE: src/nova-canvas-mcp-server/tests/test_server.py class TestMcpGenerateImage (line 26) | class TestMcpGenerateImage: method test_generate_image_success (line 31) | async def test_generate_image_success( method test_generate_image_error (line 82) | async def test_generate_image_error( method test_generate_image_with_defaults (line 101) | async def test_generate_image_with_defaults( method test_generate_image_exception (line 130) | async def test_generate_image_exception( class TestMcpGenerateImageWithColors (line 146) | class TestMcpGenerateImageWithColors: method test_generate_image_with_colors_success (line 151) | async def test_generate_image_with_colors_success( method test_generate_image_with_colors_error (line 209) | async def test_generate_image_with_colors_error( method test_generate_image_with_colors_defaults (line 232) | async def test_generate_image_with_colors_defaults( method test_generate_image_with_colors_exception (line 264) | async def test_generate_image_with_colors_exception( class TestServerIntegration (line 284) | class TestServerIntegration: method test_server_tool_registration (line 287) | def test_server_tool_registration(self): class TestDeprecation (line 306) | class TestDeprecation: method test_main_emits_deprecation_warning (line 309) | def test_main_emits_deprecation_warning(self): FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/__init__.py function get_format (line 30) | def get_format(): function get_caller_info (line 43) | def get_caller_info(): FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/api/config.py class Config (line 23) | class Config: function load_config (line 61) | def load_config(args: Any = None) -> Config: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/auth/api_key_auth.py class ApiKeyAuthProvider (line 28) | class ApiKeyAuthProvider(BaseAuthProvider): method __init__ (line 35) | def __init__(self, config: Config): method _validate_config (line 52) | def _validate_config(self) -> bool: method _handle_validation_error (line 84) | def _handle_validation_error(self) -> None: method _initialize_auth (line 96) | def _initialize_auth(self) -> None: method _hash_api_key (line 107) | def _hash_api_key(api_key: str) -> str: method _generate_auth_headers (line 121) | def _generate_auth_headers(self, api_key_hash: str, api_key_name: str)... method _generate_auth_params (line 140) | def _generate_auth_params(self, api_key_hash: str, api_key_name: str) ... method _generate_auth_cookies (line 159) | def _generate_auth_cookies(self, api_key_hash: str, api_key_name: str)... method provider_name (line 178) | def provider_name(self) -> str: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/auth/auth_cache.py class TokenCache (line 27) | class TokenCache: method __init__ (line 34) | def __init__(self, max_size: int = 100, ttl: int = 300): method get (line 46) | def get(self, key: str) -> Optional[Any]: method set (line 67) | def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None: method delete (line 91) | def delete(self, key: str) -> bool: method clear (line 106) | def clear(self) -> None: method cleanup (line 110) | def cleanup(self) -> int: function get_token_cache (line 128) | def get_token_cache() -> TokenCache: function cached_auth_data (line 138) | def cached_auth_data(ttl: int = 300) -> Callable[[Callable[..., T]], Cal... FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/auth/auth_errors.py class AuthErrorType (line 23) | class AuthErrorType(Enum): class AuthError (line 35) | class AuthError(Exception): method __init__ (line 38) | def __init__( method __str__ (line 57) | def __str__(self) -> str: class MissingCredentialsError (line 67) | class MissingCredentialsError(AuthError): method __init__ (line 70) | def __init__(self, message: str, details: Optional[Dict] = None): class InvalidCredentialsError (line 83) | class InvalidCredentialsError(AuthError): method __init__ (line 86) | def __init__(self, message: str, details: Optional[Dict] = None): class ExpiredTokenError (line 99) | class ExpiredTokenError(AuthError): method __init__ (line 102) | def __init__(self, message: str, details: Optional[Dict] = None): class InsufficientPermissionsError (line 113) | class InsufficientPermissionsError(AuthError): method __init__ (line 116) | def __init__(self, message: str, details: Optional[Dict] = None): class ConfigurationError (line 129) | class ConfigurationError(AuthError): method __init__ (line 132) | def __init__(self, message: str, details: Optional[Dict] = None): class NetworkError (line 145) | class NetworkError(AuthError): method __init__ (line 148) | def __init__(self, message: str, details: Optional[Dict] = None): function create_auth_error (line 171) | def create_auth_error( function format_error_message (line 194) | def format_error_message(provider_name: str, error_type: AuthErrorType, ... FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/auth/auth_factory.py function register_auth_provider (line 30) | def register_auth_provider(auth_type: str, provider_class: Type[Any]) ->... function _get_provider_instance (line 51) | def _get_provider_instance( function get_auth_provider (line 81) | def get_auth_provider(config: Config) -> AuthProviderProtocol: function is_auth_type_available (line 127) | def is_auth_type_available(auth_type: str) -> bool: function clear_provider_cache (line 140) | def clear_provider_cache() -> None: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/auth/auth_protocol.py class AuthProviderProtocol (line 22) | class AuthProviderProtocol(Protocol): method provider_name (line 29) | def provider_name(self) -> str: method is_configured (line 33) | def is_configured(self) -> bool: method get_auth_headers (line 37) | def get_auth_headers(self) -> Dict[str, str]: method get_auth_params (line 41) | def get_auth_params(self) -> Dict[str, str]: method get_auth_cookies (line 45) | def get_auth_cookies(self) -> Dict[str, str]: method get_httpx_auth (line 49) | def get_httpx_auth(self) -> Optional[httpx.Auth]: class AuthProviderFactory (line 58) | class AuthProviderFactory(Protocol): method __call__ (line 61) | def __call__(self, config: Config) -> AuthProviderProtocol: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/auth/auth_provider.py class AuthProvider (line 21) | class AuthProvider(abc.ABC): method get_auth_headers (line 30) | def get_auth_headers(self) -> Dict[str, str]: method get_auth_params (line 40) | def get_auth_params(self) -> Dict[str, str]: method get_auth_cookies (line 50) | def get_auth_cookies(self) -> Dict[str, str]: method get_httpx_auth (line 60) | def get_httpx_auth(self) -> Optional[httpx.Auth]: method is_configured (line 70) | def is_configured(self) -> bool: method provider_name (line 81) | def provider_name(self) -> str: class NullAuthProvider (line 91) | class NullAuthProvider(AuthProvider): method __init__ (line 97) | def __init__(self, config: Any = None): method get_auth_headers (line 107) | def get_auth_headers(self) -> Dict[str, str]: method get_auth_params (line 116) | def get_auth_params(self) -> Dict[str, str]: method get_auth_cookies (line 125) | def get_auth_cookies(self) -> Dict[str, str]: method get_httpx_auth (line 134) | def get_httpx_auth(self) -> Optional[httpx.Auth]: method is_configured (line 143) | def is_configured(self) -> bool: method provider_name (line 153) | def provider_name(self) -> str: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/auth/base_auth.py class BaseAuthProvider (line 34) | class BaseAuthProvider(AuthProvider, ABC): method __init__ (line 41) | def __init__(self, config: Config): method _initialize_auth (line 77) | def _initialize_auth(self) -> None: method _validate_config (line 86) | def _validate_config(self) -> bool: method _handle_validation_error (line 98) | def _handle_validation_error(self) -> None: method _log_auth_error (line 109) | def _log_auth_error(self, error: AuthError) -> None: method _log_validation_error (line 123) | def _log_validation_error(self) -> None: method _requires_valid_config (line 131) | def _requires_valid_config(method: Callable[..., T]) -> Callable[..., ... method get_auth_headers (line 152) | def get_auth_headers(self) -> Dict[str, str]: method get_auth_params (line 162) | def get_auth_params(self) -> Dict[str, str]: method get_auth_cookies (line 172) | def get_auth_cookies(self) -> Dict[str, str]: method get_httpx_auth (line 182) | def get_httpx_auth(self) -> Optional[httpx.Auth]: method is_configured (line 191) | def is_configured(self) -> bool: method get_validation_error (line 200) | def get_validation_error(self) -> Optional[AuthError]: method provider_name (line 211) | def provider_name(self) -> str: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/auth/basic_auth.py class BasicAuthProvider (line 26) | class BasicAuthProvider(BaseAuthProvider): method __init__ (line 33) | def __init__(self, config: Config): method _validate_config (line 49) | def _validate_config(self) -> bool: method _log_validation_error (line 79) | def _log_validation_error(self) -> None: method _initialize_auth (line 85) | def _initialize_auth(self) -> None: method _hash_credentials (line 92) | def _hash_credentials(username: str, password: str) -> str: method _generate_auth_headers (line 116) | def _generate_auth_headers(self, credentials_hash: str) -> Dict[str, s... method _generate_httpx_auth (line 138) | def _generate_httpx_auth(self, username: str, password: str) -> httpx.... method get_httpx_auth (line 154) | def get_httpx_auth(self) -> Optional[httpx.Auth]: method provider_name (line 164) | def provider_name(self) -> str: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/auth/bearer_auth.py class BearerAuthProvider (line 24) | class BearerAuthProvider(BaseAuthProvider): method __init__ (line 31) | def __init__(self, config: Config): method _validate_config (line 45) | def _validate_config(self) -> bool: method _log_validation_error (line 64) | def _log_validation_error(self) -> None: method _initialize_auth (line 73) | def _initialize_auth(self) -> None: method _generate_auth_headers (line 79) | def _generate_auth_headers(self, token: str) -> Dict[str, str]: method provider_name (line 101) | def provider_name(self) -> str: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/auth/cognito_auth.py class CognitoAuthProvider (line 32) | class CognitoAuthProvider(BearerAuthProvider): method __init__ (line 40) | def __init__(self, config: Config): method _determine_grant_type (line 116) | def _determine_grant_type(self) -> str: method _validate_config (line 131) | def _validate_config(self) -> bool: method _log_validation_error (line 187) | def _log_validation_error(self) -> None: method get_auth_headers (line 195) | def get_auth_headers(self) -> Dict[str, str]: method _check_and_refresh_token_if_needed (line 208) | def _check_and_refresh_token_if_needed(self) -> None: method _is_token_expired_or_expiring_soon (line 214) | def _is_token_expired_or_expiring_soon(self) -> bool: method _refresh_token (line 225) | def _refresh_token(self) -> None: method _get_cognito_token (line 258) | def _get_cognito_token(self) -> Optional[str]: method _get_token_client_credentials (line 273) | def _get_token_client_credentials(self) -> Optional[str]: method _get_token_password (line 339) | def _get_token_password(self) -> Optional[str]: method _refresh_cognito_token (line 539) | def _refresh_cognito_token(self) -> Optional[str]: method _extract_token_expiry (line 616) | def _extract_token_expiry(self, token: str) -> int: method provider_name (line 675) | def provider_name(self) -> str: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/auth/register.py function register_auth_providers (line 21) | def register_auth_providers() -> None: function register_provider_by_type (line 40) | def register_provider_by_type(auth_type: str) -> None: function register_all_providers (line 72) | def register_all_providers() -> None: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/prompts/generators/operation_prompts.py function format_enum_values (line 27) | def format_enum_values(enum_values: List[Any], max_inline: int = 4) -> str: function extract_prompt_arguments (line 56) | def extract_prompt_arguments( function determine_operation_type (line 168) | def determine_operation_type(server: Any, path: str, method: str) -> str: function determine_mime_type (line 197) | def determine_mime_type(responses: Optional[Dict[str, Any]]) -> str: function generate_operation_documentation (line 212) | def generate_operation_documentation( function create_operation_prompt (line 440) | def create_operation_prompt( FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/prompts/generators/workflow_prompts.py function identify_workflows (line 22) | def identify_workflows(paths: Dict[str, Any]) -> List[Dict[str, Any]]: function generate_workflow_documentation (line 108) | def generate_workflow_documentation(workflow: Dict[str, Any]) -> str: function create_workflow_prompt (line 176) | def create_workflow_prompt(server: Any, workflow: Dict[str, Any]) -> bool: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/prompts/models.py class PromptArgument (line 20) | class PromptArgument(BaseModel): method dict (line 27) | def dict(self) -> Dict[str, Any]: class ResourceContent (line 35) | class ResourceContent(BaseModel): class TextMessage (line 43) | class TextMessage(BaseModel): class ResourceMessage (line 50) | class ResourceMessage(BaseModel): class PromptMessage (line 57) | class PromptMessage(BaseModel): class MCPPrompt (line 64) | class MCPPrompt(BaseModel): FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/prompts/prompt_manager.py class MCPPromptManager (line 25) | class MCPPromptManager: method __init__ (line 28) | def __init__(self): method generate_prompts (line 33) | async def generate_prompts( method register_api_resource_handler (line 104) | def register_api_resource_handler(self, server: Any, api_name: str, cl... FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/server.py function create_mcp_server_async (line 36) | async def create_mcp_server_async(config: Config) -> FastMCP: function create_mcp_server (line 347) | def create_mcp_server(config: Config) -> FastMCP: function get_all_counts (line 365) | async def get_all_counts(server: FastMCP) -> tuple[int, int, int, int]: function setup_signal_handlers (line 386) | def setup_signal_handlers(): function main (line 424) | def main(): FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/utils/cache_provider.py class CacheProvider (line 46) | class CacheProvider(Generic[T], ABC): method get (line 50) | def get(self, key: str) -> Optional[T]: method set (line 55) | def set(self, key: str, value: T) -> None: method invalidate (line 60) | def invalidate(self, key: str) -> bool: method clear (line 65) | def clear(self) -> None: class InMemoryCacheProvider (line 70) | class InMemoryCacheProvider(CacheProvider[T]): method __init__ (line 73) | def __init__(self, ttl_seconds: Optional[int] = None): method get (line 84) | def get(self, key: str) -> Optional[T]: method set (line 99) | def set(self, key: str, value: T) -> None: method invalidate (line 105) | def invalidate(self, key: str) -> bool: method clear (line 113) | def clear(self) -> None: method cleanup (line 119) | def cleanup(self) -> int: class CachetoolsProvider (line 138) | class CachetoolsProvider(CacheProvider[T]): method __init__ (line 141) | def __init__(self, ttl_seconds: Optional[int] = None, maxsize: Optiona... method get (line 161) | def get(self, key: str) -> Optional[T]: method set (line 171) | def set(self, key: str, value: T) -> None: method invalidate (line 176) | def invalidate(self, key: str) -> bool: method clear (line 185) | def clear(self) -> None: function create_cache_provider (line 193) | def create_cache_provider(ttl_seconds: Optional[int] = None) -> CachePro... function cached (line 217) | def cached(ttl_seconds: Optional[int] = None) -> Callable: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/utils/error_handler.py class APIError (line 22) | class APIError(Exception): method __init__ (line 25) | def __init__( method __str__ (line 47) | def __str__(self) -> str: method __repr__ (line 51) | def __repr__(self) -> str: class AuthenticationError (line 56) | class AuthenticationError(APIError): class AuthorizationError (line 62) | class AuthorizationError(APIError): class ResourceNotFoundError (line 68) | class ResourceNotFoundError(APIError): class ValidationError (line 74) | class ValidationError(APIError): class RateLimitError (line 80) | class RateLimitError(APIError): class ServerError (line 86) | class ServerError(APIError): class ConnectionError (line 92) | class ConnectionError(APIError): class NetworkError (line 98) | class NetworkError(APIError): function extract_error_details (line 124) | def extract_error_details(response: httpx.Response) -> Dict[str, Any]: function format_error_message (line 150) | def format_error_message(status_code: int, reason: str, details: Dict[st... function handle_http_error (line 185) | def handle_http_error(error: httpx.HTTPStatusError) -> APIError: function handle_request_error (line 240) | def handle_request_error(error: httpx.RequestError) -> APIError: function safe_request (line 268) | async def safe_request( FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/utils/http_client.py class HttpClientFactory (line 45) | class HttpClientFactory: method create_client (line 49) | def create_client( function make_request_with_retry (line 165) | async def make_request_with_retry( function make_request (line 240) | async def make_request( FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/utils/metrics_provider.py class ApiCallMetrics (line 35) | class ApiCallMetrics: class ToolMetrics (line 47) | class ToolMetrics: class MetricsProvider (line 57) | class MetricsProvider(ABC): method record_api_call (line 61) | def record_api_call( method record_tool_usage (line 73) | def record_tool_usage( method get_api_stats (line 80) | def get_api_stats(self) -> Dict[str, Dict[str, Any]]: method get_tool_stats (line 85) | def get_tool_stats(self) -> Dict[str, Dict[str, Any]]: method get_recent_errors (line 90) | def get_recent_errors(self, limit: int = 10) -> List[Dict[str, Any]]: method get_summary (line 95) | def get_summary(self) -> Dict[str, Any]: class InMemoryMetricsProvider (line 100) | class InMemoryMetricsProvider(MetricsProvider): method __init__ (line 103) | def __init__(self, max_history: Optional[int] = None): method record_api_call (line 123) | def record_api_call( method record_tool_usage (line 164) | def record_tool_usage( method get_api_stats (line 196) | def get_api_stats(self) -> Dict[str, Dict[str, Any]]: method get_tool_stats (line 209) | def get_tool_stats(self) -> Dict[str, Dict[str, Any]]: method get_recent_errors (line 222) | def get_recent_errors(self, limit: int = 10) -> List[Dict[str, Any]]: method get_summary (line 241) | def get_summary(self) -> Dict[str, Any]: class PrometheusMetricsProvider (line 283) | class PrometheusMetricsProvider(MetricsProvider): method __init__ (line 286) | def __init__(self): method record_api_call (line 324) | def record_api_call( method record_tool_usage (line 365) | def record_tool_usage( method get_api_stats (line 385) | def get_api_stats(self) -> Dict[str, Dict[str, Any]]: method get_tool_stats (line 394) | def get_tool_stats(self) -> Dict[str, Dict[str, Any]]: method get_recent_errors (line 415) | def get_recent_errors(self, limit: int = 10) -> List[Dict[str, Any]]: method get_summary (line 419) | def get_summary(self) -> Dict[str, Any]: function create_metrics_provider (line 442) | def create_metrics_provider() -> MetricsProvider: function api_call_timer (line 459) | def api_call_timer(func): function tool_usage_timer (line 484) | def tool_usage_timer(func): FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/utils/openapi.py function extract_api_name_from_spec (line 27) | def extract_api_name_from_spec(spec: Dict[str, Any]) -> Optional[str]: function load_openapi_spec (line 67) | def load_openapi_spec(url: str = '', path: str = '') -> Dict[str, Any]: FILE: src/openapi-mcp-server/awslabs/openapi_mcp_server/utils/openapi_validator.py function validate_openapi_spec (line 42) | def validate_openapi_spec(spec: Dict[str, Any]) -> bool: function extract_api_structure (line 100) | def extract_api_structure(spec: Dict[str, Any]) -> Dict[str, Any]: function find_pagination_endpoints (line 197) | def find_pagination_endpoints(spec: Dict[str, Any]) -> List[Tuple[str, s... FILE: src/openapi-mcp-server/tests/api/test_config.py function test_config_default_values (line 21) | def test_config_default_values(): function test_config_custom_values (line 32) | def test_config_custom_values(): function test_load_config_from_args (line 59) | def test_load_config_from_args(): function test_load_config_environment_variables (line 94) | def test_load_config_environment_variables(): function test_load_config_api_key_auth (line 129) | def test_load_config_api_key_auth(): function test_load_config_basic_auth (line 159) | def test_load_config_basic_auth(): function test_load_config_precedence (line 187) | def test_load_config_precedence(): FILE: src/openapi-mcp-server/tests/auth/test_api_key_auth.py class TestApiKeyAuthProvider (line 26) | class TestApiKeyAuthProvider: method test_init_with_valid_config (line 29) | def test_init_with_valid_config(self): method test_init_with_missing_api_key (line 54) | def test_init_with_missing_api_key(self): method test_init_with_invalid_location (line 68) | def test_init_with_invalid_location(self): method test_api_key_in_header (line 83) | def test_api_key_in_header(self): method test_api_key_in_query (line 104) | def test_api_key_in_query(self): method test_api_key_in_cookie (line 125) | def test_api_key_in_cookie(self): method test_default_values (line 146) | def test_default_values(self): method test_hash_api_key (line 162) | def test_hash_api_key(self): method test_cached_auth_data (line 188) | def test_cached_auth_data(self, mock_cached_auth_data): method test_handle_validation_error (line 205) | def test_handle_validation_error(self): FILE: src/openapi-mcp-server/tests/auth/test_auth_cache.py class TestTokenCache (line 25) | class TestTokenCache(unittest.TestCase): method setUp (line 28) | def setUp(self): method test_get_set (line 32) | def test_get_set(self): method test_expiration (line 45) | def test_expiration(self): method test_custom_ttl (line 61) | def test_custom_ttl(self): method test_max_size (line 80) | def test_max_size(self): method test_delete (line 103) | def test_delete(self): method test_clear (line 120) | def test_clear(self): method test_cleanup (line 133) | def test_cleanup(self): class TestCachedAuthData (line 153) | class TestCachedAuthData(unittest.TestCase): method setUp (line 156) | def setUp(self): method test_caching (line 175) | def test_caching(self): method test_different_args (line 188) | def test_different_args(self): method test_expiration (line 201) | def test_expiration(self): FILE: src/openapi-mcp-server/tests/auth/test_auth_errors.py class TestAuthErrors (line 31) | class TestAuthErrors(unittest.TestCase): method test_auth_error_creation (line 34) | def test_auth_error_creation(self): method test_specific_error_classes (line 58) | def test_specific_error_classes(self): method test_create_auth_error (line 84) | def test_create_auth_error(self): method test_format_error_message (line 99) | def test_format_error_message(self): FILE: src/openapi-mcp-server/tests/auth/test_auth_factory.py class MockAuthProvider (line 27) | class MockAuthProvider(AuthProvider): method __init__ (line 30) | def __init__(self, config): method get_auth_headers (line 34) | def get_auth_headers(self): method get_auth_params (line 38) | def get_auth_params(self): method get_auth_cookies (line 42) | def get_auth_cookies(self): method get_httpx_auth (line 46) | def get_httpx_auth(self): method is_configured (line 50) | def is_configured(self): method provider_name (line 55) | def provider_name(self): class TestAuthFactory (line 60) | class TestAuthFactory: method setup_method (line 63) | def setup_method(self): method test_register_auth_provider (line 70) | def test_register_auth_provider(self): method test_register_duplicate_provider (line 106) | def test_register_duplicate_provider(self): method test_is_auth_type_available (line 111) | def test_is_auth_type_available(self): method test_get_auth_provider_none (line 117) | def test_get_auth_provider_none(self): method test_get_auth_provider_mock (line 125) | def test_get_auth_provider_mock(self): method test_get_auth_provider_unknown (line 134) | def test_get_auth_provider_unknown(self): FILE: src/openapi-mcp-server/tests/auth/test_auth_factory_caching.py class TestAuthFactoryCaching (line 25) | class TestAuthFactoryCaching(unittest.TestCase): method setUp (line 28) | def setUp(self): method test_provider_caching (line 37) | def test_provider_caching(self): method test_different_configs_different_instances (line 48) | def test_different_configs_different_instances(self): method test_cache_clearing (line 64) | def test_cache_clearing(self): method test_cache_hit_count (line 78) | def test_cache_hit_count(self): FILE: src/openapi-mcp-server/tests/auth/test_auth_factory_coverage.py class TestAuthFactoryCoverage (line 27) | class TestAuthFactoryCoverage: method test_get_auth_provider_unsupported_type (line 30) | def test_get_auth_provider_unsupported_type(self): method test_get_auth_provider_none_type (line 39) | def test_get_auth_provider_none_type(self): method test_register_auth_provider_functionality (line 48) | def test_register_auth_provider_functionality(self): method test_is_auth_type_available_edge_cases (line 60) | def test_is_auth_type_available_edge_cases(self): method test_clear_provider_cache_functionality (line 72) | def test_clear_provider_cache_functionality(self): method test_get_auth_provider_with_valid_none_type (line 81) | def test_get_auth_provider_with_valid_none_type(self): FILE: src/openapi-mcp-server/tests/auth/test_auth_protocol.py class MockAuthProvider (line 25) | class MockAuthProvider: method __init__ (line 28) | def __init__(self, name='mock_provider'): method provider_name (line 33) | def provider_name(self) -> str: method is_configured (line 37) | def is_configured(self) -> bool: method get_auth_headers (line 41) | def get_auth_headers(self) -> dict[str, str]: method get_auth_params (line 45) | def get_auth_params(self) -> dict[str, str]: method get_auth_cookies (line 49) | def get_auth_cookies(self) -> dict[str, str]: method get_httpx_auth (line 53) | def get_httpx_auth(self) -> httpx.Auth: function mock_factory (line 58) | def mock_factory(config: Config) -> AuthProviderProtocol: class TestAuthProtocol (line 63) | class TestAuthProtocol(unittest.TestCase): method test_auth_provider_protocol (line 66) | def test_auth_provider_protocol(self): method test_auth_provider_factory (line 79) | def test_auth_provider_factory(self): FILE: src/openapi-mcp-server/tests/auth/test_auth_protocol_additional.py class TestAuthProviderProtocol (line 6) | class TestAuthProviderProtocol: method test_auth_provider_protocol_implementation (line 9) | def test_auth_provider_protocol_implementation(self): FILE: src/openapi-mcp-server/tests/auth/test_auth_protocol_boost.py class TestAuthProtocolBoost (line 10) | class TestAuthProtocolBoost: method test_auth_provider_protocol (line 13) | def test_auth_provider_protocol(self): method test_auth_provider_factory (line 51) | def test_auth_provider_factory(self): FILE: src/openapi-mcp-server/tests/auth/test_auth_protocol_coverage.py class TestAuthProtocolCoverage (line 20) | class TestAuthProtocolCoverage: method test_auth_provider_protocol_methods (line 23) | def test_auth_provider_protocol_methods(self): method test_auth_provider_factory_methods (line 28) | def test_auth_provider_factory_methods(self): method test_auth_provider_protocol_runtime_checkable (line 41) | def test_auth_provider_protocol_runtime_checkable(self): method test_auth_provider_factory_create_provider_edge_cases (line 64) | def test_auth_provider_factory_create_provider_edge_cases(self): method test_auth_provider_factory_get_available_providers (line 73) | def test_auth_provider_factory_get_available_providers(self): FILE: src/openapi-mcp-server/tests/auth/test_auth_protocol_extended.py class MockAuthProvider (line 27) | class MockAuthProvider: method __init__ (line 30) | def __init__(self, name='mock_provider'): method provider_name (line 35) | def provider_name(self) -> str: method is_configured (line 39) | def is_configured(self) -> bool: method get_auth_headers (line 43) | def get_auth_headers(self) -> Dict[str, str]: method get_auth_params (line 47) | def get_auth_params(self) -> Dict[str, str]: method get_auth_cookies (line 51) | def get_auth_cookies(self) -> Dict[str, str]: method get_httpx_auth (line 55) | def get_httpx_auth(self) -> Optional[httpx.Auth]: class CustomAuthProvider (line 60) | class CustomAuthProvider(MockAuthProvider): method __init__ (line 63) | def __init__(self, config: Config): function create_custom_provider (line 69) | def create_custom_provider(config: Config) -> CustomAuthProvider: class TestAuthProtocolExtended (line 74) | class TestAuthProtocolExtended(unittest.TestCase): method test_auth_provider_protocol_with_custom_implementation (line 77) | def test_auth_provider_protocol_with_custom_implementation(self): method test_auth_provider_factory_with_custom_implementation (line 93) | def test_auth_provider_factory_with_custom_implementation(self): method test_type_variable_usage (line 109) | def test_type_variable_usage(self): method test_auth_provider_with_non_none_auth (line 127) | def test_auth_provider_with_non_none_auth(self): method test_auth_provider_factory_protocol (line 140) | def test_auth_provider_factory_protocol(self): FILE: src/openapi-mcp-server/tests/auth/test_auth_protocol_improved.py class TestAuthProtocolImproved (line 5) | class TestAuthProtocolImproved: method test_auth_provider_protocol_attributes (line 8) | def test_auth_provider_protocol_attributes(self): FILE: src/openapi-mcp-server/tests/auth/test_auth_provider_additional.py class TestNullAuthProvider (line 7) | class TestNullAuthProvider: method test_null_auth_provider_methods (line 10) | def test_null_auth_provider_methods(self): FILE: src/openapi-mcp-server/tests/auth/test_base_auth.py class TestBaseAuthProvider (line 21) | class TestBaseAuthProvider(unittest.TestCase): method test_requires_valid_config_decorator (line 24) | def test_requires_valid_config_decorator(self): method test_template_method_pattern (line 63) | def test_template_method_pattern(self): method test_invalid_config_template_method (line 94) | def test_invalid_config_template_method(self): FILE: src/openapi-mcp-server/tests/auth/test_base_auth_coverage.py class TestBaseAuthCoverage (line 25) | class TestBaseAuthCoverage: method test_base_auth_provider_initialization (line 28) | def test_base_auth_provider_initialization(self): method test_auth_provider_methods (line 41) | def test_auth_provider_methods(self): method test_format_error_message_function (line 46) | def test_format_error_message_function(self): method test_base_auth_provider_error_handling (line 64) | def test_base_auth_provider_error_handling(self): method test_auth_provider_abstract_methods (line 82) | def test_auth_provider_abstract_methods(self): method test_base_auth_provider_config_validation (line 97) | def test_base_auth_provider_config_validation(self): FILE: src/openapi-mcp-server/tests/auth/test_basic_auth.py class TestBasicAuthProvider (line 24) | class TestBasicAuthProvider: method test_init_with_valid_config (line 27) | def test_init_with_valid_config(self): method test_init_with_missing_username (line 42) | def test_init_with_missing_username(self): method test_init_with_missing_password (line 57) | def test_init_with_missing_password(self): method test_hash_credentials (line 72) | def test_hash_credentials(self): method test_cached_auth_data (line 105) | def test_cached_auth_data(self, mock_cached_auth_data): method test_log_validation_error (line 121) | def test_log_validation_error(self): method test_generate_auth_headers (line 145) | def test_generate_auth_headers(self): method test_generate_httpx_auth (line 168) | def test_generate_httpx_auth(self): FILE: src/openapi-mcp-server/tests/auth/test_bearer_auth.py class TestBearerAuthProvider (line 23) | class TestBearerAuthProvider: method test_init_with_valid_config (line 26) | def test_init_with_valid_config(self): method test_init_with_missing_token (line 49) | def test_init_with_missing_token(self): method test_custom_token_ttl (line 63) | def test_custom_token_ttl(self): method test_cached_auth_data (line 78) | def test_cached_auth_data(self, mock_cached_auth_data): method test_log_validation_error (line 93) | def test_log_validation_error(self): method test_generate_auth_headers (line 117) | def test_generate_auth_headers(self): method test_generate_auth_headers_with_empty_token (line 134) | def test_generate_auth_headers_with_empty_token(self): method test_initialize_auth (line 151) | def test_initialize_auth(self): FILE: src/openapi-mcp-server/tests/auth/test_cognito_auth.py class TestCognitoAuthProvider (line 32) | class TestCognitoAuthProvider(unittest.TestCase): method test_init_with_missing_client_id (line 35) | def test_init_with_missing_client_id(self): method test_init_with_missing_username (line 47) | def test_init_with_missing_username(self): method test_init_with_missing_password (line 59) | def test_init_with_missing_password(self): method test_extract_token_expiry_direct (line 71) | def test_extract_token_expiry_direct(self): method test_extract_token_expiry_error_direct (line 90) | def test_extract_token_expiry_error_direct(self): method test_log_validation_error_direct (line 106) | def test_log_validation_error_direct(self): method test_is_token_expired_or_expiring_soon_direct (line 119) | def test_is_token_expired_or_expiring_soon_direct(self): method test_provider_name_direct (line 138) | def test_provider_name_direct(self): method test_refresh_token_method_direct (line 148) | def test_refresh_token_method_direct(self): method test_refresh_token_error_direct (line 168) | def test_refresh_token_error_direct(self): method test_get_auth_headers_direct (line 187) | def test_get_auth_headers_direct(self): method test_get_auth_headers_with_refresh_direct (line 200) | def test_get_auth_headers_with_refresh_direct(self): method test_get_cognito_token_success_direct (line 215) | def test_get_cognito_token_success_direct(self): method test_get_cognito_token_with_user_pool_id_direct (line 270) | def test_get_cognito_token_with_user_pool_id_direct(self): method test_get_cognito_token_admin_fallback_direct (line 325) | def test_get_cognito_token_admin_fallback_direct(self): method test_get_cognito_token_not_authorized_direct (line 382) | def test_get_cognito_token_not_authorized_direct(self): method test_refresh_cognito_token_success_direct (line 426) | def test_refresh_cognito_token_success_direct(self): method test_refresh_cognito_token_admin_fallback_direct (line 476) | def test_refresh_cognito_token_admin_fallback_direct(self): method test_refresh_cognito_token_not_authorized_direct (line 523) | def test_refresh_cognito_token_not_authorized_direct(self): method test_refresh_cognito_token_error_direct (line 562) | def test_refresh_cognito_token_error_direct(self): class TestCognitoAuthProviderHeaders (line 601) | class TestCognitoAuthProviderHeaders(unittest.TestCase): method test_get_auth_headers (line 604) | def test_get_auth_headers(self): method test_get_auth_headers_no_token (line 617) | def test_get_auth_headers_no_token(self): FILE: src/openapi-mcp-server/tests/auth/test_cognito_auth_additional_coverage.py class TestCognitoAuthAdditionalCoverage (line 11) | class TestCognitoAuthAdditionalCoverage: method mock_config (line 15) | def mock_config(self): method test_refresh_token_success (line 30) | def test_refresh_token_success(self, mock_boto3, mock_config): method test_refresh_token_failure (line 77) | def test_refresh_token_failure(self, mock_boto3, mock_config): method test_refresh_cognito_token_success (line 103) | def test_refresh_cognito_token_success(self, mock_boto3, mock_config): method test_refresh_cognito_token_with_user_pool (line 144) | def test_refresh_cognito_token_with_user_pool(self, mock_boto3, mock_c... method test_refresh_cognito_token_failure (line 200) | def test_refresh_cognito_token_failure(self, mock_boto3, mock_config): method test_refresh_cognito_token_no_id_token (line 239) | def test_refresh_cognito_token_no_id_token(self, mock_boto3, mock_conf... method test_is_token_expired_or_expiring_soon (line 270) | def test_is_token_expired_or_expiring_soon(self): method test_check_and_refresh_token_if_needed_not_expired (line 289) | def test_check_and_refresh_token_if_needed_not_expired( method test_log_validation_error (line 310) | def test_log_validation_error(self, mock_boto3, mock_config): FILE: src/openapi-mcp-server/tests/auth/test_cognito_auth_boost_coverage.py class TestCognitoAuthBoostCoverage (line 12) | class TestCognitoAuthBoostCoverage: method mock_config (line 16) | def mock_config(self): method mock_boto3_client (line 30) | def mock_boto3_client(self): method test_cognito_auth_provider_init (line 37) | def test_cognito_auth_provider_init(self, mock_boto3, mock_requests_po... method test_is_configured_with_username_password (line 66) | def test_is_configured_with_username_password( method test_is_configured_with_client_credentials (line 91) | def test_is_configured_with_client_credentials( method test_is_configured_missing_credentials (line 119) | def test_is_configured_missing_credentials(self, mock_boto3, mock_conf... method test_get_auth_headers (line 144) | def test_get_auth_headers(self, mock_boto3, mock_requests_post, mock_c... method test_get_auth_headers_no_token (line 176) | def test_get_auth_headers_no_token(self, mock_boto3, mock_requests_pos... method test_check_and_refresh_token (line 219) | def test_check_and_refresh_token(self, mock_boto3, mock_requests_post,... FILE: src/openapi-mcp-server/tests/auth/test_cognito_auth_client_credentials.py class TestCognitoAuthClientCredentials (line 13) | class TestCognitoAuthClientCredentials: method mock_config (line 17) | def mock_config(self): method test_get_token_client_credentials_success (line 31) | def test_get_token_client_credentials_success(self, mock_post, mock_co... method test_get_token_client_credentials_no_scopes (line 66) | def test_get_token_client_credentials_no_scopes(self, mock_post, mock_... method test_get_token_client_credentials_error (line 98) | def test_get_token_client_credentials_error(self, mock_post, mock_conf... method test_get_token_client_credentials_no_token (line 125) | def test_get_token_client_credentials_no_token(self, mock_post, mock_c... method test_get_token_client_credentials_exception (line 153) | def test_get_token_client_credentials_exception(self, mock_post, mock_... method test_extract_token_expiry_valid_token (line 175) | def test_extract_token_expiry_valid_token(self): method test_extract_token_expiry_invalid_token (line 200) | def test_extract_token_expiry_invalid_token(self): method test_extract_token_expiry_malformed_payload (line 212) | def test_extract_token_expiry_malformed_payload(self): method test_determine_grant_type (line 227) | def test_determine_grant_type(self): method test_get_cognito_token_client_credentials (line 261) | def test_get_cognito_token_client_credentials(self, mock_boto3, mock_p... method test_get_cognito_token_password (line 296) | def test_get_cognito_token_password(self, mock_boto3, mock_post, mock_... FILE: src/openapi-mcp-server/tests/auth/test_cognito_auth_coverage_boost.py class TestCognitoAuthCoverageBoost (line 8) | class TestCognitoAuthCoverageBoost: method test_cognito_auth_init_exception_handling (line 12) | def test_cognito_auth_init_exception_handling(self, mock_get_token): method test_cognito_auth_successful_validation (line 38) | def test_cognito_auth_successful_validation(self, mock_get_token): method test_get_cognito_token_successful_auth (line 64) | def test_get_cognito_token_successful_auth(self, mock_boto_client): method test_refresh_cognito_token_successful (line 103) | def test_refresh_cognito_token_successful(self, mock_boto_client): method test_extract_token_expiry_valid_jwt (line 153) | def test_extract_token_expiry_valid_jwt(self): FILE: src/openapi-mcp-server/tests/auth/test_cognito_auth_exceptions.py class TestCognitoAuthExceptions (line 13) | class TestCognitoAuthExceptions: method test_user_not_confirmed_exception (line 17) | def test_user_not_confirmed_exception(self, mock_boto_client): method test_resource_not_found_exception (line 64) | def test_resource_not_found_exception(self, mock_boto_client): method test_general_exception (line 111) | def test_general_exception(self, mock_boto_client): method test_invalid_parameter_exception_with_missing_client_id (line 153) | def test_invalid_parameter_exception_with_missing_client_id(self, mock... method test_invalid_parameter_exception_with_missing_user_pool_id (line 206) | def test_invalid_parameter_exception_with_missing_user_pool_id(self, m... method test_invalid_parameter_exception_with_other_issue (line 259) | def test_invalid_parameter_exception_with_other_issue(self, mock_boto_... FILE: src/openapi-mcp-server/tests/auth/test_register.py class TestRegisterAuthProviders (line 24) | class TestRegisterAuthProviders: method test_register_auth_providers_no_env (line 27) | def test_register_auth_providers_no_env(self): method test_register_auth_providers_with_env (line 41) | def test_register_auth_providers_with_env(self): method test_register_provider_by_type_bearer (line 55) | def test_register_provider_by_type_bearer(self): method test_register_provider_by_type_basic (line 69) | def test_register_provider_by_type_basic(self): method test_register_provider_by_type_api_key (line 83) | def test_register_provider_by_type_api_key(self): method test_register_provider_by_type_cognito (line 97) | def test_register_provider_by_type_cognito(self): method test_register_provider_by_type_unknown (line 111) | def test_register_provider_by_type_unknown(self): method test_register_all_providers (line 123) | def test_register_all_providers(self): method test_register_auth_provider_decorator (line 141) | def test_register_auth_provider_decorator(self): FILE: src/openapi-mcp-server/tests/auth/test_register_coverage.py function test_cognito_import_error_handling (line 20) | def test_cognito_import_error_handling(): function test_module_level_comments_coverage (line 47) | def test_module_level_comments_coverage(): FILE: src/openapi-mcp-server/tests/prompts/standalone/test_operation_prompt.py function test_create_operation_prompt (line 20) | def test_create_operation_prompt(): FILE: src/openapi-mcp-server/tests/prompts/standalone/test_prompt_arguments.py function test_parameter_with_description_and_enum (line 18) | def test_parameter_with_description_and_enum(): function test_parameter_without_description (line 44) | def test_parameter_without_description(): function test_request_body_with_required_properties (line 62) | def test_request_body_with_required_properties(): FILE: src/openapi-mcp-server/tests/prompts/standalone/test_secure_operation_prompt.py class TestSecureOperationPrompt (line 22) | class TestSecureOperationPrompt(unittest.TestCase): method setUp (line 25) | def setUp(self): method test_basic_operation (line 31) | def test_basic_operation(self): method test_required_parameters (line 114) | def test_required_parameters(self): method test_resource_operation (line 189) | def test_resource_operation(self): method test_multiple_parameters (line 264) | def test_multiple_parameters(self): FILE: src/openapi-mcp-server/tests/prompts/test_mcp_prompt_manager.py function mock_server (line 26) | def mock_server(): function mock_client (line 50) | def mock_client(): function petstore_openapi_spec (line 62) | def petstore_openapi_spec(): function test_generate_prompts (line 143) | async def test_generate_prompts(mock_server, petstore_openapi_spec): function test_register_api_resource_handler (line 185) | async def test_register_api_resource_handler(mock_server, mock_client): function test_api_resource_handler_error (line 215) | async def test_api_resource_handler_error(mock_server, mock_client): function test_format_enum_values (line 237) | def test_format_enum_values(): function test_extract_prompt_arguments (line 267) | def test_extract_prompt_arguments(): function test_determine_operation_type (line 342) | def test_determine_operation_type(mock_server): function test_determine_mime_type (line 361) | def test_determine_mime_type(): function test_generate_operation_documentation (line 398) | def test_generate_operation_documentation(): function test_identify_workflows (line 440) | def test_identify_workflows(): function test_generate_workflow_documentation (line 480) | def test_generate_workflow_documentation(): FILE: src/openapi-mcp-server/tests/prompts/test_mcp_prompt_manager_integration.py function mock_server (line 23) | def mock_server(): function mock_client (line 52) | def mock_client(): function petstore_openapi_spec (line 64) | def petstore_openapi_spec(): function test_generate_prompts_integration (line 183) | async def test_generate_prompts_integration(mock_server, petstore_openap... function test_register_api_resource_handler_integration (line 203) | async def test_register_api_resource_handler_integration(mock_server, mo... function test_full_integration (line 233) | async def test_full_integration(mock_server, mock_client, petstore_opena... FILE: src/openapi-mcp-server/tests/prompts/test_models_dict_method.py function test_prompt_argument_dict_with_description (line 20) | def test_prompt_argument_dict_with_description(): function test_prompt_argument_dict_without_description (line 31) | def test_prompt_argument_dict_without_description(): function test_prompt_argument_dict_with_empty_description (line 44) | def test_prompt_argument_dict_with_empty_description(): function test_prompt_argument_dict_defaults (line 57) | def test_prompt_argument_dict_defaults(): FILE: src/openapi-mcp-server/tests/prompts/test_operation_prompts_extended.py function test_operation_prompt_with_security (line 20) | def test_operation_prompt_with_security(): function test_operation_prompt_with_enum_parameters (line 86) | def test_operation_prompt_with_enum_parameters(): function test_operation_prompt_with_request_body_schema (line 171) | def test_operation_prompt_with_request_body_schema(): function test_operation_prompt_error_handling (line 260) | def test_operation_prompt_error_handling(): FILE: src/openapi-mcp-server/tests/prompts/test_prompt_manager_additional.py class TestMCPPromptManagerAdditional (line 21) | class TestMCPPromptManagerAdditional: method prompt_manager (line 25) | def prompt_manager(self): method test_prompt_manager_initialization (line 29) | def test_prompt_manager_initialization(self): method test_prompt_manager_string_representation (line 35) | def test_prompt_manager_string_representation(self, prompt_manager): method test_prompt_manager_prompts_list (line 40) | def test_prompt_manager_prompts_list(self, prompt_manager): method test_prompt_manager_attributes (line 49) | def test_prompt_manager_attributes(self, prompt_manager): method test_prompt_manager_multiple_instances (line 61) | def test_prompt_manager_multiple_instances(self): method test_prompt_manager_prompts_manipulation (line 73) | def test_prompt_manager_prompts_manipulation(self, prompt_manager): FILE: src/openapi-mcp-server/tests/prompts/test_prompt_manager_comprehensive.py class TestMCPPromptManagerComprehensive (line 20) | class TestMCPPromptManagerComprehensive: method test_prompt_manager_class_attributes (line 23) | def test_prompt_manager_class_attributes(self): method test_prompt_manager_prompts_list_operations (line 39) | def test_prompt_manager_prompts_list_operations(self): method test_prompt_manager_edge_cases (line 77) | def test_prompt_manager_edge_cases(self): method test_prompt_manager_memory_efficiency (line 101) | def test_prompt_manager_memory_efficiency(self): method test_prompt_manager_string_methods (line 122) | def test_prompt_manager_string_methods(self): method test_prompt_manager_type_checking (line 146) | def test_prompt_manager_type_checking(self): method test_prompt_manager_concurrent_access (line 173) | def test_prompt_manager_concurrent_access(self): method test_prompt_manager_initialization_variations (line 195) | def test_prompt_manager_initialization_variations(self): FILE: src/openapi-mcp-server/tests/prompts/test_prompt_manager_coverage.py function test_generate_prompts_invalid_http_method (line 22) | async def test_generate_prompts_invalid_http_method(): function test_generate_prompts_missing_operation_id (line 62) | async def test_generate_prompts_missing_operation_id(): function test_register_api_resource_handler_exception_handling (line 101) | def test_register_api_resource_handler_exception_handling(): function test_register_api_resource_handler_no_server (line 123) | def test_register_api_resource_handler_no_server(): function test_register_api_resource_handler_successful_registration (line 140) | def test_register_api_resource_handler_successful_registration(): FILE: src/openapi-mcp-server/tests/prompts/test_prompt_registration.py function test_operation_prompt_registration (line 23) | def test_operation_prompt_registration(): function test_workflow_prompt_registration (line 66) | def test_workflow_prompt_registration(): function test_missing_add_prompt_method (line 109) | def test_missing_add_prompt_method(): function test_prompt_manager_generate_prompts (line 139) | async def test_prompt_manager_generate_prompts(): FILE: src/openapi-mcp-server/tests/test_api_name.py function openapi_spec (line 25) | def openapi_spec(): function temp_spec_file (line 40) | def temp_spec_file(openapi_spec): function test_extract_api_name_from_spec (line 53) | def test_extract_api_name_from_spec(openapi_spec): function test_extract_api_name_from_loaded_spec (line 59) | def test_extract_api_name_from_loaded_spec(temp_spec_file): function test_config_with_extracted_api_name (line 66) | def test_config_with_extracted_api_name(temp_spec_file): function test_extract_api_name_with_invalid_spec (line 122) | def test_extract_api_name_with_invalid_spec(): function test_extract_api_name_logging_coverage (line 157) | def test_extract_api_name_logging_coverage(): FILE: src/openapi-mcp-server/tests/test_cache_coverage_89.py class TestCacheCoverage89 (line 13) | class TestCacheCoverage89: method test_in_memory_cache_cleanup_with_expired_entries (line 16) | def test_in_memory_cache_cleanup_with_expired_entries(self): method test_cachetools_provider_invalidate_existing_key (line 46) | def test_cachetools_provider_invalidate_existing_key(self): method test_cachetools_provider_invalidate_nonexistent_key (line 71) | def test_cachetools_provider_invalidate_nonexistent_key(self): method test_cachetools_provider_clear (line 85) | def test_cachetools_provider_clear(self): method test_create_cache_provider_cachetools_exception_fallback (line 111) | def test_create_cache_provider_cachetools_exception_fallback(self): FILE: src/openapi-mcp-server/tests/test_client.py function list_prompts (line 35) | async def list_prompts(client: httpx.AsyncClient) -> List[str]: function get_prompt_content (line 51) | async def get_prompt_content(client: httpx.AsyncClient, prompt_name: str... function list_tools (line 67) | async def list_tools(client: httpx.AsyncClient) -> List[Dict[str, Any]]: function main (line 83) | async def main() -> None: FILE: src/openapi-mcp-server/tests/test_coverage_boost.py class TestCoverageBoost (line 22) | class TestCoverageBoost: method test_import_statements_coverage (line 25) | def test_import_statements_coverage(self): method test_module_level_code_coverage (line 40) | def test_module_level_code_coverage(self): method test_class_definition_coverage (line 54) | def test_class_definition_coverage(self): method test_method_signature_coverage (line 66) | def test_method_signature_coverage(self): method test_error_handling_paths (line 82) | def test_error_handling_paths(self): method test_conditional_branches (line 110) | def test_conditional_branches(self): method test_logging_code_paths (line 129) | def test_logging_code_paths(self): method test_configuration_usage (line 145) | def test_configuration_usage(self): method test_type_annotations_coverage (line 153) | def test_type_annotations_coverage(self): method test_return_value_usage (line 175) | def test_return_value_usage(self): FILE: src/openapi-mcp-server/tests/test_init.py class TestInit (line 18) | class TestInit: method test_version (line 21) | def test_version(self): method test_module_reload (line 38) | def test_module_reload(self): method test_get_caller_info_normal_case (line 52) | def test_get_caller_info_normal_case(self): method test_get_caller_info_no_current_frame (line 69) | def test_get_caller_info_no_current_frame(self, mock_currentframe): method test_get_caller_info_no_parent_frame (line 84) | def test_get_caller_info_no_parent_frame(self, mock_currentframe): method test_get_caller_info_no_caller_frame (line 102) | def test_get_caller_info_no_caller_frame(self, mock_getframeinfo, mock... FILE: src/openapi-mcp-server/tests/test_main.py function test_main_function (line 24) | def test_main_function(mock_asyncio_run, mock_parse_args, mock_load_conf... FILE: src/openapi-mcp-server/tests/test_main_extended.py function test_main_with_stdio_transport (line 26) | def test_main_with_stdio_transport( function test_main_with_sse_transport (line 72) | def test_main_with_sse_transport( function test_main_with_no_tools_or_resources (line 117) | def test_main_with_no_tools_or_resources( function test_main_with_get_all_counts_error (line 164) | def test_main_with_get_all_counts_error( FILE: src/openapi-mcp-server/tests/test_openapi_coverage_89.py class TestOpenAPICoverage89 (line 12) | class TestOpenAPICoverage89: method test_load_openapi_spec_file_not_found (line 15) | def test_load_openapi_spec_file_not_found(self): method test_load_openapi_spec_yaml_without_pyyaml (line 20) | def test_load_openapi_spec_yaml_without_pyyaml(self): method test_load_openapi_spec_invalid_yaml (line 53) | def test_load_openapi_spec_invalid_yaml(self): method test_load_openapi_spec_invalid_json_and_yaml_without_pyyaml (line 81) | def test_load_openapi_spec_invalid_json_and_yaml_without_pyyaml(self): method test_load_openapi_spec_prance_exception_fallback (line 103) | def test_load_openapi_spec_prance_exception_fallback(self): FILE: src/openapi-mcp-server/tests/test_server.py function mock_config (line 23) | def mock_config(): function test_create_mcp_server_basic (line 48) | def test_create_mcp_server_basic( function test_create_mcp_server_missing_spec (line 87) | def test_create_mcp_server_missing_spec( function test_create_mcp_server_missing_base_url (line 116) | def test_create_mcp_server_missing_base_url( function test_create_mcp_server_invalid_spec (line 150) | def test_create_mcp_server_invalid_spec( FILE: src/openapi-mcp-server/tests/test_server_auth_errors.py class TestServerAuthErrors (line 8) | class TestServerAuthErrors: method test_bearer_auth_not_configured (line 13) | def test_bearer_auth_not_configured(self, mock_get_auth, mock_exit): method test_basic_auth_not_configured (line 38) | def test_basic_auth_not_configured(self, mock_get_auth, mock_exit): method test_api_key_auth_not_configured (line 64) | def test_api_key_auth_not_configured(self, mock_get_auth, mock_exit): method test_cognito_auth_not_configured (line 89) | def test_cognito_auth_not_configured(self, mock_get_auth, mock_exit): method test_unknown_auth_not_configured (line 116) | def test_unknown_auth_not_configured(self, mock_get_auth, mock_exit): FILE: src/openapi-mcp-server/tests/test_server_coverage_boost.py class TestServerCoverageBoost (line 8) | class TestServerCoverageBoost: method test_create_mcp_server_with_auth_type_registration (line 15) | def test_create_mcp_server_with_auth_type_registration( FILE: src/openapi-mcp-server/tests/test_server_coverage_boost_2.py class TestServerCoverageBoost (line 12) | class TestServerCoverageBoost: method mock_fastmcp (line 16) | def mock_fastmcp(self): method mock_prompt_manager (line 26) | def mock_prompt_manager(self): method test_setup_signal_handlers (line 35) | def test_setup_signal_handlers(self, mock_signal): method test_create_mcp_server_basic (line 44) | def test_create_mcp_server_basic(self, mock_fastmcp): FILE: src/openapi-mcp-server/tests/test_server_exception_handling.py function test_get_all_counts_attribute_error_handling (line 22) | async def test_get_all_counts_attribute_error_handling(): function test_get_all_counts_general_exception_handling (line 51) | async def test_get_all_counts_general_exception_handling(): FILE: src/openapi-mcp-server/tests/test_server_extended.py function mock_config (line 23) | def mock_config(): function test_create_mcp_server_with_query_params_routes (line 47) | def test_create_mcp_server_with_query_params_routes( function test_create_mcp_server_with_prompt_generation (line 113) | def test_create_mcp_server_with_prompt_generation( function test_setup_signal_handlers (line 151) | def test_setup_signal_handlers(mock_exit, mock_metrics, mock_logger, moc... FILE: src/openapi-mcp-server/tests/test_server_httpx_version.py function mock_config (line 23) | def mock_config(): function test_create_mcp_server_httpx_version_error (line 50) | def test_create_mcp_server_httpx_version_error( FILE: src/openapi-mcp-server/tests/test_server_part1.py function mock_config (line 23) | def mock_config(): function test_create_mcp_server_basic (line 48) | def test_create_mcp_server_basic( function test_create_mcp_server_missing_spec (line 87) | def test_create_mcp_server_missing_spec( function test_create_mcp_server_missing_base_url (line 116) | def test_create_mcp_server_missing_base_url( function test_create_mcp_server_invalid_spec (line 150) | def test_create_mcp_server_invalid_spec( FILE: src/openapi-mcp-server/tests/test_server_route_logging.py class TestServerRouteLogging (line 8) | class TestServerRouteLogging: method test_create_server_logs_routes (line 18) | def test_create_server_logs_routes( method test_create_server_no_debug_logging (line 93) | def test_create_server_no_debug_logging( FILE: src/openapi-mcp-server/tests/test_server_signal_handlers.py function test_setup_signal_handlers_registration (line 24) | def test_setup_signal_handlers_registration(mock_metrics, mock_logger, m... function test_signal_handler_sigterm (line 47) | def test_signal_handler_sigterm(mock_exit, mock_metrics, mock_logger, mo... function test_signal_handler_sigint (line 78) | def test_signal_handler_sigint(mock_exit, mock_metrics, mock_logger, moc... function test_signal_handler_sigint_default_handler (line 114) | def test_signal_handler_sigint_default_handler(mock_exit, mock_metrics, ... function test_signal_handler_sigint_ignore_handler (line 146) | def test_signal_handler_sigint_ignore_handler(mock_exit, mock_metrics, m... FILE: src/openapi-mcp-server/tests/utils/test_cache_provider.py function test_in_memory_cache_provider_init (line 25) | def test_in_memory_cache_provider_init(): function test_in_memory_cache_provider_get_set (line 36) | def test_in_memory_cache_provider_get_set(): function test_in_memory_cache_provider_invalidate (line 52) | def test_in_memory_cache_provider_invalidate(): function test_in_memory_cache_provider_clear (line 72) | def test_in_memory_cache_provider_clear(): function test_in_memory_cache_provider_ttl (line 88) | def test_in_memory_cache_provider_ttl(): function test_create_cache_provider (line 108) | def test_create_cache_provider(): function test_cached_decorator (line 114) | def test_cached_decorator(): function test_cached_decorator_with_complex_args (line 141) | def test_cached_decorator_with_complex_args(): FILE: src/openapi-mcp-server/tests/utils/test_error_handler.py class TestErrorHandlerUtils (line 32) | class TestErrorHandlerUtils: method test_extract_error_details_json (line 35) | def test_extract_error_details_json(self): method test_extract_error_details_text (line 44) | def test_extract_error_details_text(self): method test_extract_error_details_json_error (line 53) | def test_extract_error_details_json_error(self): method test_format_error_message_basic (line 63) | def test_format_error_message_basic(self): method test_format_error_message_with_details (line 68) | def test_format_error_message_with_details(self): class TestHandleHttpError (line 76) | class TestHandleHttpError: method test_handle_401_error (line 79) | def test_handle_401_error(self): method test_handle_404_error (line 101) | def test_handle_404_error(self): class TestHandleRequestError (line 122) | class TestHandleRequestError: method test_handle_connect_timeout (line 125) | def test_handle_connect_timeout(self): class TestSafeRequest (line 149) | class TestSafeRequest: method test_successful_request (line 153) | async def test_successful_request(self): FILE: src/openapi-mcp-server/tests/utils/test_error_handler_boost.py class TestErrorHandlerBoost (line 11) | class TestErrorHandlerBoost: method mock_logger (line 15) | def mock_logger(self): method test_api_error_class (line 24) | def test_api_error_class(self): method test_api_error_with_httpx_error (line 50) | def test_api_error_with_httpx_error(self, mock_logger): FILE: src/openapi-mcp-server/tests/utils/test_error_handler_extended.py class TestAPIError (line 39) | class TestAPIError: method test_init (line 42) | def test_init(self): method test_str (line 50) | def test_str(self): method test_repr (line 55) | def test_repr(self): class TestExtractErrorDetails (line 61) | class TestExtractErrorDetails: method test_extract_json_details (line 64) | def test_extract_json_details(self): method test_extract_text_details (line 74) | def test_extract_text_details(self): method test_extract_json_decode_error (line 84) | def test_extract_json_decode_error(self): method test_extract_large_text (line 95) | def test_extract_large_text(self): class TestFormatErrorMessage (line 107) | class TestFormatErrorMessage: method test_format_common_error (line 110) | def test_format_common_error(self): method test_format_auth_error (line 115) | def test_format_auth_error(self): method test_format_auth_error_with_details (line 121) | def test_format_auth_error_with_details(self): method test_format_auth_error_with_nested_details (line 127) | def test_format_auth_error_with_nested_details(self): method test_format_unknown_error (line 133) | def test_format_unknown_error(self): class TestHandleHttpError (line 139) | class TestHandleHttpError: method test_handle_auth_error (line 142) | def test_handle_auth_error(self): method test_handle_auth_error_with_jwt_decode (line 168) | def test_handle_auth_error_with_jwt_decode(self): class TestHandleRequestError (line 202) | class TestHandleRequestError: method test_handle_connect_timeout (line 205) | def test_handle_connect_timeout(self): method test_handle_read_timeout (line 218) | def test_handle_read_timeout(self): method test_handle_connect_error (line 231) | def test_handle_connect_error(self): method test_handle_generic_error (line 244) | def test_handle_generic_error(self): class TestSafeRequest (line 258) | class TestSafeRequest: method test_successful_request (line 262) | async def test_successful_request(self): method test_request_error (line 280) | async def test_request_error(self): FILE: src/openapi-mcp-server/tests/utils/test_error_handler_fix.py class TestHandleRequestError (line 27) | class TestHandleRequestError: method test_handle_connect_timeout (line 30) | def test_handle_connect_timeout(self): method test_handle_read_timeout (line 52) | def test_handle_read_timeout(self): method test_handle_connect_error (line 74) | def test_handle_connect_error(self): method test_handle_generic_error (line 96) | def test_handle_generic_error(self): class TestSafeRequest (line 119) | class TestSafeRequest: method test_request_error (line 123) | async def test_request_error(self): FILE: src/openapi-mcp-server/tests/utils/test_http_client.py function test_http_client_factory (line 27) | async def test_http_client_factory(): function test_make_request (line 53) | async def test_make_request(mock_request): function test_make_request_with_params (line 73) | async def test_make_request_with_params(mock_request): function test_make_request_with_json (line 94) | async def test_make_request_with_json(mock_request): function test_make_request_with_retry (line 114) | async def test_make_request_with_retry(): function test_make_request_with_retry_and_error (line 141) | async def test_make_request_with_retry_and_error(): FILE: src/openapi-mcp-server/tests/utils/test_http_client_comprehensive.py class TestHttpClientComprehensive (line 22) | class TestHttpClientComprehensive: method test_create_client_with_cognito_auth_session_manager (line 25) | def test_create_client_with_cognito_auth_session_manager(self): method test_create_client_with_auth_without_session_manager (line 46) | def test_create_client_with_auth_without_session_manager(self): method test_create_client_with_cognito_auth_unauthenticated (line 61) | def test_create_client_with_cognito_auth_unauthenticated(self): method test_create_client_with_complex_timeout (line 81) | def test_create_client_with_complex_timeout(self): method test_create_client_with_all_parameters (line 89) | def test_create_client_with_all_parameters(self): method test_create_client_uses_config_defaults (line 113) | def test_create_client_uses_config_defaults(self): method test_create_client_auth_logging_edge_cases (line 120) | def test_create_client_auth_logging_edge_cases(self): method test_create_client_with_none_values (line 138) | def test_create_client_with_none_values(self): method test_create_client_base_url_variations (line 151) | def test_create_client_base_url_variations(self): method test_create_client_headers_merge (line 166) | def test_create_client_headers_merge(self): FILE: src/openapi-mcp-server/tests/utils/test_http_client_extended.py class MockCognitoAuth (line 25) | class MockCognitoAuth(httpx.Auth): method __init__ (line 28) | def __init__(self, token='mock_token'): method auth_flow (line 35) | def auth_flow(self, request): function test_http_client_factory_with_cognito_auth (line 42) | async def test_http_client_factory_with_cognito_auth(): function test_http_client_factory_with_auth_and_headers (line 55) | async def test_http_client_factory_with_auth_and_headers(): function test_http_client_factory_with_auth_no_token (line 71) | async def test_http_client_factory_with_auth_no_token(): function test_http_client_factory_with_auth_and_existing_auth_header (line 85) | async def test_http_client_factory_with_auth_and_existing_auth_header(): function test_http_client_factory_with_custom_limits (line 103) | async def test_http_client_factory_with_custom_limits(): function test_make_request_with_retry_max_attempts (line 118) | async def test_make_request_with_retry_max_attempts(): function test_make_request_with_retry_http_status_error (line 142) | async def test_make_request_with_retry_http_status_error(): function test_make_request_with_retry_timeout_error (line 173) | async def test_make_request_with_retry_timeout_error(): function test_tenacity_retry_if_available (line 202) | async def test_tenacity_retry_if_available(): FILE: src/openapi-mcp-server/tests/utils/test_http_client_extended2.py function test_http_client_factory_create_client (line 24) | def test_http_client_factory_create_client(mock_async_client): function test_http_client_factory_create_client_with_custom_settings (line 48) | def test_http_client_factory_create_client_with_custom_settings(mock_asy... FILE: src/openapi-mcp-server/tests/utils/test_http_client_import_error.py function test_http_client_header_masking_debug_logging (line 20) | def test_http_client_header_masking_debug_logging(): function test_http_client_header_masking_non_bearer_auth (line 54) | def test_http_client_header_masking_non_bearer_auth(): function test_http_client_no_sensitive_headers (line 86) | def test_http_client_no_sensitive_headers(): FILE: src/openapi-mcp-server/tests/utils/test_metrics_provider.py function test_api_call_metrics_dataclass (line 24) | def test_api_call_metrics_dataclass(): function test_tool_metrics_dataclass (line 44) | def test_tool_metrics_dataclass(): class TestInMemoryMetricsProvider (line 62) | class TestInMemoryMetricsProvider: method test_init (line 65) | def test_init(self): method test_record_api_call_success (line 75) | def test_record_api_call_success(self): method test_record_api_call_error (line 99) | def test_record_api_call_error(self): method test_record_api_call_max_history (line 124) | def test_record_api_call_max_history(self): method test_record_tool_usage_success (line 138) | def test_record_tool_usage_success(self): method test_record_tool_usage_error (line 159) | def test_record_tool_usage_error(self): method test_record_tool_usage_max_history (line 181) | def test_record_tool_usage_max_history(self): method test_get_api_stats (line 195) | def test_get_api_stats(self): method test_get_tool_stats (line 222) | def test_get_tool_stats(self): method test_get_recent_errors (line 247) | def test_get_recent_errors(self): method test_get_summary (line 281) | def test_get_summary(self): FILE: src/openapi-mcp-server/tests/utils/test_metrics_provider_decorators.py function test_api_call_timer_success (line 25) | async def test_api_call_timer_success(): function test_api_call_timer_error (line 56) | async def test_api_call_timer_error(): function test_tool_usage_timer_success (line 84) | async def test_tool_usage_timer_success(): function test_tool_usage_timer_error (line 111) | async def test_tool_usage_timer_error(): FILE: src/openapi-mcp-server/tests/utils/test_metrics_provider_extended2.py class TestApiCallMetrics (line 28) | class TestApiCallMetrics: method test_api_call_metrics_creation (line 31) | def test_api_call_metrics_creation(self): method test_api_call_metrics_with_error (line 50) | def test_api_call_metrics_with_error(self): class TestToolMetrics (line 70) | class TestToolMetrics: method test_tool_metrics_creation (line 73) | def test_tool_metrics_creation(self): method test_tool_metrics_with_error (line 90) | def test_tool_metrics_with_error(self): class TestMetricsProvider (line 108) | class TestMetricsProvider: method test_metrics_provider_is_abstract (line 111) | def test_metrics_provider_is_abstract(self): class TestApiCallTimer (line 117) | class TestApiCallTimer: method test_api_call_timer_success (line 121) | async def test_api_call_timer_success(self): method test_api_call_timer_error (line 153) | async def test_api_call_timer_error(self): class TestToolUsageTimer (line 181) | class TestToolUsageTimer: method test_tool_usage_timer_success (line 185) | async def test_tool_usage_timer_success(self): method test_tool_usage_timer_error (line 217) | async def test_tool_usage_timer_error(self): FILE: src/openapi-mcp-server/tests/utils/test_metrics_provider_prometheus.py class MockPrometheusClient (line 16) | class MockPrometheusClient: class Counter (line 19) | class Counter: method __init__ (line 22) | def __init__(self, name, description, labelnames=None): method labels (line 28) | def labels(self, **kwargs): class Histogram (line 34) | class Histogram: method __init__ (line 37) | def __init__(self, name, description, labelnames=None): method labels (line 43) | def labels(self, **kwargs): method start_http_server (line 50) | def start_http_server(port): class TestPrometheusMetricsProvider (line 55) | class TestPrometheusMetricsProvider: method test_init (line 63) | def test_init(self): method test_get_api_stats (line 85) | def test_get_api_stats(self): method test_get_tool_stats (line 99) | def test_get_tool_stats(self): method test_get_recent_errors (line 118) | def test_get_recent_errors(self): method test_get_summary (line 155) | def test_get_summary(self): function test_create_metrics_provider_basic (line 176) | def test_create_metrics_provider_basic(): FILE: src/openapi-mcp-server/tests/utils/test_openapi.py function no_cache_decorator (line 24) | def no_cache_decorator(ttl_seconds=None): function always_valid_spec (line 37) | def always_valid_spec(*args, **kwargs): class TestOpenAPIUtils (line 54) | class TestOpenAPIUtils: method test_no_args (line 57) | def test_no_args(self): method test_url_http_error (line 63) | def test_url_http_error(self, mock_get): method test_url_timeout (line 75) | def test_url_timeout(self, mock_get): method test_url_invalid_spec (line 85) | def test_url_invalid_spec(self, mock_get): method test_path_not_found (line 103) | def test_path_not_found(self, mock_exists): method test_path_yaml_import_error (line 112) | def test_path_yaml_import_error(self, mock_json, mock_file, mock_exists): method test_path_yaml_invalid_spec (line 120) | def test_path_yaml_invalid_spec(self, mock_json, mock_file, mock_exists): method test_path_invalid_validation (line 134) | def test_path_invalid_validation(self, mock_json, mock_file, mock_exis... FILE: src/openapi-mcp-server/tests/utils/test_openapi_validator.py class TestOpenAPIValidator (line 24) | class TestOpenAPIValidator: method test_validate_openapi_spec_valid (line 27) | def test_validate_openapi_spec_valid(self): method test_validate_openapi_spec_missing_openapi (line 36) | def test_validate_openapi_spec_missing_openapi(self): method test_validate_openapi_spec_missing_info (line 44) | def test_validate_openapi_spec_missing_info(self): method test_validate_openapi_spec_missing_paths (line 52) | def test_validate_openapi_spec_missing_paths(self): method test_validate_openapi_spec_unsupported_version (line 60) | def test_validate_openapi_spec_unsupported_version(self): method test_validate_openapi_spec_with_openapi_core (line 70) | def test_validate_openapi_spec_with_openapi_core(self): method test_validate_openapi_spec_with_openapi_core_exception (line 95) | def test_validate_openapi_spec_with_openapi_core_exception(self): method test_validate_openapi_spec_with_openapi_spec_class (line 120) | def test_validate_openapi_spec_with_openapi_spec_class(self): method test_validate_openapi_spec_with_spec_class (line 157) | def test_validate_openapi_spec_with_spec_class(self): method test_validate_openapi_spec_with_unsupported_openapi_core (line 190) | def test_validate_openapi_spec_with_unsupported_openapi_core(self): method test_extract_api_structure_basic (line 219) | def test_extract_api_structure_basic(self): method test_extract_api_structure_with_parameters (line 249) | def test_extract_api_structure_with_parameters(self): method test_extract_api_structure_with_request_body (line 291) | def test_extract_api_structure_with_request_body(self): method test_extract_api_structure_with_responses (line 325) | def test_extract_api_structure_with_responses(self): method test_extract_api_structure_with_schemas (line 358) | def test_extract_api_structure_with_schemas(self): method test_extract_api_structure_missing_fields (line 394) | def test_extract_api_structure_missing_fields(self): method test_find_pagination_endpoints_with_pagination_params (line 416) | def test_find_pagination_endpoints_with_pagination_params(self): method test_find_pagination_endpoints_with_array_response (line 487) | def test_find_pagination_endpoints_with_array_response(self): method test_find_pagination_endpoints_non_get_methods (line 586) | def test_find_pagination_endpoints_non_get_methods(self): FILE: src/postgres-mcp-server/awslabs/postgres_mcp_server/connection/abstract_db_connection.py class AbstractDBConnection (line 21) | class AbstractDBConnection(ABC): method __init__ (line 24) | def __init__(self, readonly: bool): method readonly_query (line 33) | def readonly_query(self) -> bool: method execute_query (line 42) | async def execute_query( method close (line 57) | async def close(self) -> None: method check_connection_health (line 62) | async def check_connection_health(self) -> bool: FILE: src/postgres-mcp-server/awslabs/postgres_mcp_server/connection/cp_api_connection.py function internal_create_rds_client (line 26) | def internal_create_rds_client(region: str): function internal_get_instance_properties (line 31) | def internal_get_instance_properties(target_endpoint: str, region: str) ... function internal_get_cluster_properties (line 63) | def internal_get_cluster_properties(cluster_identifier: str, region: str... function internal_create_serverless_cluster (line 125) | def internal_create_serverless_cluster( function setup_aurora_iam_policy_for_current_user (line 275) | def setup_aurora_iam_policy_for_current_user( FILE: src/postgres-mcp-server/awslabs/postgres_mcp_server/connection/db_connection_map.py class DatabaseType (line 25) | class DatabaseType(str, Enum): class ConnectionMethod (line 32) | class ConnectionMethod(str, Enum): class DBConnectionMap (line 40) | class DBConnectionMap: method __init__ (line 43) | def __init__(self): method get (line 48) | def get( method set (line 66) | def set( method remove (line 85) | def remove( method get_keys_json (line 105) | def get_keys_json(self) -> str: method close_all (line 120) | def close_all(self) -> None: FILE: src/postgres-mcp-server/awslabs/postgres_mcp_server/connection/psycopg_pool_connection.py class PsycopgPoolConnection (line 35) | class PsycopgPoolConnection(AbstractDBConnection): method __init__ (line 46) | def __init__( method initialize_pool (line 102) | async def initialize_pool(self): method _get_connection (line 141) | async def _get_connection(self): method check_expiry (line 150) | async def check_expiry(self): method execute_query (line 161) | async def execute_query( method _convert_parameters (line 224) | def _convert_parameters(self, parameters: List[Dict[str, Any]]) -> Dic... method _convert_sql_for_psycopg (line 247) | def _convert_sql_for_psycopg(self, sql: str) -> str: method _get_credentials_from_secret (line 259) | def _get_credentials_from_secret( method close (line 309) | async def close(self) -> None: method check_connection_health (line 318) | async def check_connection_health(self) -> bool: method get_pool_stats (line 327) | async def get_pool_stats(self) -> Dict[str, int]: method get_iam_auth_token (line 341) | def get_iam_auth_token(self) -> str: FILE: src/postgres-mcp-server/awslabs/postgres_mcp_server/connection/rds_api_connection.py class RDSDataAPIConnection (line 26) | class RDSDataAPIConnection(AbstractDBConnection): method __init__ (line 29) | def __init__( method execute_query (line 57) | async def execute_query( method _execute_readonly_query (line 85) | def _execute_readonly_query( method close (line 145) | async def close(self) -> None: method check_connection_health (line 150) | async def check_connection_health(self) -> bool: FILE: src/postgres-mcp-server/awslabs/postgres_mcp_server/mutable_sql_detector.py function detect_mutating_keywords (line 68) | def detect_mutating_keywords(sql_text: str) -> list[str]: function check_sql_injection_risk (line 74) | def check_sql_injection_risk(sql: str) -> list[dict]: FILE: src/postgres-mcp-server/awslabs/postgres_mcp_server/server.py class DummyCtx (line 68) | class DummyCtx: method error (line 71) | async def error(self, message): function extract_cell (line 81) | def extract_cell(cell: dict): function parse_execute_response (line 98) | def parse_execute_response(response: dict) -> list[dict]: function run_query (line 119) | async def run_query( function get_table_schema (line 221) | async def get_table_schema( function connect_to_database (line 285) | def connect_to_database( function is_database_connected (line 341) | def is_database_connected( function get_database_connection_info (line 377) | def get_database_connection_info() -> str: function create_cluster (line 388) | def create_cluster( function get_job_status (line 459) | def get_job_status(job_id: str) -> dict: function create_cluster_worker (line 477) | def create_cluster_worker( function internal_connect_to_database (line 531) | def internal_connect_to_database( function _parse_identifier_parts (line 687) | def _parse_identifier_parts(table_name: str) -> Optional[list[str]]: function validate_table_name (line 766) | def validate_table_name(table_name: str | None) -> bool: function main (line 812) | def main(): FILE: src/postgres-mcp-server/tests/conftest.py class MockException (line 7) | class MockException(Enum): class Mock_boto3_client (line 15) | class Mock_boto3_client: method __init__ (line 18) | def __init__(self, error: MockException = MockException.No): method begin_transaction (line 28) | def begin_transaction(self, **kwargs) -> dict: method commit_transaction (line 58) | def commit_transaction(self, **kwargs) -> dict: method rollback_transaction (line 88) | def rollback_transaction(self, **kwargs) -> dict: method execute_statement (line 118) | def execute_statement(self, **kwargs) -> dict: method add_mock_response (line 152) | def add_mock_response(self, response): class Mock_DBConnection (line 161) | class Mock_DBConnection: method __init__ (line 164) | def __init__(self, readonly, error: MockException = MockException.No): method data_client (line 179) | def data_client(self): method readonly_query (line 188) | def readonly_query(self): method execute_query (line 196) | async def execute_query( class DummyCtx (line 249) | class DummyCtx: method error (line 252) | async def error(self, message): function mock_DBConnection (line 263) | def mock_DBConnection(): class MockConnectionPool (line 275) | class MockConnectionPool: method __init__ (line 278) | def __init__( method open (line 308) | async def open(self, wait=True, timeout=15.0): method close (line 323) | async def close(self): method connection (line 334) | async def connection(self, timeout=15.0): class MockConnection (line 360) | class MockConnection: method __init__ (line 363) | def __init__(self): method transaction (line 367) | def transaction(self): method cursor (line 384) | def cursor(self): class MockAsyncConnection (line 427) | class MockAsyncConnection: method __init__ (line 430) | def __init__(self): method transaction (line 434) | async def transaction(self): method execute (line 451) | async def execute(self, query, params=None): class Mock_PsycopgPoolConnection (line 478) | class Mock_PsycopgPoolConnection: method __init__ (line 481) | def __init__( method readonly_query (line 525) | def readonly_query(self): method execute_query (line 533) | async def execute_query( method close (line 551) | async def close(self): method check_connection_health (line 560) | async def check_connection_health(self): method get_pool_stats (line 568) | def get_pool_stats(self): function mock_PsycopgPoolConnection (line 583) | def mock_PsycopgPoolConnection(): FILE: src/postgres-mcp-server/tests/e2e_test_sql_injection.py function test_sql_injection (line 7) | async def test_sql_injection(args): function parse_args (line 86) | def parse_args(): FILE: src/postgres-mcp-server/tests/test_abstract_db_connection.py class ConcreteDBConnection (line 21) | class ConcreteDBConnection(AbstractDBConnection): method execute_query (line 28) | async def execute_query( method close (line 34) | async def close(self) -> None: method check_connection_health (line 38) | async def check_connection_health(self) -> bool: class TestAbstractDBConnection (line 43) | class TestAbstractDBConnection: method test_initialization_readonly_true (line 52) | def test_initialization_readonly_true(self): method test_initialization_readonly_false (line 57) | def test_initialization_readonly_false(self): FILE: src/postgres-mcp-server/tests/test_cp_api_connection.py function create_mock_cluster_response (line 19) | def create_mock_cluster_response( function create_mock_instance_response (line 50) | def create_mock_instance_response( function create_mock_tags (line 66) | def create_mock_tags(include_mcp: bool = True) -> Dict: function create_client_error (line 74) | def create_client_error(error_code: str, message: str = 'Test error') ->... function mock_rds_client (line 88) | def mock_rds_client(): function mock_boto3_client (line 118) | def mock_boto3_client(mock_rds_client): function mock_time_sleep (line 129) | def mock_time_sleep(): function mock_logger (line 137) | def mock_logger(): function mock_print (line 145) | def mock_print(): class TestInternalCreateRdsClient (line 156) | class TestInternalCreateRdsClient: method test_create_rds_client_standard (line 160) | def test_create_rds_client_standard(self, mock_boto3_client): class TestInternalGetClusterProperties (line 172) | class TestInternalGetClusterProperties: method test_get_cluster_properties_empty_cluster_id_raises_error (line 175) | def test_get_cluster_properties_empty_cluster_id_raises_error(self): method test_get_cluster_properties_empty_region_raises_error (line 180) | def test_get_cluster_properties_empty_region_raises_error(self): method test_get_cluster_properties_empty_response (line 186) | def test_get_cluster_properties_empty_response(self, mock_create_client): method test_get_cluster_properties_success (line 196) | def test_get_cluster_properties_success(self, mock_create_client): method test_get_cluster_properties_client_error (line 223) | def test_get_cluster_properties_client_error(self, mock_create_client): class TestInternalCreateServerlessCluster (line 240) | class TestInternalCreateServerlessCluster: method test_missing_region_raises_error (line 243) | def test_missing_region_raises_error(self): method test_missing_cluster_identifier_raises_error (line 253) | def test_missing_cluster_identifier_raises_error(self): method test_missing_engine_version_raises_error (line 263) | def test_missing_engine_version_raises_error(self): method test_missing_database_name_raises_error (line 273) | def test_missing_database_name_raises_error(self): method test_successful_cluster_creation (line 283) | def test_successful_cluster_creation( method test_cloudwatch_logs_disabled (line 358) | def test_cloudwatch_logs_disabled(self, mock_boto3_client, mock_rds_cl... method test_cluster_creation_fails (line 374) | def test_cluster_creation_fails(self, mock_boto3_client, mock_rds_clie... method test_cluster_waiter_timeout (line 398) | def test_cluster_waiter_timeout(self, mock_boto3_client, mock_rds_clie... method test_instance_creation_fails (line 428) | def test_instance_creation_fails(self, mock_boto3_client, mock_rds_cli... method test_instance_waiter_timeout (line 452) | def test_instance_waiter_timeout(self, mock_boto3_client, mock_rds_cli... method test_no_secret_arn_in_response (line 483) | def test_no_secret_arn_in_response(self, mock_boto3_client, mock_rds_c... method test_unexpected_exception (line 506) | def test_unexpected_exception(self, mock_boto3_client, mock_rds_client... class TestSetupAuroraIamPolicy (line 529) | class TestSetupAuroraIamPolicy: method mock_sts_client (line 533) | def mock_sts_client(self): method test_iam_user_identity (line 560) | def test_iam_user_identity(self, mock_sts_client): method test_assumed_role_identity (line 602) | def test_assumed_role_identity(self, mock_sts_client): method test_federated_user_raises_error (line 639) | def test_federated_user_raises_error(self, mock_sts_client): method test_root_user_raises_error (line 659) | def test_root_user_raises_error(self, mock_sts_client): method test_invalid_db_user_raises_error (line 679) | def test_invalid_db_user_raises_error(self, mock_sts_client): method test_invalid_cluster_resource_id_raises_error (line 690) | def test_invalid_cluster_resource_id_raises_error(self, mock_sts_client): method test_invalid_cluster_region_raises_error (line 701) | def test_invalid_cluster_region_raises_error(self, mock_sts_client): method test_policy_update_adds_new_resource (line 712) | def test_policy_update_adds_new_resource(self, mock_sts_client): method test_policy_already_includes_resource (line 780) | def test_policy_already_includes_resource(self, mock_sts_client): method test_policy_version_limit_deletes_oldest (line 828) | def test_policy_version_limit_deletes_oldest(self, mock_sts_client): FILE: src/postgres-mcp-server/tests/test_cp_api_iam_policy.py function mock_boto3_clients (line 22) | def mock_boto3_clients(): class TestSetupAuroraIamPolicyAdditional (line 48) | class TestSetupAuroraIamPolicyAdditional: method test_policy_already_attached_to_user (line 51) | def test_policy_already_attached_to_user(self, mock_boto3_clients): method test_policy_already_attached_to_role (line 104) | def test_policy_already_attached_to_role(self, mock_boto3_clients): method test_policy_update_with_version_limit (line 156) | def test_policy_update_with_version_limit(self, mock_boto3_clients): method test_policy_creation_race_condition (line 228) | def test_policy_creation_race_condition(self, mock_boto3_clients): method test_attach_policy_to_role_access_denied (line 263) | def test_attach_policy_to_role_access_denied(self, mock_boto3_clients): method test_attach_policy_role_not_found (line 301) | def test_attach_policy_role_not_found(self, mock_boto3_clients): method test_attach_policy_limit_exceeded (line 352) | def test_attach_policy_limit_exceeded(self, mock_boto3_clients): method test_unexpected_arn_format (line 402) | def test_unexpected_arn_format(self, mock_boto3_clients): method test_sts_get_caller_identity_error (line 422) | def test_sts_get_caller_identity_error(self, mock_boto3_clients): method test_policy_update_with_string_resource (line 440) | def test_policy_update_with_string_resource(self, mock_boto3_clients): method test_generic_exception_during_policy_creation (line 495) | def test_generic_exception_during_policy_creation(self, mock_boto3_cli... method test_generic_exception_during_policy_update (line 523) | def test_generic_exception_during_policy_update(self, mock_boto3_clien... method test_generic_exception_during_policy_attachment (line 555) | def test_generic_exception_during_policy_attachment(self, mock_boto3_c... method test_policy_update_no_non_default_versions (line 602) | def test_policy_update_no_non_default_versions(self, mock_boto3_clients): method test_attach_policy_to_role_not_already_attached (line 671) | def test_attach_policy_to_role_not_already_attached(self, mock_boto3_c... FILE: src/postgres-mcp-server/tests/test_cp_api_simple_functions.py class TestInternalGetInstanceProperties (line 24) | class TestInternalGetInstanceProperties: method test_get_instance_properties_success (line 28) | def test_get_instance_properties_success(self, mock_create_client): method test_get_instance_properties_not_found (line 69) | def test_get_instance_properties_not_found(self, mock_create_client): method test_get_instance_properties_client_error (line 94) | def test_get_instance_properties_client_error(self, mock_create_client): method test_get_instance_properties_generic_exception (line 110) | def test_get_instance_properties_generic_exception(self, mock_create_c... method test_get_instance_properties_multiple_pages (line 124) | def test_get_instance_properties_multiple_pages(self, mock_create_clie... FILE: src/postgres-mcp-server/tests/test_db_connection_map.py class TestDBConnectionMap (line 16) | class TestDBConnectionMap: method connection_map (line 20) | def connection_map(self): method mock_connection (line 25) | def mock_connection(self): method test_initialization (line 33) | def test_initialization(self, connection_map): method test_get_nonexistent_connection_returns_none (line 40) | def test_get_nonexistent_connection_returns_none(self, connection_map): method test_get_existing_connection (line 47) | def test_get_existing_connection(self, connection_map, mock_connection): method test_get_with_none_method_raises_error (line 61) | def test_get_with_none_method_raises_error(self, connection_map): method test_get_with_empty_cluster_allows (line 66) | def test_get_with_empty_cluster_allows(self, connection_map): method test_get_with_none_cluster_allows (line 71) | def test_get_with_none_cluster_allows(self, connection_map): method test_get_with_none_database_raises_error (line 76) | def test_get_with_none_database_raises_error(self, connection_map): method test_set_new_connection (line 83) | def test_set_new_connection(self, connection_map, mock_connection): method test_set_overwrites_existing_connection (line 95) | def test_set_overwrites_existing_connection(self, connection_map): method test_set_with_empty_cluster_allows (line 119) | def test_set_with_empty_cluster_allows(self, connection_map, mock_conn... method test_set_with_none_cluster_allows (line 127) | def test_set_with_none_cluster_allows(self, connection_map, mock_conne... method test_set_with_none_database_raises_error (line 135) | def test_set_with_none_database_raises_error(self, connection_map, moc... method test_set_with_none_connection_raises_error (line 142) | def test_set_with_none_connection_raises_error(self, connection_map): method test_remove_existing_connection (line 151) | def test_remove_existing_connection(self, connection_map, mock_connect... method test_remove_nonexistent_connection_logs_info (line 168) | def test_remove_nonexistent_connection_logs_info(self, mock_logger, co... method test_remove_with_empty_cluster_allows (line 185) | def test_remove_with_empty_cluster_allows(self, connection_map): method test_remove_with_none_cluster_allows (line 190) | def test_remove_with_none_cluster_allows(self, connection_map): method test_remove_with_none_database_raises_error (line 195) | def test_remove_with_none_database_raises_error(self, connection_map): method test_get_keys_empty_map (line 202) | def test_get_keys_empty_map(self, connection_map): method test_get_keys_single_connection (line 208) | def test_get_keys_single_connection(self, connection_map, mock_connect... method test_get_keys_multiple_connections (line 222) | def test_get_keys_multiple_connections(self, connection_map): method test_get_keys_returns_copy (line 249) | def test_get_keys_returns_copy(self, connection_map, mock_connection): method test_close_all_closes_all_connections (line 264) | def test_close_all_closes_all_connections(self, connection_map): method test_close_all_clears_map (line 286) | def test_close_all_clears_map(self, connection_map, mock_connection): method test_close_all_handles_close_exception (line 299) | def test_close_all_handles_close_exception(self, connection_map): method test_close_all_continues_after_exception (line 325) | def test_close_all_continues_after_exception(self, connection_map): method test_different_methods_different_connections (line 353) | def test_different_methods_different_connections(self, connection_map): method test_different_endpoints_different_connections (line 381) | def test_different_endpoints_different_connections(self, connection_map): method test_get_with_none_endpoint_allows (line 415) | def test_get_with_none_endpoint_allows(self, connection_map): method test_set_with_none_endpoint_allows (line 420) | def test_set_with_none_endpoint_allows(self, connection_map, mock_conn... method test_different_ports_different_connections (line 430) | def test_different_ports_different_connections(self, connection_map): method test_default_port_5432 (line 466) | def test_default_port_5432(self, connection_map, mock_connection): method test_concurrent_set_operations (line 487) | def test_concurrent_set_operations(self, connection_map): method test_concurrent_get_operations (line 527) | def test_concurrent_get_operations(self, connection_map, mock_connecti... method test_concurrent_set_and_get_operations (line 555) | def test_concurrent_set_and_get_operations(self, connection_map): method test_concurrent_remove_operations (line 589) | def test_concurrent_remove_operations(self, connection_map): method test_concurrent_remove_same_connection (line 623) | def test_concurrent_remove_same_connection(self, mock_logger, connecti... class TestDBConnectionMapIntegration (line 663) | class TestDBConnectionMapIntegration: method connection_map (line 667) | def connection_map(self): method test_typical_connection_lifecycle (line 671) | def test_typical_connection_lifecycle(self, connection_map): method test_multiple_databases_same_cluster (line 715) | def test_multiple_databases_same_cluster(self, connection_map): method test_cleanup_all_connections_on_shutdown (line 781) | def test_cleanup_all_connections_on_shutdown(self, connection_map): FILE: src/postgres-mcp-server/tests/test_psycopg_connector.py class TestPsycopgConnector (line 25) | class TestPsycopgConnector: method test_psycopg_connection_initialization (line 30) | async def test_psycopg_connection_initialization(self, mock_connection... method test_psycopg_connection_execute_query (line 65) | async def test_psycopg_connection_execute_query(self, mock_PsycopgPool... method test_psycopg_pool_stats (line 76) | async def test_psycopg_pool_stats(self, mock_PsycopgPoolConnection): method test_psycopg_connection_timeout_behavior (line 90) | async def test_psycopg_connection_timeout_behavior(self, mock_connecti... method test_psycopg_pool_min_size (line 122) | async def test_psycopg_pool_min_size(self, mock_connection_pool): method test_psycopg_pool_max_size (line 152) | async def test_psycopg_pool_max_size(self, mock_connection_pool): method test_connection_pool_concurrent_acquisition (line 185) | def test_connection_pool_concurrent_acquisition(self, mock_connection_... method test_connection_pool_max_size_enforcement (line 248) | def test_connection_pool_max_size_enforcement(self, mock_connection_po... method test_connection_pool_timeout_with_concurrency (line 317) | def test_connection_pool_timeout_with_concurrency(self, mock_connectio... method test_initialize_pool_with_iam_auth (line 388) | async def test_initialize_pool_with_iam_auth(self): method test_initialize_pool_without_iam_auth (line 411) | async def test_initialize_pool_without_iam_auth(self): method test_iam_auth_requires_db_user (line 432) | def test_iam_auth_requires_db_user(self): method test_convert_parameters (line 448) | async def test_convert_parameters(self): method test_get_credentials_from_secret_test_mode (line 481) | async def test_get_credentials_from_secret_test_mode(self): method test_close_pool (line 503) | async def test_close_pool(self): method test_close_pool_when_none (line 528) | async def test_close_pool_when_none(self): method test_get_credentials_from_secret_with_username_key (line 545) | def test_get_credentials_from_secret_with_username_key(self): method test_get_credentials_from_secret_with_user_key (line 573) | def test_get_credentials_from_secret_with_user_key(self): method test_get_credentials_from_secret_with_Username_key (line 601) | def test_get_credentials_from_secret_with_Username_key(self): method test_get_credentials_from_secret_missing_username (line 629) | def test_get_credentials_from_secret_missing_username(self): method test_get_credentials_from_secret_missing_password (line 651) | def test_get_credentials_from_secret_missing_password(self): method test_get_credentials_from_secret_no_secret_string (line 673) | def test_get_credentials_from_secret_no_secret_string(self): method test_get_credentials_from_secret_client_error (line 695) | def test_get_credentials_from_secret_client_error(self): method test_get_iam_auth_token (line 719) | def test_get_iam_auth_token(self): method test_check_connection_health_success (line 746) | async def test_check_connection_health_success(self): method test_check_connection_health_failure (line 772) | async def test_check_connection_health_failure(self): method test_check_connection_health_empty_records (line 794) | async def test_check_connection_health_empty_records(self): method test_get_pool_stats_no_pool (line 816) | async def test_get_pool_stats_no_pool(self): method test_get_pool_stats_with_pool (line 840) | async def test_get_pool_stats_with_pool(self): method test_initialize_pool_with_secrets_manager (line 874) | async def test_initialize_pool_with_secrets_manager(self): method test_initialize_pool_with_iam_auth_token (line 905) | async def test_initialize_pool_with_iam_auth_token(self): method test_initialize_pool_already_initialized (line 936) | async def test_initialize_pool_already_initialized(self): method test_check_expiry_not_expired (line 962) | async def test_check_expiry_not_expired(self): method test_check_expiry_expired (line 989) | async def test_check_expiry_expired(self): FILE: src/postgres-mcp-server/tests/test_rds_api_connection.py class TestRDSDataAPIConnection (line 21) | class TestRDSDataAPIConnection: method rds_connection (line 25) | def rds_connection(self): method rds_connection_readonly (line 37) | def rds_connection_readonly(self): method test_initialization (line 48) | def test_initialization(self, rds_connection): method test_execute_query_with_transaction_rollback_on_error (line 55) | async def test_execute_query_with_transaction_rollback_on_error(self, ... method test_execute_query_error_before_transaction_starts (line 86) | async def test_execute_query_error_before_transaction_starts(self, rds... method test_initialization_readonly (line 105) | def test_initialization_readonly(self, rds_connection_readonly): method test_execute_query_without_parameters (line 110) | async def test_execute_query_without_parameters(self, rds_connection): method test_execute_query_with_parameters (line 137) | async def test_execute_query_with_parameters(self, rds_connection): method test_execute_query_readonly_mode (line 156) | async def test_execute_query_readonly_mode(self, rds_connection_readon... method test_execute_query_readonly_with_parameters (line 190) | async def test_execute_query_readonly_with_parameters(self, rds_connec... method test_execute_query_readonly_rollback_on_error (line 211) | async def test_execute_query_readonly_rollback_on_error(self, rds_conn... method test_close (line 236) | async def test_close(self, rds_connection): method test_check_connection_health_success (line 243) | async def test_check_connection_health_success(self, rds_connection): method test_check_connection_health_failure (line 259) | async def test_check_connection_health_failure(self, rds_connection): method test_check_connection_health_empty_result (line 271) | async def test_check_connection_health_empty_result(self, rds_connecti... method test_initialization_with_boto3_client (line 286) | def test_initialization_with_boto3_client(self, mock_boto_client): FILE: src/postgres-mcp-server/tests/test_server.py function wrap_value (line 407) | def wrap_value(val): function mock_execute_statement_response (line 437) | def mock_execute_statement_response( function get_mock_normal_query_response (line 476) | def get_mock_normal_query_response(): function validate_normal_query_response (line 482) | def validate_normal_query_response(column_records): function setup_mock_connection (line 489) | def setup_mock_connection(mock_db_connection, connection_method=Connecti... function test_run_query_well_formatted_response (line 497) | async def test_run_query_well_formatted_response(): function test_run_query_safe_read_queries_on_redonly_settings (line 529) | async def test_run_query_safe_read_queries_on_redonly_settings(): function test_run_query_risky_queries_without_parameters (line 558) | async def test_run_query_risky_queries_without_parameters(): function test_run_query_throw_client_error (line 588) | async def test_run_query_throw_client_error(): function test_run_query_throw_unexpected_error (line 606) | async def test_run_query_throw_unexpected_error(): function test_run_query_write_queries_on_readonly_setting (line 624) | async def test_run_query_write_queries_on_readonly_setting(): function test_run_query_write_queries_on_write_allowed_setting (line 645) | async def test_run_query_write_queries_on_write_allowed_setting(): function test_get_table_schema (line 674) | async def test_get_table_schema(): function test_main_with_valid_parameters (line 696) | def test_main_with_valid_parameters(monkeypatch, capsys): function test_main_with_invalid_parameters (line 742) | def test_main_with_invalid_parameters(monkeypatch, capsys): function test_run_query_with_psycopg_connection (line 777) | async def test_run_query_with_psycopg_connection(): function test_main_with_psycopg_parameters (line 813) | def test_main_with_psycopg_parameters(monkeypatch, capsys): function test_main_with_invalid_psycopg_parameters (line 932) | def test_main_with_invalid_psycopg_parameters(monkeypatch, capsys): function test_get_database_connection_info_empty (line 966) | def test_get_database_connection_info_empty(): function test_get_database_connection_info_with_connections (line 977) | def test_get_database_connection_info_with_connections(): function test_get_job_status_not_found (line 1009) | def test_get_job_status_not_found(): function test_get_job_status_existing_job (line 1016) | def test_get_job_status_existing_job(): function test_is_database_connected_false (line 1039) | def test_is_database_connected_false(): function test_is_database_connected_true (line 1050) | def test_is_database_connected_true(): function test_is_database_connected_with_endpoint (line 1071) | def test_is_database_connected_with_endpoint(): function test_create_cluster_serverless (line 1104) | async def test_create_cluster_serverless(): function test_create_cluster_error_handling (line 1139) | async def test_create_cluster_error_handling(): FILE: src/postgres-mcp-server/tests/test_server_error_handling.py class TestRunQueryErrorHandling (line 27) | class TestRunQueryErrorHandling: method test_run_query_no_connection_available (line 31) | async def test_run_query_no_connection_available(self): method test_run_query_with_query_parameters (line 53) | async def test_run_query_with_query_parameters(self): class TestConnectToDatabaseErrorHandling (line 84) | class TestConnectToDatabaseErrorHandling: method test_connect_to_database_exception_handling (line 87) | def test_connect_to_database_exception_handling(self): method test_connect_to_database_success (line 108) | def test_connect_to_database_success(self): class TestDummyCtx (line 138) | class TestDummyCtx: method test_dummy_ctx_error_does_nothing (line 142) | async def test_dummy_ctx_error_does_nothing(self): FILE: src/postgres-mcp-server/tests/test_server_helpers.py class TestExtractCell (line 19) | class TestExtractCell: method test_extract_null_cell (line 22) | def test_extract_null_cell(self): method test_extract_string_value (line 27) | def test_extract_string_value(self): method test_extract_long_value (line 32) | def test_extract_long_value(self): method test_extract_double_value (line 37) | def test_extract_double_value(self): method test_extract_boolean_value (line 42) | def test_extract_boolean_value(self): method test_extract_blob_value (line 47) | def test_extract_blob_value(self): method test_extract_array_value (line 52) | def test_extract_array_value(self): method test_extract_empty_cell (line 57) | def test_extract_empty_cell(self): method test_extract_cell_with_multiple_keys_prefers_first (line 62) | def test_extract_cell_with_multiple_keys_prefers_first(self): class TestParseExecuteResponse (line 69) | class TestParseExecuteResponse: method test_parse_empty_response (line 72) | def test_parse_empty_response(self): method test_parse_single_row_single_column (line 78) | def test_parse_single_row_single_column(self): method test_parse_multiple_rows_multiple_columns (line 85) | def test_parse_multiple_rows_multiple_columns(self): method test_parse_with_null_values (line 99) | def test_parse_with_null_values(self): method test_parse_with_various_types (line 109) | def test_parse_with_various_types(self): method test_parse_missing_column_metadata (line 142) | def test_parse_missing_column_metadata(self): method test_parse_missing_records (line 150) | def test_parse_missing_records(self): FILE: src/postgres-mcp-server/tests/test_server_internal_functions.py class TestInternalConnectToDatabase (line 29) | class TestInternalConnectToDatabase: method test_missing_region_raises_error (line 32) | def test_missing_region_raises_error(self): method test_missing_connection_method_raises_error (line 45) | def test_missing_connection_method_raises_error(self): method test_missing_database_type_raises_error (line 58) | def test_missing_database_type_raises_error(self): method test_apg_missing_cluster_identifier_raises_error (line 71) | def test_apg_missing_cluster_identifier_raises_error(self): method test_returns_existing_connection (line 87) | def test_returns_existing_connection(self): method test_creates_rds_api_connection (line 109) | def test_creates_rds_api_connection(self): method test_creates_pgwire_iam_connection (line 143) | def test_creates_pgwire_iam_connection(self): method test_creates_pgwire_connection_with_secrets (line 179) | def test_creates_pgwire_connection_with_secrets(self): method test_rpg_instance_without_cluster (line 216) | def test_rpg_instance_without_cluster(self): method test_uses_cluster_endpoint_when_not_provided (line 247) | def test_uses_cluster_endpoint_when_not_provided(self): class TestCreateClusterWorker (line 283) | class TestCreateClusterWorker: method test_worker_success_updates_job_status (line 286) | def test_worker_success_updates_job_status(self): method test_worker_failure_updates_job_status (line 319) | def test_worker_failure_updates_job_status(self): class TestParseIdentifierPartsUnquoted (line 352) | class TestParseIdentifierPartsUnquoted: method test_simple_name (line 355) | def test_simple_name(self): method test_leading_underscore (line 360) | def test_leading_underscore(self): method test_with_digits (line 365) | def test_with_digits(self): method test_with_dollar_sign (line 370) | def test_with_dollar_sign(self): method test_all_underscores (line 375) | def test_all_underscores(self): method test_single_char (line 380) | def test_single_char(self): method test_uppercase (line 385) | def test_uppercase(self): method test_unicode_letter (line 390) | def test_unicode_letter(self): method test_mixed_case_digits_underscores_dollar (line 395) | def test_mixed_case_digits_underscores_dollar(self): class TestParseIdentifierPartsUnquotedInvalid (line 401) | class TestParseIdentifierPartsUnquotedInvalid: method test_starts_with_digit (line 404) | def test_starts_with_digit(self): method test_hyphen (line 409) | def test_hyphen(self): method test_space (line 414) | def test_space(self): method test_semicolon (line 419) | def test_semicolon(self): method test_single_quote (line 424) | def test_single_quote(self): method test_parenthesis (line 429) | def test_parenthesis(self): method test_starts_with_dot (line 434) | def test_starts_with_dot(self): method test_empty_string (line 439) | def test_empty_string(self): method test_dollar_sign_start (line 444) | def test_dollar_sign_start(self): class TestParseIdentifierPartsQuoted (line 450) | class TestParseIdentifierPartsQuoted: method test_simple_quoted (line 453) | def test_simple_quoted(self): method test_quoted_with_hyphen (line 458) | def test_quoted_with_hyphen(self): method test_quoted_with_spaces (line 463) | def test_quoted_with_spaces(self): method test_quoted_with_special_chars (line 468) | def test_quoted_with_special_chars(self): method test_quoted_with_digits_first (line 473) | def test_quoted_with_digits_first(self): method test_quoted_with_semicolon (line 478) | def test_quoted_with_semicolon(self): method test_quoted_with_single_quote (line 483) | def test_quoted_with_single_quote(self): method test_escaped_double_quote (line 488) | def test_escaped_double_quote(self): method test_multiple_escaped_double_quotes (line 493) | def test_multiple_escaped_double_quotes(self): method test_quoted_single_char (line 498) | def test_quoted_single_char(self): method test_quoted_unicode (line 503) | def test_quoted_unicode(self): method test_quoted_newline (line 508) | def test_quoted_newline(self): method test_quoted_tab (line 513) | def test_quoted_tab(self): method test_quoted_dot_inside (line 518) | def test_quoted_dot_inside(self): method test_quoted_only_escaped_quote (line 523) | def test_quoted_only_escaped_quote(self): class TestParseIdentifierPartsQuotedInvalid (line 530) | class TestParseIdentifierPartsQuotedInvalid: method test_zero_length_quoted (line 533) | def test_zero_length_quoted(self): method test_unclosed_quote (line 538) | def test_unclosed_quote(self): method test_nul_character (line 543) | def test_nul_character(self): method test_opening_quote_only (line 548) | def test_opening_quote_only(self): class TestParseIdentifierPartsSchemaQualified (line 554) | class TestParseIdentifierPartsSchemaQualified: method test_two_parts_unquoted (line 557) | def test_two_parts_unquoted(self): method test_three_parts_unquoted (line 562) | def test_three_parts_unquoted(self): method test_four_parts_unquoted (line 567) | def test_four_parts_unquoted(self): method test_two_parts_both_quoted (line 572) | def test_two_parts_both_quoted(self): method test_mixed_quoted_unquoted (line 577) | def test_mixed_quoted_unquoted(self): method test_quoted_then_unquoted (line 582) | def test_quoted_then_unquoted(self): method test_three_parts_mixed (line 587) | def test_three_parts_mixed(self): method test_pg_catalog (line 592) | def test_pg_catalog(self): method test_all_parts_quoted_with_escapes (line 597) | def test_all_parts_quoted_with_escapes(self): class TestParseIdentifierPartsDotEdgeCases (line 603) | class TestParseIdentifierPartsDotEdgeCases: method test_trailing_dot (line 606) | def test_trailing_dot(self): method test_leading_dot (line 611) | def test_leading_dot(self): method test_double_dot (line 616) | def test_double_dot(self): method test_only_dot (line 621) | def test_only_dot(self): method test_dot_after_quoted_identifier (line 626) | def test_dot_after_quoted_identifier(self): method test_dot_before_quoted_identifier (line 631) | def test_dot_before_quoted_identifier(self): class TestParseIdentifierPartsSQLInjection (line 637) | class TestParseIdentifierPartsSQLInjection: method test_union_injection (line 640) | def test_union_injection(self): method test_drop_table_injection (line 647) | def test_drop_table_injection(self): method test_comment_injection (line 652) | def test_comment_injection(self): method test_semicolon_injection (line 657) | def test_semicolon_injection(self): method test_backslash_escape_attempt (line 662) | def test_backslash_escape_attempt(self): method test_single_quote_escape_attempt (line 667) | def test_single_quote_escape_attempt(self): method test_quoted_injection_is_treated_as_literal (line 672) | def test_quoted_injection_is_treated_as_literal(self): class TestValidateTableNameValid (line 683) | class TestValidateTableNameValid: method test_simple_name (line 686) | def test_simple_name(self): method test_leading_underscore (line 690) | def test_leading_underscore(self): method test_with_digits (line 694) | def test_with_digits(self): method test_with_dollar_sign (line 698) | def test_with_dollar_sign(self): method test_schema_qualified (line 702) | def test_schema_qualified(self): method test_fully_qualified (line 706) | def test_fully_qualified(self): method test_quoted_simple (line 710) | def test_quoted_simple(self): method test_quoted_with_spaces (line 714) | def test_quoted_with_spaces(self): method test_quoted_with_special_chars (line 718) | def test_quoted_with_special_chars(self): method test_quoted_escaped_double_quote (line 722) | def test_quoted_escaped_double_quote(self): method test_mixed_quoting (line 726) | def test_mixed_quoting(self): method test_both_quoted (line 730) | def test_both_quoted(self): method test_unicode_unquoted (line 734) | def test_unicode_unquoted(self): method test_unicode_schema_qualified (line 738) | def test_unicode_schema_qualified(self): method test_single_char (line 742) | def test_single_char(self): method test_quoted_single_char (line 746) | def test_quoted_single_char(self): method test_pg_catalog (line 750) | def test_pg_catalog(self): method test_all_underscores (line 754) | def test_all_underscores(self): method test_uppercase (line 758) | def test_uppercase(self): method test_max_length_identifier (line 762) | def test_max_length_identifier(self): method test_max_length_each_part (line 767) | def test_max_length_each_part(self): method test_three_parts_max_length_each (line 773) | def test_three_parts_max_length_each(self): method test_unicode_multibyte_at_limit (line 780) | def test_unicode_multibyte_at_limit(self): method test_quoted_sql_keywords_is_valid (line 786) | def test_quoted_sql_keywords_is_valid(self): method test_quoted_union_is_valid (line 790) | def test_quoted_union_is_valid(self): method test_exactly_three_parts (line 794) | def test_exactly_three_parts(self): method test_exactly_two_parts (line 798) | def test_exactly_two_parts(self): method test_dollar_sign_subsequent (line 802) | def test_dollar_sign_subsequent(self): class TestValidateTableNameInvalidType (line 807) | class TestValidateTableNameInvalidType: method test_empty_string (line 810) | def test_empty_string(self): class TestValidateTableNameInvalidIdentifier (line 815) | class TestValidateTableNameInvalidIdentifier: method test_zero_length_quoted (line 818) | def test_zero_length_quoted(self): method test_leading_dot (line 822) | def test_leading_dot(self): method test_trailing_dot (line 826) | def test_trailing_dot(self): method test_double_dot (line 830) | def test_double_dot(self): method test_starts_with_digit_unquoted (line 834) | def test_starts_with_digit_unquoted(self): method test_hyphen_unquoted (line 838) | def test_hyphen_unquoted(self): method test_space_unquoted (line 842) | def test_space_unquoted(self): method test_unclosed_quote (line 846) | def test_unclosed_quote(self): method test_only_dot (line 850) | def test_only_dot(self): method test_nul_in_quoted (line 854) | def test_nul_in_quoted(self): method test_whitespace_only (line 858) | def test_whitespace_only(self): method test_newline (line 862) | def test_newline(self): method test_tab (line 866) | def test_tab(self): method test_carriage_return (line 870) | def test_carriage_return(self): method test_dollar_sign_start (line 874) | def test_dollar_sign_start(self): method test_backtick (line 878) | def test_backtick(self): class TestValidateTableNameTooManyParts (line 883) | class TestValidateTableNameTooManyParts: method test_four_parts (line 886) | def test_four_parts(self): method test_five_parts (line 890) | def test_five_parts(self): method test_four_parts_quoted (line 894) | def test_four_parts_quoted(self): class TestValidateTableNameIdentifierTooLong (line 899) | class TestValidateTableNameIdentifierTooLong: method test_one_byte_over_limit (line 902) | def test_one_byte_over_limit(self): method test_schema_part_too_long (line 907) | def test_schema_part_too_long(self): method test_table_part_too_long (line 912) | def test_table_part_too_long(self): method test_quoted_identifier_too_long (line 917) | def test_quoted_identifier_too_long(self): method test_unicode_multibyte_over_limit (line 922) | def test_unicode_multibyte_over_limit(self): class TestValidateTableNameSQLInjection (line 929) | class TestValidateTableNameSQLInjection: method test_union_injection (line 932) | def test_union_injection(self): method test_drop_table_injection (line 941) | def test_drop_table_injection(self): method test_semicolon_injection (line 945) | def test_semicolon_injection(self): method test_comment_injection_double_dash (line 949) | def test_comment_injection_double_dash(self): method test_comment_injection_block (line 953) | def test_comment_injection_block(self): method test_single_quote_injection (line 957) | def test_single_quote_injection(self): method test_or_1_equals_1 (line 961) | def test_or_1_equals_1(self): method test_stacked_query (line 965) | def test_stacked_query(self): method test_hex_escape_attempt (line 969) | def test_hex_escape_attempt(self): method test_encoded_space (line 973) | def test_encoded_space(self): method test_subquery_attempt (line 977) | def test_subquery_attempt(self): method test_backtick_injection (line 981) | def test_backtick_injection(self): FILE: src/prometheus-mcp-server/awslabs/prometheus_mcp_server/models.py class MetricsList (line 21) | class MetricsList(BaseModel): class ServerInfo (line 33) | class ServerInfo(BaseModel): FILE: src/prometheus-mcp-server/awslabs/prometheus_mcp_server/server.py class ConfigManager (line 58) | class ConfigManager: method parse_arguments (line 62) | def parse_arguments(): method setup_basic_config (line 72) | def setup_basic_config(args): class AWSCredentials (line 90) | class AWSCredentials: method validate (line 94) | def validate(region: str, profile: Optional[str] = None) -> bool: class SecurityValidator (line 159) | class SecurityValidator: method validate_string (line 163) | def validate_string(value: str, context: str = 'value') -> bool: method validate_params (line 182) | def validate_params(params: Dict) -> bool: method validate_query (line 205) | def validate_query(query: str) -> bool: class PrometheusClient (line 217) | class PrometheusClient: method make_request (line 221) | async def make_request( class PrometheusConnection (line 331) | class PrometheusConnection: method test_connection (line 335) | async def test_connection( function get_prometheus_client (line 411) | def get_prometheus_client(region_name: Optional[str] = None, profile_nam... function get_workspace_details (line 434) | async def get_workspace_details( function execute_query (line 480) | async def execute_query( function execute_range_query (line 566) | async def execute_range_query( function list_metrics (line 645) | async def list_metrics( function get_server_info (line 704) | async def get_server_info( function get_available_workspaces (line 758) | async def get_available_workspaces( function extract_workspace_id_from_url (line 909) | def extract_workspace_id_from_url(url: str) -> Optional[str]: function configure_workspace_for_request (line 932) | async def configure_workspace_for_request( function async_main (line 1031) | async def async_main(): function main (line 1055) | def main(): FILE: src/prometheus-mcp-server/tests/conftest.py function mock_context (line 22) | def mock_context(): FILE: src/prometheus-mcp-server/tests/test_aws_credentials.py class TestAWSCredentials (line 22) | class TestAWSCredentials: method test_validate_success_with_profile (line 25) | def test_validate_success_with_profile(self): method test_validate_success_without_profile (line 48) | def test_validate_success_without_profile(self): method test_validate_no_credentials (line 71) | def test_validate_no_credentials(self): method test_validate_no_credentials_error (line 85) | def test_validate_no_credentials_error(self): method test_validate_client_error (line 99) | def test_validate_client_error(self): FILE: src/prometheus-mcp-server/tests/test_config_manager.py class TestConfigManager (line 27) | class TestConfigManager: method test_parse_arguments (line 30) | def test_parse_arguments(self): method test_setup_basic_config_with_args (line 51) | def test_setup_basic_config_with_args(self): method test_setup_basic_config_with_env_vars (line 69) | def test_setup_basic_config_with_env_vars(self): method test_setup_basic_config_with_defaults (line 95) | def test_setup_basic_config_with_defaults(self): FILE: src/prometheus-mcp-server/tests/test_consts.py class TestConsts (line 30) | class TestConsts: method test_api_version_path (line 33) | def test_api_version_path(self): method test_default_aws_region (line 38) | def test_default_aws_region(self): method test_default_max_retries (line 43) | def test_default_max_retries(self): method test_default_retry_delay (line 49) | def test_default_retry_delay(self): method test_default_service_name (line 55) | def test_default_service_name(self): method test_env_aws_profile (line 60) | def test_env_aws_profile(self): method test_env_aws_region (line 65) | def test_env_aws_region(self): method test_env_log_level (line 70) | def test_env_log_level(self): method test_server_instructions (line 75) | def test_server_instructions(self): FILE: src/prometheus-mcp-server/tests/test_coverage_gaps.py class TestPrometheusClientSuccess (line 8) | class TestPrometheusClientSuccess: method test_make_request_success_path (line 12) | async def test_make_request_success_path(self): method test_make_request_api_error (line 35) | async def test_make_request_api_error(self): class TestToolExceptionHandling (line 57) | class TestToolExceptionHandling: method test_list_metrics_exception (line 61) | async def test_list_metrics_exception(self): method test_get_server_info_exception (line 77) | async def test_get_server_info_exception(self): method test_get_available_workspaces_exception (line 93) | async def test_get_available_workspaces_exception(self): class TestMainExecution (line 109) | class TestMainExecution: method test_main_execution (line 112) | def test_main_execution(self): FILE: src/prometheus-mcp-server/tests/test_coverage_improvement.py class TestCoverageImprovement (line 29) | class TestCoverageImprovement: method test_extract_workspace_id_from_url (line 32) | def test_extract_workspace_id_from_url(self): method test_config_manager_parse_arguments (line 46) | def test_config_manager_parse_arguments(self): method test_config_manager_setup_basic_config (line 74) | def test_config_manager_setup_basic_config(self): method test_aws_credentials_validate (line 116) | def test_aws_credentials_validate(self): method test_prometheus_connection_test_connection (line 133) | async def test_prometheus_connection_test_connection(self): method test_get_prometheus_client (line 179) | def test_get_prometheus_client(self): method test_get_workspace_details (line 203) | async def test_get_workspace_details(self): FILE: src/prometheus-mcp-server/tests/test_final_coverage.py class TestFinalCoverage (line 8) | class TestFinalCoverage: method test_make_request_max_retries_reached (line 12) | async def test_make_request_max_retries_reached(self): FILE: src/prometheus-mcp-server/tests/test_init.py class TestInit (line 21) | class TestInit: method test_version (line 24) | def test_version(self): method test_module_reload (line 41) | def test_module_reload(self): FILE: src/prometheus-mcp-server/tests/test_main.py class TestMain (line 23) | class TestMain: method test_async_main_with_url (line 27) | async def test_async_main_with_url(self): method test_async_main_with_url_containing_workspace_id (line 53) | async def test_async_main_with_url_containing_workspace_id(self): method test_async_main_without_url (line 79) | async def test_async_main_without_url(self): method test_main_success (line 92) | def test_main_success(self): method test_main_with_workspace_id_in_url (line 131) | def test_main_with_workspace_id_in_url(self): method test_main_credentials_failure (line 180) | def test_main_credentials_failure(self): method test_main_server_error (line 211) | def test_main_server_error(self): FILE: src/prometheus-mcp-server/tests/test_models.py class TestModels (line 20) | class TestModels: method test_metrics_list (line 23) | def test_metrics_list(self): method test_server_info (line 46) | def test_server_info(self): FILE: src/prometheus-mcp-server/tests/test_prometheus_client.py class TestPrometheusClient (line 22) | class TestPrometheusClient: method test_make_request_success (line 26) | async def test_make_request_success(self): method test_make_request_no_url (line 32) | async def test_make_request_no_url(self): method test_make_request_invalid_endpoint_type (line 40) | async def test_make_request_invalid_endpoint_type(self): method test_make_request_dangerous_endpoint (line 52) | async def test_make_request_dangerous_endpoint(self): method test_make_request_dangerous_params (line 64) | async def test_make_request_dangerous_params(self): method test_make_request_api_url_construction (line 80) | async def test_make_request_api_url_construction(self): method test_make_request_api_error (line 86) | async def test_make_request_api_error(self): method test_make_request_network_error_with_retry (line 92) | async def test_make_request_network_error_with_retry(self): method test_make_request_max_retries_exceeded (line 98) | async def test_make_request_max_retries_exceeded(self): method test_make_request_no_credentials (line 104) | async def test_make_request_no_credentials(self): FILE: src/prometheus-mcp-server/tests/test_prometheus_connection.py class TestPrometheusConnection (line 24) | class TestPrometheusConnection: method test_test_connection_success (line 28) | async def test_test_connection_success(self): method test_test_connection_access_denied (line 48) | async def test_test_connection_access_denied(self): method test_test_connection_resource_not_found (line 68) | async def test_test_connection_resource_not_found(self): method test_test_connection_other_aws_error (line 88) | async def test_test_connection_other_aws_error(self): method test_test_connection_network_error (line 108) | async def test_test_connection_network_error(self): method test_test_connection_generic_error (line 127) | async def test_test_connection_generic_error(self): FILE: src/prometheus-mcp-server/tests/test_security_validator.py class TestSecurityValidator (line 20) | class TestSecurityValidator: method test_validate_string_safe (line 23) | def test_validate_string_safe(self): method test_validate_string_unsafe (line 36) | def test_validate_string_unsafe(self): method test_validate_params_safe (line 43) | def test_validate_params_safe(self): method test_validate_params_unsafe (line 67) | def test_validate_params_unsafe(self): method test_validate_query (line 76) | def test_validate_query(self): FILE: src/prometheus-mcp-server/tests/test_server_coverage.py class TestServerCoverage (line 29) | class TestServerCoverage: method test_validate_params_empty (line 32) | def test_validate_params_empty(self): method test_validate_params_non_string (line 37) | def test_validate_params_non_string(self): method test_validate_params_dangerous (line 46) | def test_validate_params_dangerous(self): method test_make_request_invalid_endpoint (line 56) | async def test_make_request_invalid_endpoint(self): method test_make_request_invalid_params (line 77) | async def test_make_request_invalid_params(self): method test_make_request_max_retries_exceeded (line 95) | async def test_make_request_max_retries_exceeded(self): method test_validate_query_dangerous (line 100) | def test_validate_query_dangerous(self): method test_execute_query_validation_failure (line 107) | async def test_execute_query_validation_failure(self, mock_context): method test_execute_range_query_validation_failure (line 135) | async def test_execute_range_query_validation_failure(self, mock_conte... method test_get_available_workspaces_use_default_region (line 168) | async def test_get_available_workspaces_use_default_region(self, mock_... method test_execute_query_with_time_parameter (line 187) | async def test_execute_query_with_time_parameter(self, mock_context): FILE: src/prometheus-mcp-server/tests/test_tools.py class TestTools (line 31) | class TestTools: method test_execute_query (line 35) | async def test_execute_query(self, mock_context): method test_execute_query_validation_failure (line 80) | async def test_execute_query_validation_failure(self, mock_context): method test_execute_query_with_error (line 113) | async def test_execute_query_with_error(self, mock_context): method test_execute_range_query (line 153) | async def test_execute_range_query(self, mock_context): method test_list_metrics (line 200) | async def test_list_metrics(self, mock_context): method test_get_server_info (line 238) | async def test_get_server_info(self, mock_context): method test_get_available_workspaces (line 273) | async def test_get_available_workspaces(self, mock_context): method test_get_available_workspaces_with_inactive (line 336) | async def test_get_available_workspaces_with_inactive(self, mock_conte... method test_get_available_workspaces_with_error (line 397) | async def test_get_available_workspaces_with_error(self, mock_context): method test_get_available_workspaces_with_configured_workspace_id (line 454) | async def test_get_available_workspaces_with_configured_workspace_id(s... method test_get_available_workspaces_with_configured_workspace_id_not_in_list (line 530) | async def test_get_available_workspaces_with_configured_workspace_id_n... method test_extract_workspace_id_from_url (line 598) | def test_extract_workspace_id_from_url(self): FILE: src/prometheus-mcp-server/tests/test_workspace_config.py class TestWorkspaceConfig (line 27) | class TestWorkspaceConfig: method test_get_prometheus_client (line 30) | def test_get_prometheus_client(self): method test_get_workspace_details_success (line 61) | async def test_get_workspace_details_success(self): method test_get_workspace_details_no_endpoint (line 94) | async def test_get_workspace_details_no_endpoint(self): method test_get_workspace_details_api_error (line 121) | async def test_get_workspace_details_api_error(self): method test_configure_workspace_for_request_with_env_url (line 139) | async def test_configure_workspace_for_request_with_env_url(self, mock... method test_configure_workspace_for_request_with_env_url_connection_failure (line 178) | async def test_configure_workspace_for_request_with_env_url_connection... method test_configure_workspace_for_request_no_env_url_no_workspace_id (line 209) | async def test_configure_workspace_for_request_no_env_url_no_workspace... method test_configure_workspace_for_request_with_workspace_id (line 224) | async def test_configure_workspace_for_request_with_workspace_id(self,... method test_configure_workspace_for_request_with_workspace_id_connection_failure (line 273) | async def test_configure_workspace_for_request_with_workspace_id_conne... method test_configure_workspace_for_request_unusual_workspace_id (line 314) | async def test_configure_workspace_for_request_unusual_workspace_id(se... method test_configure_workspace_for_request_with_url_containing_workspace_id (line 361) | async def test_configure_workspace_for_request_with_url_containing_wor... FILE: src/redshift-mcp-server/awslabs/redshift_mcp_server/consts.py function re_mlc (line 131) | def re_mlc(g: int) -> str: function re_sp (line 136) | def re_sp(g: int) -> str: FILE: src/redshift-mcp-server/awslabs/redshift_mcp_server/models.py class RedshiftCluster (line 22) | class RedshiftCluster(BaseModel): class RedshiftDatabase (line 43) | class RedshiftDatabase(BaseModel): class RedshiftSchema (line 64) | class RedshiftSchema(BaseModel): class RedshiftTable (line 87) | class RedshiftTable(BaseModel): class RedshiftColumn (line 106) | class RedshiftColumn(BaseModel): class QueryResult (line 132) | class QueryResult(BaseModel): FILE: src/redshift-mcp-server/awslabs/redshift_mcp_server/redshift.py class RedshiftClientManager (line 41) | class RedshiftClientManager: method __init__ (line 44) | def __init__( method redshift_client (line 55) | def redshift_client(self): method redshift_serverless_client (line 71) | def redshift_serverless_client(self): method redshift_data_client (line 89) | def redshift_data_client(self): class RedshiftSessionManager (line 106) | class RedshiftSessionManager: method __init__ (line 109) | def __init__(self, session_keepalive: int, app_name: str): method session (line 120) | async def session( method _create_session_with_app_name (line 155) | async def _create_session_with_app_name( method _is_session_expired (line 188) | def _is_session_expired(self, session_info: dict) -> bool: function _execute_protected_statement (line 200) | async def _execute_protected_statement( function _execute_statement (line 314) | async def _execute_statement( function discover_clusters (line 397) | async def discover_clusters() -> list[dict]: function discover_databases (line 483) | async def discover_databases(cluster_identifier: str, database_name: str... function discover_schemas (line 526) | async def discover_schemas(cluster_identifier: str, schema_database_name... function discover_tables (line 577) | async def discover_tables( function discover_columns (line 633) | async def discover_columns( function execute_query (line 700) | async def execute_query(cluster_identifier: str, database_name: str, sql... FILE: src/redshift-mcp-server/awslabs/redshift_mcp_server/server.py function list_clusters_tool (line 100) | async def list_clusters_tool(ctx: Context) -> list[RedshiftCluster]: function list_databases_tool (line 165) | async def list_databases_tool( function list_schemas_tool (line 244) | async def list_schemas_tool( function list_tables_tool (line 331) | async def list_tables_tool( function list_columns_tool (line 426) | async def list_columns_tool( function execute_query_tool (line 535) | async def execute_query_tool( function main (line 626) | def main(): FILE: src/redshift-mcp-server/tests/test_init.py class TestInit (line 21) | class TestInit: method test_version (line 24) | def test_version(self): method test_module_reload (line 41) | def test_module_reload(self): FILE: src/redshift-mcp-server/tests/test_main.py class TestMain (line 21) | class TestMain: method test_main_default (line 26) | def test_main_default(self, mock_run): method test_module_execution (line 35) | def test_module_execution(self): FILE: src/redshift-mcp-server/tests/test_redshift.py class TestRedshiftClientManagerRedshiftClient (line 34) | class TestRedshiftClientManagerRedshiftClient: method test_redshift_client_creation_default_credentials (line 37) | def test_redshift_client_creation_default_credentials(self, mocker): method test_redshift_client_creation_error (line 53) | def test_redshift_client_creation_error(self, mocker): method test_client_caching (line 64) | def test_client_caching(self, mocker): method test_redshift_client_creation_with_profile_and_region (line 82) | def test_redshift_client_creation_with_profile_and_region(self, mocker): class TestRedshiftClientManagerServerlessClient (line 102) | class TestRedshiftClientManagerServerlessClient: method test_redshift_serverless_client_creation_default_credentials (line 105) | def test_redshift_serverless_client_creation_default_credentials(self,... method test_redshift_serverless_client_creation_error (line 123) | def test_redshift_serverless_client_creation_error(self, mocker): method test_redshift_serverless_client_creation_with_profile_and_region (line 134) | def test_redshift_serverless_client_creation_with_profile_and_region(s... method test_redshift_serverless_client_caching (line 153) | def test_redshift_serverless_client_caching(self, mocker): class TestRedshiftClientManagerDataClient (line 172) | class TestRedshiftClientManagerDataClient: method test_redshift_data_client_creation_default_credentials (line 175) | def test_redshift_data_client_creation_default_credentials(self, mocker): method test_redshift_data_client_creation_error (line 193) | def test_redshift_data_client_creation_error(self, mocker): method test_redshift_data_client_creation_with_profile_and_region (line 204) | def test_redshift_data_client_creation_with_profile_and_region(self, m... method test_redshift_data_client_caching (line 223) | def test_redshift_data_client_caching(self, mocker): class TestExecuteProtectedStatement (line 242) | class TestExecuteProtectedStatement: method test_execute_protected_statement_read_only (line 246) | async def test_execute_protected_statement_read_only(self, mocker): method test_execute_protected_statement_read_write (line 289) | async def test_execute_protected_statement_read_write(self, mocker): method test_execute_protected_statement_transaction_breaker_error (line 326) | async def test_execute_protected_statement_transaction_breaker_error(s... method test_execute_protected_statement_cluster_not_found (line 364) | async def test_execute_protected_statement_cluster_not_found(self, moc... method test_execute_protected_statement_cluster_not_in_list (line 378) | async def test_execute_protected_statement_cluster_not_in_list(self, m... method test_execute_protected_statement_user_sql_fails_end_succeeds (line 395) | async def test_execute_protected_statement_user_sql_fails_end_succeeds... method test_execute_protected_statement_user_sql_succeeds_end_fails (line 438) | async def test_execute_protected_statement_user_sql_succeeds_end_fails... method test_execute_protected_statement_both_user_sql_and_end_fail (line 474) | async def test_execute_protected_statement_both_user_sql_and_end_fail(... class TestExecuteStatement (line 513) | class TestExecuteStatement: method test_execute_statement_failed_status (line 517) | async def test_execute_statement_failed_status(self, mocker): method test_execute_statement_timeout (line 536) | async def test_execute_statement_timeout(self, mocker): method test_execute_statement_unknown_cluster_type (line 567) | async def test_execute_statement_unknown_cluster_type(self, mocker): method test_execute_statement_with_parameters (line 588) | async def test_execute_statement_with_parameters(self, mocker): method test_execute_statement_with_session_id (line 618) | async def test_execute_statement_with_session_id(self, mocker): class TestRedshiftSessionManager (line 643) | class TestRedshiftSessionManager: method test_session_creation_provisioned (line 647) | async def test_session_creation_provisioned(self, mocker): method test_session_creation_serverless (line 674) | async def test_session_creation_serverless(self, mocker): method test_session_reuse (line 703) | async def test_session_reuse(self, mocker): method test_session_expiration_check (line 730) | def test_session_expiration_check(self): method test_expired_session_cleanup (line 746) | async def test_expired_session_cleanup(self, mocker): class TestDiscoverFunctions (line 784) | class TestDiscoverFunctions: method test_discover_clusters_provisioned (line 788) | async def test_discover_clusters_provisioned(self, mocker): method test_discover_clusters_provisioned_error (line 844) | async def test_discover_clusters_provisioned_error(self, mocker): method test_discover_clusters_serverless (line 867) | async def test_discover_clusters_serverless(self, mocker): method test_discover_clusters_serverless_error (line 922) | async def test_discover_clusters_serverless_error(self, mocker): method test_discover_databases (line 947) | async def test_discover_databases(self, mocker): method test_discover_databases_error (line 977) | async def test_discover_databases_error(self, mocker): method test_discover_schemas (line 988) | async def test_discover_schemas(self, mocker): method test_discover_schemas_error (line 1024) | async def test_discover_schemas_error(self, mocker): method test_discover_tables (line 1035) | async def test_discover_tables(self, mocker): method test_discover_tables_error (line 1075) | async def test_discover_tables_error(self, mocker): method test_discover_columns (line 1086) | async def test_discover_columns(self, mocker): method test_discover_columns_error (line 1135) | async def test_discover_columns_error(self, mocker): class TestExecuteQuery (line 1146) | class TestExecuteQuery: method test_execute_query_success (line 1150) | async def test_execute_query_success(self, mocker): method test_execute_query_error_handling (line 1199) | async def test_execute_query_error_handling(self, mocker): FILE: src/redshift-mcp-server/tests/test_server.py class TestListClustersTool (line 37) | class TestListClustersTool: method test_list_clusters_tool_success (line 41) | async def test_list_clusters_tool_success(self, mocker): method test_list_clusters_tool_empty (line 100) | async def test_list_clusters_tool_empty(self, mocker): method test_list_clusters_tool_error (line 114) | async def test_list_clusters_tool_error(self, mocker): class TestListDatabasesTool (line 132) | class TestListDatabasesTool: method test_list_databases_tool_success (line 136) | async def test_list_databases_tool_success(self, mocker): method test_list_databases_tool_empty (line 175) | async def test_list_databases_tool_empty(self, mocker): method test_list_databases_tool_error (line 189) | async def test_list_databases_tool_error(self, mocker): class TestListSchemasTool (line 209) | class TestListSchemasTool: method test_list_schemas_tool_success (line 213) | async def test_list_schemas_tool_success(self, mocker): method test_list_schemas_tool_empty (line 252) | async def test_list_schemas_tool_empty(self, mocker): method test_list_schemas_tool_error (line 264) | async def test_list_schemas_tool_error(self, mocker): class TestListTablesTool (line 284) | class TestListTablesTool: method test_list_tables_tool_success (line 288) | async def test_list_tables_tool_success(self, mocker): method test_list_tables_tool_empty (line 325) | async def test_list_tables_tool_empty(self, mocker): method test_list_tables_tool_error (line 337) | async def test_list_tables_tool_error(self, mocker): class TestListColumnsTool (line 357) | class TestListColumnsTool: method test_list_columns_tool_success (line 361) | async def test_list_columns_tool_success(self, mocker): method test_list_columns_tool_empty (line 412) | async def test_list_columns_tool_empty(self, mocker): method test_list_columns_tool_error (line 424) | async def test_list_columns_tool_error(self, mocker): class TestExecuteQueryTool (line 446) | class TestExecuteQueryTool: method test_execute_query_tool_success (line 450) | async def test_execute_query_tool_success(self, mocker): method test_execute_query_tool_empty_results (line 484) | async def test_execute_query_tool_empty_results(self, mocker): method test_execute_query_tool_error (line 513) | async def test_execute_query_tool_error(self, mocker): FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/database.py function _get_query_operations (line 76) | def _get_query_operations(query: str) -> set: function query_database_resource (line 88) | async def query_database_resource( function append_rows_to_table_resource (line 117) | async def append_rows_to_table_resource( FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/engines/pyiceberg.py function convert_temporal_fields (line 28) | def convert_temporal_fields(rows: list[dict], arrow_schema: pa.Schema) -... class PyIcebergConfig (line 129) | class PyIcebergConfig(BaseModel): class PyIcebergEngine (line 141) | class PyIcebergEngine: method __init__ (line 144) | def __init__(self, config: PyIcebergConfig): method _initialize_connection (line 155) | def _initialize_connection(self): method execute_query (line 171) | def execute_query(self, query: str) -> Dict[str, Any]: method test_connection (line 198) | def test_connection(self) -> bool: method append_rows (line 208) | def append_rows(self, table_name: str, rows: list[dict]) -> None: FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/file_processor/csv.py function import_csv_to_table (line 25) | async def import_csv_to_table( FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/file_processor/parquet.py function import_parquet_to_table (line 19) | async def import_parquet_to_table( FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/file_processor/utils.py function convert_column_names_to_snake_case (line 32) | def convert_column_names_to_snake_case(schema: pa.Schema) -> pa.Schema: function convert_temporal_fields_in_table (line 68) | def convert_temporal_fields_in_table( function import_file_to_table (line 106) | async def import_file_to_table( FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/models.py class OpenTableFormat (line 30) | class OpenTableFormat(str, Enum): class TableBucketType (line 36) | class TableBucketType(str, Enum): class TableType (line 43) | class TableType(str, Enum): class MaintenanceStatus (line 50) | class MaintenanceStatus(str, Enum): class JobStatus (line 57) | class JobStatus(str, Enum): class TableBucketMaintenanceType (line 66) | class TableBucketMaintenanceType(str, Enum): class TableMaintenanceType (line 72) | class TableMaintenanceType(str, Enum): class TableMaintenanceJobType (line 79) | class TableMaintenanceJobType(str, Enum): class TableBucketSummary (line 88) | class TableBucketSummary(BaseModel): class TableBucket (line 99) | class TableBucket(BaseModel): class NamespaceSummary (line 110) | class NamespaceSummary(BaseModel): class TableSummary (line 121) | class TableSummary(BaseModel): class Table (line 134) | class Table(BaseModel): class IcebergCompactionSettings (line 156) | class IcebergCompactionSettings(BaseModel): class IcebergSnapshotManagementSettings (line 162) | class IcebergSnapshotManagementSettings(BaseModel): class TableMaintenanceJobStatusValue (line 169) | class TableMaintenanceJobStatusValue(BaseModel): class TableMaintenanceConfigurationValue (line 177) | class TableMaintenanceConfigurationValue(BaseModel): class IcebergUnreferencedFileRemovalSettings (line 184) | class IcebergUnreferencedFileRemovalSettings(BaseModel): class TableBucketMaintenanceSettings (line 191) | class TableBucketMaintenanceSettings(BaseModel): method validate_only_one_setting (line 199) | def validate_only_one_setting(self) -> 'TableBucketMaintenanceSettings': class TableBucketMaintenanceConfigurationValue (line 207) | class TableBucketMaintenanceConfigurationValue(BaseModel): class TableBucketsResource (line 219) | class TableBucketsResource(BaseModel): class NamespacesResource (line 226) | class NamespacesResource(BaseModel): class TablesResource (line 233) | class TablesResource(BaseModel): class S3TablesError (line 241) | class S3TablesError(BaseModel): class SchemaField (line 251) | class SchemaField(BaseModel): class IcebergSchema (line 259) | class IcebergSchema(BaseModel): class IcebergMetadata (line 265) | class IcebergMetadata(BaseModel): class TableMetadata (line 271) | class TableMetadata(BaseModel): FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/namespaces.py function create_namespace (line 22) | async def create_namespace( function delete_namespace (line 35) | async def delete_namespace( function get_namespace (line 51) | async def get_namespace( FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/resources.py function create_error_response (line 35) | def create_error_response(error: Exception, resource_name: str) -> str: function paginate_and_collect (line 48) | async def paginate_and_collect( function create_resource_response (line 72) | async def create_resource_response( function list_table_buckets_resource (line 92) | async def list_table_buckets_resource(region_name: Optional[str] = None)... function get_table_buckets (line 126) | async def get_table_buckets(region_name: Optional[str] = None) -> List[T... function list_namespaces_resource (line 139) | async def list_namespaces_resource(region_name: Optional[str] = None) ->... function list_tables_resource (line 184) | async def list_tables_resource(region_name: Optional[str] = None) -> str: FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/s3_operations.py function get_bucket_metadata_table_configuration (line 22) | async def get_bucket_metadata_table_configuration( FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/server.py class S3TablesMCPServer (line 62) | class S3TablesMCPServer(FastMCP): method __init__ (line 65) | def __init__(self, *args, **kwargs): function write_operation (line 91) | def write_operation(func: Callable) -> Callable: function log_tool_call_with_response (line 113) | def log_tool_call_with_response(func): function log_tool_call (line 184) | def log_tool_call(tool_name, *args, **kwargs): function list_table_buckets (line 214) | async def list_table_buckets( function list_namespaces (line 227) | async def list_namespaces(region_name: Annotated[Optional[str], REGION_N... function list_tables (line 238) | async def list_tables(region_name: Annotated[Optional[str], REGION_NAME_... function create_table_bucket (line 250) | async def create_table_bucket( function create_namespace (line 274) | async def create_namespace( function create_table (line 295) | async def create_table( function get_table_maintenance_config (line 447) | async def get_table_maintenance_config( function get_maintenance_job_status (line 467) | async def get_maintenance_job_status( function get_table_metadata_location (line 487) | async def get_table_metadata_location( function rename_table (line 509) | async def rename_table( function update_table_metadata_location (line 548) | async def update_table_metadata_location( function _default_uri_for_region (line 590) | def _default_uri_for_region(region: str) -> str: function query_database (line 596) | async def query_database( function import_csv_to_table (line 644) | async def import_csv_to_table( function import_parquet_to_table (line 717) | async def import_parquet_to_table( function get_bucket_metadata_config (line 794) | async def get_bucket_metadata_config( function append_rows_to_table (line 856) | async def append_rows_to_table( function main (line 905) | def main(): FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/table_buckets.py function create_table_bucket (line 26) | async def create_table_bucket( function delete_table_bucket (line 41) | async def delete_table_bucket( function put_table_bucket_maintenance_configuration (line 55) | async def put_table_bucket_maintenance_configuration( function get_table_bucket (line 76) | async def get_table_bucket( function get_table_bucket_maintenance_configuration (line 92) | async def get_table_bucket_maintenance_configuration( function get_table_bucket_policy (line 108) | async def get_table_bucket_policy( function delete_table_bucket_policy (line 124) | async def delete_table_bucket_policy( FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/tables.py function create_table (line 28) | async def create_table( function delete_table (line 61) | async def delete_table( function get_table (line 91) | async def get_table( function delete_table_policy (line 107) | async def delete_table_policy( function get_table_maintenance_configuration (line 125) | async def get_table_maintenance_configuration( function get_table_maintenance_job_status (line 143) | async def get_table_maintenance_job_status( function get_table_metadata_location (line 161) | async def get_table_metadata_location( function get_table_policy (line 179) | async def get_table_policy( function put_table_maintenance_configuration (line 197) | async def put_table_maintenance_configuration( function rename_table (line 229) | async def rename_table( function update_table_metadata_location (line 279) | async def update_table_metadata_location( FILE: src/s3-tables-mcp-server/awslabs/s3_tables_mcp_server/utils.py function set_user_agent_mode (line 29) | def set_user_agent_mode(allow_write: bool): function _user_agent_extra (line 35) | def _user_agent_extra(): function handle_exceptions (line 39) | def handle_exceptions(func): function get_s3tables_client (line 52) | def get_s3tables_client(region_name: Optional[str] = None) -> BaseClient: function get_s3_client (line 68) | def get_s3_client(region_name: Optional[str] = None) -> BaseClient: function get_sts_client (line 84) | def get_sts_client(region_name: Optional[str] = None) -> BaseClient: function get_athena_client (line 100) | def get_athena_client(region_name: Optional[str] = None) -> BaseClient: function pyiceberg_load_catalog (line 116) | def pyiceberg_load_catalog( FILE: src/s3-tables-mcp-server/tests/test_csv.py function test_import_csv_to_table_success (line 23) | async def test_import_csv_to_table_success(): FILE: src/s3-tables-mcp-server/tests/test_database.py class TestQueryDatabaseResource (line 26) | class TestQueryDatabaseResource: method test_query_database_resource_success (line 30) | async def test_query_database_resource_success(self): method test_query_database_resource_rejects_write (line 67) | async def test_query_database_resource_rejects_write(self, write_query): class TestAppendRowsToTableResource (line 81) | class TestAppendRowsToTableResource: method test_append_rows_success (line 85) | async def test_append_rows_success(self): class TestGetQueryOperations (line 116) | class TestGetQueryOperations: method test_simple_select (line 119) | def test_simple_select(self): method test_simple_insert (line 125) | def test_simple_insert(self): method test_mixed_case (line 131) | def test_mixed_case(self): method test_multiple_statements (line 139) | def test_multiple_statements(self): method test_empty_query (line 147) | def test_empty_query(self): method test_whitespace_only (line 153) | def test_whitespace_only(self): method test_comment_only (line 159) | def test_comment_only(self): method test_complex_query (line 165) | def test_complex_query(self): method test_punctuation_and_numbers (line 172) | def test_punctuation_and_numbers(self): method test_mixed_tokens (line 178) | def test_mixed_tokens(self): class TestQueryDatabaseResourceEdgeCases (line 189) | class TestQueryDatabaseResourceEdgeCases: method test_empty_query (line 193) | async def test_empty_query(self): method test_whitespace_only_query (line 207) | async def test_whitespace_only_query(self): method test_comment_only_query (line 221) | async def test_comment_only_query(self): method test_engine_execute_query_raises (line 235) | async def test_engine_execute_query_raises(self): class TestAppendRowsToTableResourceEdgeCases (line 250) | class TestAppendRowsToTableResourceEdgeCases: method test_append_empty_rows (line 254) | async def test_append_empty_rows(self): method test_append_rows_engine_raises (line 270) | async def test_append_rows_engine_raises(self): FILE: src/s3-tables-mcp-server/tests/test_file_processor_utils.py class TestConvertColumnNamesToSnakeCase (line 26) | class TestConvertColumnNamesToSnakeCase: method test_basic_schema_conversion (line 29) | def test_basic_schema_conversion(self): method test_duplicate_detection (line 49) | def test_duplicate_detection(self): method test_complex_schema_conversion (line 68) | def test_complex_schema_conversion(self): method test_metadata_preservation (line 89) | def test_metadata_preservation(self): method test_nullable_preservation (line 110) | def test_nullable_preservation(self): method test_duplicate_detection_detailed_error_messages (line 124) | def test_duplicate_detection_detailed_error_messages(self): method test_empty_schema (line 177) | def test_empty_schema(self): method test_single_column_schema (line 184) | def test_single_column_schema(self): method test_all_data_types_preservation (line 190) | def test_all_data_types_preservation(self): method test_edge_case_column_names (line 231) | def test_edge_case_column_names(self): method test_edge_case_column_names_with_duplicates (line 249) | def test_edge_case_column_names_with_duplicates(self): function test_import_file_to_table_success (line 271) | async def test_import_file_to_table_success(): function test_import_file_to_table_column_conversion_error (line 372) | async def test_import_file_to_table_column_conversion_error(): function test_import_file_to_table_create_table_success (line 458) | async def test_import_file_to_table_create_table_success(): function test_import_file_to_table_create_table_failure (line 547) | async def test_import_file_to_table_create_table_failure(): function test_import_file_to_table_general_exception (line 630) | async def test_import_file_to_table_general_exception(): function test_convert_temporal_fields_in_table_date (line 671) | async def test_convert_temporal_fields_in_table_date(): function test_convert_temporal_fields_in_table_timestamp (line 694) | async def test_convert_temporal_fields_in_table_timestamp(): function test_convert_temporal_fields_in_table_non_string_passthrough (line 720) | async def test_convert_temporal_fields_in_table_non_string_passthrough(): function test_convert_temporal_fields_in_table_mixed_columns (line 746) | async def test_convert_temporal_fields_in_table_mixed_columns(): function test_import_file_to_table_with_temporal_conversion (line 781) | async def test_import_file_to_table_with_temporal_conversion(): function test_convert_temporal_fields_fallback_column_by_column (line 847) | async def test_convert_temporal_fields_fallback_column_by_column(): function test_convert_temporal_fields_fallback_with_individual_column_cast (line 908) | async def test_convert_temporal_fields_fallback_with_individual_column_c... FILE: src/s3-tables-mcp-server/tests/test_init.py class TestInit (line 21) | class TestInit: method test_version (line 24) | def test_version(self): method test_module_reload (line 41) | def test_module_reload(self): method test_required_modules_imported (line 55) | def test_required_modules_imported(self): method test_constants_defined (line 64) | def test_constants_defined(self): FILE: src/s3-tables-mcp-server/tests/test_main.py class TestMain (line 21) | class TestMain: method test_main_default (line 24) | def test_main_default(self): method test_main_with_write_permission (line 34) | def test_main_with_write_permission(self): method test_main_with_exception (line 44) | def test_main_with_exception(self): method test_module_execution (line 58) | def test_module_execution(self): FILE: src/s3-tables-mcp-server/tests/test_namespaces.py class TestCreateNamespace (line 26) | class TestCreateNamespace: method test_successful_namespace_creation (line 30) | async def test_successful_namespace_creation(self): method test_successful_namespace_creation_with_default_region (line 60) | async def test_successful_namespace_creation_with_default_region(self): method test_exception_handling (line 82) | async def test_exception_handling(self): method test_complex_namespace_name (line 103) | async def test_complex_namespace_name(self): class TestDeleteNamespace (line 127) | class TestDeleteNamespace: method test_successful_namespace_deletion (line 131) | async def test_successful_namespace_deletion(self): method test_successful_namespace_deletion_with_default_region (line 157) | async def test_successful_namespace_deletion_with_default_region(self): method test_exception_handling (line 179) | async def test_exception_handling(self): method test_empty_response_handling (line 200) | async def test_empty_response_handling(self): class TestGetNamespace (line 221) | class TestGetNamespace: method test_successful_namespace_retrieval (line 225) | async def test_successful_namespace_retrieval(self): method test_successful_namespace_retrieval_with_default_region (line 257) | async def test_successful_namespace_retrieval_with_default_region(self): method test_exception_handling (line 279) | async def test_exception_handling(self): method test_complex_namespace_response (line 300) | async def test_complex_namespace_response(self): method test_empty_response_handling (line 334) | async def test_empty_response_handling(self): FILE: src/s3-tables-mcp-server/tests/test_parquet.py function test_import_parquet_to_table_success (line 23) | async def test_import_parquet_to_table_success(): FILE: src/s3-tables-mcp-server/tests/test_pyiceberg.py function test_execute_query_success (line 7) | async def test_execute_query_success(): function test_initialize_connection_exception (line 81) | async def test_initialize_connection_exception(): function test_execute_query_no_active_session (line 121) | async def test_execute_query_no_active_session(): function test_execute_query_none_result (line 167) | async def test_execute_query_none_result(): function test_test_connection_success (line 213) | async def test_test_connection_success(): function test_test_connection_no_session (line 258) | async def test_test_connection_no_session(): function test_test_connection_exception (line 303) | async def test_test_connection_exception(): function test_append_rows_success (line 348) | async def test_append_rows_success(): function test_append_rows_no_active_catalog (line 413) | async def test_append_rows_no_active_catalog(): function test_append_rows_general_exception (line 463) | async def test_append_rows_general_exception(): function test_append_rows_with_namespace_in_table_name (line 529) | async def test_append_rows_with_namespace_in_table_name(): function test_convert_temporal_fields_date (line 594) | async def test_convert_temporal_fields_date(): function test_convert_temporal_fields_time (line 615) | async def test_convert_temporal_fields_time(): function test_convert_temporal_fields_timestamp_no_tz (line 636) | async def test_convert_temporal_fields_timestamp_no_tz(): function test_convert_temporal_fields_timestamp_with_tz (line 659) | async def test_convert_temporal_fields_timestamp_with_tz(): function test_convert_temporal_fields_nanosecond_truncation (line 683) | async def test_convert_temporal_fields_nanosecond_truncation(): function test_convert_temporal_fields_non_string_passthrough (line 703) | async def test_convert_temporal_fields_non_string_passthrough(): function test_convert_temporal_fields_mixed_types (line 735) | async def test_convert_temporal_fields_mixed_types(): function test_convert_temporal_fields_invalid_timestamp_tz (line 773) | async def test_convert_temporal_fields_invalid_timestamp_tz(): function test_convert_temporal_fields_all_formats (line 793) | async def test_convert_temporal_fields_all_formats(): function test_convert_temporal_fields_date_format (line 849) | async def test_convert_temporal_fields_date_format(): function test_convert_temporal_fields_time_format (line 863) | async def test_convert_temporal_fields_time_format(): function test_convert_temporal_fields_timestamp_format (line 877) | async def test_convert_temporal_fields_timestamp_format(): function test_convert_temporal_fields_timestamptz_format (line 891) | async def test_convert_temporal_fields_timestamptz_format(): function test_convert_temporal_fields_timestamp_ns_format (line 911) | async def test_convert_temporal_fields_timestamp_ns_format(): function test_convert_temporal_fields_timestamptz_ns_format (line 929) | async def test_convert_temporal_fields_timestamptz_ns_format(): function test_convert_temporal_fields_timestamptz_various_offsets (line 949) | async def test_convert_temporal_fields_timestamptz_various_offsets(): function test_convert_temporal_fields_timestamp_t_separator (line 992) | async def test_convert_temporal_fields_timestamp_t_separator(): function test_convert_temporal_fields_timestamptz_t_separator (line 1006) | async def test_convert_temporal_fields_timestamptz_t_separator(): FILE: src/s3-tables-mcp-server/tests/test_resources.py class TestCreateErrorResponse (line 36) | class TestCreateErrorResponse: method test_create_error_response (line 39) | def test_create_error_response(self): method test_create_error_response_with_complex_error (line 52) | def test_create_error_response_with_complex_error(self): method test_create_error_response_json_parsable (line 65) | def test_create_error_response_json_parsable(self): class TestPaginateAndCollect (line 81) | class TestPaginateAndCollect: method test_paginate_and_collect_single_page (line 85) | async def test_paginate_and_collect_single_page(self): method test_paginate_and_collect_multiple_pages (line 111) | async def test_paginate_and_collect_multiple_pages(self): method test_paginate_and_collect_empty_pages (line 136) | async def test_paginate_and_collect_empty_pages(self): method test_paginate_and_collect_missing_collection_key (line 154) | async def test_paginate_and_collect_missing_collection_key(self): class TestCreateResourceResponse (line 172) | class TestCreateResourceResponse: method test_create_resource_response_success (line 176) | async def test_create_resource_response_success(self): method test_create_resource_response_with_exception (line 203) | async def test_create_resource_response_with_exception(self): method test_create_resource_response_empty_items (line 220) | async def test_create_resource_response_empty_items(self): class TestListTableBucketsResource (line 236) | class TestListTableBucketsResource: method test_list_table_buckets_resource_success (line 240) | async def test_list_table_buckets_resource_success(self): method test_list_table_buckets_resource_exception (line 275) | async def test_list_table_buckets_resource_exception(self): method test_list_table_buckets_resource_empty (line 294) | async def test_list_table_buckets_resource_empty(self): method test_list_table_buckets_resource_with_region (line 314) | async def test_list_table_buckets_resource_with_region(self): method test_list_table_buckets_resource_invalid_region (line 341) | async def test_list_table_buckets_resource_invalid_region(self): class TestGetTableBuckets (line 354) | class TestGetTableBuckets: method test_get_table_buckets_success (line 358) | async def test_get_table_buckets_success(self): method test_get_table_buckets_with_error (line 376) | async def test_get_table_buckets_with_error(self): class TestListNamespacesResource (line 390) | class TestListNamespacesResource: method test_list_namespaces_resource_success (line 394) | async def test_list_namespaces_resource_success(self): method test_list_namespaces_resource_exception (line 441) | async def test_list_namespaces_resource_exception(self): method test_list_namespaces_resource_no_buckets (line 472) | async def test_list_namespaces_resource_no_buckets(self): method test_list_namespaces_resource_with_region (line 485) | async def test_list_namespaces_resource_with_region(self): method test_list_namespaces_resource_invalid_region (line 522) | async def test_list_namespaces_resource_invalid_region(self): class TestListTablesResource (line 545) | class TestListTablesResource: method test_list_tables_resource_success (line 549) | async def test_list_tables_resource_success(self): method test_list_tables_resource_exception (line 601) | async def test_list_tables_resource_exception(self): method test_list_tables_resource_no_buckets (line 632) | async def test_list_tables_resource_no_buckets(self): method test_list_tables_resource_with_region (line 645) | async def test_list_tables_resource_with_region(self): method test_list_tables_resource_invalid_region (line 686) | async def test_list_tables_resource_invalid_region(self): FILE: src/s3-tables-mcp-server/tests/test_s3_operations.py class TestGetBucketMetadataTableConfiguration (line 22) | class TestGetBucketMetadataTableConfiguration: method test_successful_configuration_retrieval (line 26) | async def test_successful_configuration_retrieval(self): method test_successful_configuration_retrieval_with_default_region (line 49) | async def test_successful_configuration_retrieval_with_default_region(... method test_empty_configuration_response (line 69) | async def test_empty_configuration_response(self): method test_complex_configuration_response (line 87) | async def test_complex_configuration_response(self): method test_exception_handling (line 114) | async def test_exception_handling(self): method test_client_initialization_with_region (line 135) | async def test_client_initialization_with_region(self): method test_bucket_parameter_passed_correctly (line 153) | async def test_bucket_parameter_passed_correctly(self): FILE: src/s3-tables-mcp-server/tests/test_server.py function setup_app (line 51) | def setup_app(): function setup_app_readonly (line 59) | def setup_app_readonly(): function mock_resources (line 67) | def mock_resources(): function mock_table_buckets (line 81) | def mock_table_buckets(): function mock_namespaces (line 89) | def mock_namespaces(): function mock_tables (line 97) | def mock_tables(): function patch_log_tool_call (line 110) | def patch_log_tool_call(): function mock_database (line 117) | def mock_database(): function mock_s3_operations (line 126) | def mock_s3_operations(): function test_list_table_buckets (line 137) | async def test_list_table_buckets(mock_resources): function test_list_namespaces (line 148) | async def test_list_namespaces(mock_resources): function test_list_tables (line 159) | async def test_list_tables(mock_resources): function test_create_table_bucket (line 171) | async def test_create_table_bucket(mock_table_buckets): function test_create_namespace (line 187) | async def test_create_namespace(mock_namespaces): function test_create_table (line 208) | async def test_create_table(mock_tables): function test_get_table_maintenance_config (line 251) | async def test_get_table_maintenance_config(mock_tables): function test_get_maintenance_job_status (line 273) | async def test_get_maintenance_job_status(mock_tables): function test_get_table_metadata_location (line 295) | async def test_get_table_metadata_location(mock_tables): function test_rename_table (line 317) | async def test_rename_table(mock_tables): function test_update_table_metadata_location (line 354) | async def test_update_table_metadata_location(mock_tables): function test_create_table_bucket_readonly_mode (line 389) | async def test_create_table_bucket_readonly_mode(setup_app_readonly, moc... function test_create_namespace_readonly_mode (line 403) | async def test_create_namespace_readonly_mode(setup_app_readonly, mock_n... function test_create_table_readonly_mode (line 420) | async def test_create_table_readonly_mode(setup_app_readonly, mock_tables): function test_get_table_maintenance_config_readonly_mode (line 454) | async def test_get_table_maintenance_config_readonly_mode(setup_app_read... function test_get_maintenance_job_status_readonly_mode (line 476) | async def test_get_maintenance_job_status_readonly_mode(setup_app_readon... function test_get_table_metadata_location_readonly_mode (line 498) | async def test_get_table_metadata_location_readonly_mode(setup_app_reado... function test_import_csv_to_table_readonly_mode (line 520) | async def test_import_csv_to_table_readonly_mode(setup_app_readonly): function test_query_database (line 546) | async def test_query_database(mock_database): function test_get_bucket_metadata_config (line 582) | async def test_get_bucket_metadata_config(mock_s3_operations): function test_append_rows_to_table (line 596) | async def test_append_rows_to_table(mock_database): function test_append_rows_to_table_readonly_mode (line 635) | async def test_append_rows_to_table_readonly_mode(setup_app_readonly, mo... function test_query_database_default_uri (line 664) | async def test_query_database_default_uri(mock_database): function test_import_csv_to_table_default_uri (line 685) | async def test_import_csv_to_table_default_uri(monkeypatch, setup_app): function test_import_csv_to_table (line 717) | async def test_import_csv_to_table(monkeypatch, setup_app): function test_import_parquet_to_table (line 765) | async def test_import_parquet_to_table(monkeypatch, setup_app): function test_import_parquet_to_table_readonly_mode (line 813) | async def test_import_parquet_to_table_readonly_mode(setup_app_readonly): function test_import_parquet_to_table_default_uri (line 838) | async def test_import_parquet_to_table_default_uri(monkeypatch, setup_app): function test_append_rows_to_table_default_uri (line 870) | async def test_append_rows_to_table_default_uri(mock_database): function test_main_sets_log_dir (line 892) | def test_main_sets_log_dir(monkeypatch): function test_main_entry (line 903) | def test_main_entry(monkeypatch): function test_create_table_bucket_invalid_region (line 915) | async def test_create_table_bucket_invalid_region(mock_table_buckets): function test_create_table_bucket_default_region (line 925) | async def test_create_table_bucket_default_region(mock_table_buckets): function test_create_namespace_invalid_region (line 935) | async def test_create_namespace_invalid_region(mock_namespaces): function test_create_namespace_default_region (line 948) | async def test_create_namespace_default_region(mock_namespaces): function test_create_table_invalid_region (line 963) | async def test_create_table_invalid_region(mock_tables): function test_create_table_default_region (line 993) | async def test_create_table_default_region(mock_tables): FILE: src/s3-tables-mcp-server/tests/test_table_buckets.py class TestCreateTableBucket (line 35) | class TestCreateTableBucket: method test_successful_table_bucket_creation (line 39) | async def test_successful_table_bucket_creation(self): method test_successful_table_bucket_creation_with_default_region (line 68) | async def test_successful_table_bucket_creation_with_default_region(se... method test_exception_handling (line 94) | async def test_exception_handling(self): method test_complex_bucket_name (line 114) | async def test_complex_bucket_name(self): class TestDeleteTableBucket (line 135) | class TestDeleteTableBucket: method test_successful_table_bucket_deletion (line 139) | async def test_successful_table_bucket_deletion(self): method test_successful_table_bucket_deletion_with_default_region (line 164) | async def test_successful_table_bucket_deletion_with_default_region(se... method test_exception_handling (line 185) | async def test_exception_handling(self): class TestPutTableBucketMaintenanceConfiguration (line 205) | class TestPutTableBucketMaintenanceConfiguration: method test_successful_maintenance_configuration_put (line 209) | async def test_successful_maintenance_configuration_put(self): method test_exception_handling (line 242) | async def test_exception_handling(self): class TestGetTableBucket (line 273) | class TestGetTableBucket: method test_successful_table_bucket_retrieval (line 277) | async def test_successful_table_bucket_retrieval(self): method test_exception_handling (line 307) | async def test_exception_handling(self): class TestGetTableBucketMaintenanceConfiguration (line 327) | class TestGetTableBucketMaintenanceConfiguration: method test_successful_maintenance_configuration_retrieval (line 331) | async def test_successful_maintenance_configuration_retrieval(self): method test_exception_handling (line 361) | async def test_exception_handling(self): class TestGetTableBucketPolicy (line 386) | class TestGetTableBucketPolicy: method test_successful_policy_retrieval (line 390) | async def test_successful_policy_retrieval(self): method test_exception_handling (line 427) | async def test_exception_handling(self): class TestDeleteTableBucketPolicy (line 447) | class TestDeleteTableBucketPolicy: method test_successful_policy_deletion (line 451) | async def test_successful_policy_deletion(self): method test_successful_policy_deletion_with_default_region (line 476) | async def test_successful_policy_deletion_with_default_region(self): method test_exception_handling (line 497) | async def test_exception_handling(self): method test_empty_response_handling (line 517) | async def test_empty_response_handling(self): FILE: src/s3-tables-mcp-server/tests/test_tables.py class TestCreateTable (line 44) | class TestCreateTable: method test_successful_table_creation (line 48) | async def test_successful_table_creation(self): method test_successful_table_creation_with_metadata (line 85) | async def test_successful_table_creation_with_metadata(self): method test_exception_handling (line 122) | async def test_exception_handling(self): class TestDeleteTable (line 143) | class TestDeleteTable: method test_successful_table_deletion (line 147) | async def test_successful_table_deletion(self): method test_successful_table_deletion_with_version_token (line 172) | async def test_successful_table_deletion_with_version_token(self): method test_exception_handling (line 195) | async def test_exception_handling(self): class TestGetTable (line 215) | class TestGetTable: method test_successful_table_retrieval (line 219) | async def test_successful_table_retrieval(self): method test_exception_handling (line 251) | async def test_exception_handling(self): class TestDeleteTablePolicy (line 271) | class TestDeleteTablePolicy: method test_successful_policy_deletion (line 275) | async def test_successful_policy_deletion(self): method test_exception_handling (line 300) | async def test_exception_handling(self): class TestGetTableMaintenanceConfiguration (line 320) | class TestGetTableMaintenanceConfiguration: method test_successful_maintenance_configuration_retrieval (line 324) | async def test_successful_maintenance_configuration_retrieval(self): method test_exception_handling (line 356) | async def test_exception_handling(self): class TestGetTableMaintenanceJobStatus (line 379) | class TestGetTableMaintenanceJobStatus: method test_successful_job_status_retrieval (line 383) | async def test_successful_job_status_retrieval(self): method test_exception_handling (line 412) | async def test_exception_handling(self): class TestGetTableMetadataLocation (line 432) | class TestGetTableMetadataLocation: method test_successful_metadata_location_retrieval (line 436) | async def test_successful_metadata_location_retrieval(self): method test_exception_handling (line 461) | async def test_exception_handling(self): class TestGetTablePolicy (line 481) | class TestGetTablePolicy: method test_successful_policy_retrieval (line 485) | async def test_successful_policy_retrieval(self): method test_exception_handling (line 522) | async def test_exception_handling(self): class TestPutTableMaintenanceConfiguration (line 542) | class TestPutTableMaintenanceConfiguration: method test_successful_maintenance_configuration_put (line 546) | async def test_successful_maintenance_configuration_put(self): method test_exception_handling (line 579) | async def test_exception_handling(self): class TestRenameTable (line 606) | class TestRenameTable: method test_successful_table_rename (line 610) | async def test_successful_table_rename(self): method test_successful_table_rename_with_new_namespace (line 638) | async def test_successful_table_rename_with_new_namespace(self): method test_exception_handling (line 666) | async def test_exception_handling(self): class TestUpdateTableMetadataLocation (line 687) | class TestUpdateTableMetadataLocation: method test_successful_metadata_location_update (line 691) | async def test_successful_metadata_location_update(self): method test_exception_handling (line 724) | async def test_exception_handling(self): FILE: src/s3-tables-mcp-server/tests/test_utils.py function test_handle_exceptions_success (line 7) | async def test_handle_exceptions_success(): function test_handle_exceptions_exception (line 19) | async def test_handle_exceptions_exception(): function test_get_s3tables_client (line 31) | def test_get_s3tables_client(): function test_get_s3_client (line 48) | def test_get_s3_client(): function test_get_sts_client_env (line 64) | def test_get_sts_client_env(monkeypatch): function test_get_athena_client_default (line 81) | def test_get_athena_client_default(): function test_pyiceberg_load_catalog (line 97) | def test_pyiceberg_load_catalog(monkeypatch): FILE: src/sagemaker-ai-mcp-server/awslabs/sagemaker_ai_mcp_server/aws_helper.py class AwsHelper (line 28) | class AwsHelper: method get_aws_region (line 51) | def get_aws_region() -> Optional[SUPPORTED_REGIONS]: method get_aws_profile (line 57) | def get_aws_profile() -> Optional[str]: method create_boto3_client (line 63) | def create_boto3_client( FILE: src/sagemaker-ai-mcp-server/awslabs/sagemaker_ai_mcp_server/logging_helper.py class LogLevel (line 23) | class LogLevel(Enum): function log_with_request_id (line 33) | def log_with_request_id(ctx: Context, level: LogLevel, message: str, **k... FILE: src/sagemaker-ai-mcp-server/awslabs/sagemaker_ai_mcp_server/sagemaker_hyperpod/hyperpod_cluster_node_handler.py class HyperPodClusterNodeHandler (line 54) | class HyperPodClusterNodeHandler: method __init__ (line 60) | def __init__( method get_sagemaker_client (line 84) | def get_sagemaker_client( method manage_hyperpod_cluster_nodes (line 109) | async def manage_hyperpod_cluster_nodes( method _list_hp_clusters (line 409) | async def _list_hp_clusters( method describe_hp_cluster (line 581) | async def describe_hp_cluster( method update_hp_cluster (line 618) | async def update_hp_cluster( method _describe_hp_cluster_node (line 737) | async def _describe_hp_cluster_node( method _list_hp_cluster_nodes (line 932) | async def _list_hp_cluster_nodes( method _update_hp_cluster_software (line 1115) | async def _update_hp_cluster_software( method _batch_delete_hp_cluster_nodes (line 1293) | async def _batch_delete_hp_cluster_nodes( FILE: src/sagemaker-ai-mcp-server/awslabs/sagemaker_ai_mcp_server/sagemaker_hyperpod/hyperpod_stack_handler.py class CloudFormationLoader (line 51) | class CloudFormationLoader(SafeLoader): function construct_cfn_tag (line 58) | def construct_cfn_tag(loader, tag_suffix, node): class HyperPodStackHandler (line 96) | class HyperPodStackHandler: method __init__ (line 103) | def __init__(self, mcp, allow_write: bool = False): method _ensure_stack_ownership (line 117) | def _ensure_stack_ownership( method manage_hyperpod_stacks (line 172) | async def manage_hyperpod_stacks( method _deploy_stack (line 417) | async def _deploy_stack( method _describe_stack (line 537) | async def _describe_stack( method _delete_stack (line 630) | async def _delete_stack( FILE: src/sagemaker-ai-mcp-server/awslabs/sagemaker_ai_mcp_server/sagemaker_hyperpod/models.py class CallToolResult (line 22) | class CallToolResult(BaseModel): class ClusterSummary (line 29) | class ClusterSummary(BaseModel): class ClusterInstanceStatusDetails (line 39) | class ClusterInstanceStatusDetails(BaseModel): class ClusterNodeSummary (line 46) | class ClusterNodeSummary(BaseModel): class ListClustersResponse (line 57) | class ListClustersResponse(CallToolResult): class ListClusterNodesResponse (line 64) | class ListClusterNodesResponse(CallToolResult): class ClusterEbsVolumeConfig (line 71) | class ClusterEbsVolumeConfig(BaseModel): class ClusterInstanceStorageConfig (line 77) | class ClusterInstanceStorageConfig(BaseModel): class ClusterLifeCycleConfig (line 83) | class ClusterLifeCycleConfig(BaseModel): class VpcConfig (line 90) | class VpcConfig(BaseModel): class ClusterInstancePlacement (line 100) | class ClusterInstancePlacement(BaseModel): class AlarmDetails (line 110) | class AlarmDetails(BaseModel): class CapacitySizeConfig (line 119) | class CapacitySizeConfig(BaseModel): class RollingDeploymentPolicy (line 129) | class RollingDeploymentPolicy(BaseModel): class DeploymentConfiguration (line 139) | class DeploymentConfiguration(BaseModel): class ScheduledUpdateConfig (line 150) | class ScheduledUpdateConfig(BaseModel): class UpdateClusterSoftwareInstanceGroupSpecification (line 165) | class UpdateClusterSoftwareInstanceGroupSpecification(BaseModel): class ClusterNodeDetails (line 174) | class ClusterNodeDetails(BaseModel): class DescribeClusterNodeResponse (line 193) | class DescribeClusterNodeResponse(CallToolResult): class UpdateClusterSoftwareResponse (line 201) | class UpdateClusterSoftwareResponse(CallToolResult): class BatchDeleteClusterNodesError (line 207) | class BatchDeleteClusterNodesError(BaseModel): class BatchDeleteClusterNodesResponse (line 215) | class BatchDeleteClusterNodesResponse(CallToolResult): class DeployStackResponse (line 228) | class DeployStackResponse(CallToolResult): class DescribeStackResponse (line 235) | class DescribeStackResponse(CallToolResult): class DeleteStackResponse (line 245) | class DeleteStackResponse(CallToolResult): FILE: src/sagemaker-ai-mcp-server/awslabs/sagemaker_ai_mcp_server/server.py function create_server (line 142) | def create_server(): function main (line 151) | def main(): FILE: src/sagemaker-ai-mcp-server/tests/conftest.py function tests_setup_and_teardown (line 10) | def tests_setup_and_teardown(): FILE: src/sagemaker-ai-mcp-server/tests/test_aws_helper.py class TestAwsHelper (line 23) | class TestAwsHelper: method setup_method (line 26) | def setup_method(self): method test_get_aws_region_from_env (line 33) | def test_get_aws_region_from_env(self): method test_get_aws_region_default (line 39) | def test_get_aws_region_default(self): method test_get_aws_profile_from_env (line 45) | def test_get_aws_profile_from_env(self): method test_get_aws_profile_none (line 51) | def test_get_aws_profile_none(self): method test_create_boto3_client_no_profile_with_region (line 57) | def test_create_boto3_client_no_profile_with_region(self, mock_boto3_c... method test_create_boto3_client_no_profile_no_region (line 73) | def test_create_boto3_client_no_profile_no_region(self, mock_boto3_cli... method test_create_boto3_client_with_profile_with_region (line 87) | def test_create_boto3_client_with_profile_with_region(self, mock_boto3... method test_create_boto3_client_with_profile_no_region (line 110) | def test_create_boto3_client_with_profile_no_region(self, mock_boto3_s... method test_create_boto3_client_with_region_override (line 131) | def test_create_boto3_client_with_region_override(self, mock_boto3_cli... method test_create_boto3_client_user_agent (line 143) | def test_create_boto3_client_user_agent(self): method test_client_caching (line 162) | def test_client_caching(self, mock_boto3_client): method test_client_caching_multiple_regions (line 182) | def test_client_caching_multiple_regions(self, mock_boto3_client): method test_different_services_not_cached_together (line 207) | def test_different_services_not_cached_together(self, mock_boto3_client): method test_error_handling (line 228) | def test_error_handling(self, mock_boto3_client): FILE: src/sagemaker-ai-mcp-server/tests/test_hyperpod_cluster_node_handler.py class TestHyperPodClusterNodeHandler (line 39) | class TestHyperPodClusterNodeHandler: method test_init_default (line 42) | def test_init_default(self): method test_init_write_access_enabled (line 60) | def test_init_write_access_enabled(self): method test_init_sensitive_data_access_enabled (line 73) | def test_init_sensitive_data_access_enabled(self): method test_get_sagemaker_client (line 86) | def test_get_sagemaker_client(self): method test_get_sagemaker_client_with_region (line 113) | def test_get_sagemaker_client_with_region(self): method test_get_sagemaker_client_with_profile (line 140) | def test_get_sagemaker_client_with_profile(self): method test_list_hp_clusters_success (line 171) | async def test_list_hp_clusters_success(self): method test_list_hp_clusters_error (line 254) | async def test_list_hp_clusters_error(self): method test_describe_hp_cluster_node_success (line 298) | async def test_describe_hp_cluster_node_success(self): method test_describe_hp_cluster_node_error (line 415) | async def test_describe_hp_cluster_node_error(self): method test_list_hp_cluster_nodes_success (line 464) | async def test_list_hp_cluster_nodes_success(self): method test_list_hp_cluster_nodes_error (line 548) | async def test_list_hp_cluster_nodes_error(self): method test_update_hp_cluster_software_success (line 597) | async def test_update_hp_cluster_software_success(self): method test_update_hp_cluster_software_with_deployment_config (line 651) | async def test_update_hp_cluster_software_with_deployment_config(self): method test_update_hp_cluster_software_error (line 764) | async def test_update_hp_cluster_software_error(self): method test_batch_delete_hp_cluster_nodes_success (line 811) | async def test_batch_delete_hp_cluster_nodes_success(self): method test_batch_delete_hp_cluster_nodes_with_failures (line 866) | async def test_batch_delete_hp_cluster_nodes_with_failures(self): method test_batch_delete_hp_cluster_nodes_error (line 931) | async def test_batch_delete_hp_cluster_nodes_error(self): method test_manage_hyperpod_cluster_nodes_list_clusters (line 982) | async def test_manage_hyperpod_cluster_nodes_list_clusters(self): method test_manage_hyperpod_cluster_nodes_list_nodes (line 1053) | async def test_manage_hyperpod_cluster_nodes_list_nodes(self): method test_manage_hyperpod_cluster_nodes_describe_node (line 1130) | async def test_manage_hyperpod_cluster_nodes_describe_node(self): method test_manage_hyperpod_cluster_nodes_update_software (line 1201) | async def test_manage_hyperpod_cluster_nodes_update_software(self): method test_manage_hyperpod_cluster_nodes_batch_delete (line 1282) | async def test_manage_hyperpod_cluster_nodes_batch_delete(self): method test_manage_hyperpod_cluster_nodes_invalid_operation (line 1337) | async def test_manage_hyperpod_cluster_nodes_invalid_operation(self): method test_manage_hyperpod_cluster_nodes_missing_parameters (line 1357) | async def test_manage_hyperpod_cluster_nodes_missing_parameters(self): method test_manage_hyperpod_cluster_nodes_write_access_disabled (line 1397) | async def test_manage_hyperpod_cluster_nodes_write_access_disabled(self): method test_update_hp_cluster_write_access_disabled (line 1441) | async def test_update_hp_cluster_write_access_disabled(self): method test_update_hp_cluster_success (line 1466) | async def test_update_hp_cluster_success(self): method test_update_hp_cluster_api_error (line 1513) | async def test_update_hp_cluster_api_error(self): method test_update_hp_cluster_client_error (line 1557) | async def test_update_hp_cluster_client_error(self): FILE: src/sagemaker-ai-mcp-server/tests/test_hyperpod_stack_handler.py class TestHyperPodStackHandler (line 42) | class TestHyperPodStackHandler: method test_init_default (line 48) | def test_init_default(self): method test_init_write_access_enabled (line 65) | def test_init_write_access_enabled(self): method test_deploy_stack_success (line 83) | async def test_deploy_stack_success(self): method test_ensure_stack_ownership_owned_stack (line 148) | def test_ensure_stack_ownership_owned_stack(self): method test_ensure_stack_ownership_not_owned_stack (line 195) | def test_ensure_stack_ownership_not_owned_stack(self): method test_ensure_stack_ownership_stack_not_found (line 241) | def test_ensure_stack_ownership_stack_not_found(self): method test_deploy_stack_update_existing (line 281) | async def test_deploy_stack_update_existing(self): method test_describe_stack_success (line 347) | async def test_describe_stack_success(self): method test_delete_stack_success (line 419) | async def test_delete_stack_success(self): method test_delete_stack_not_owned (line 463) | async def test_delete_stack_not_owned(self): method test_manage_hyperpod_stacks_deploy (line 507) | async def test_manage_hyperpod_stacks_deploy(self): method test_manage_hyperpod_stacks_describe (line 566) | async def test_manage_hyperpod_stacks_describe(self): method test_manage_hyperpod_stacks_delete (line 623) | async def test_manage_hyperpod_stacks_delete(self): method test_manage_hyperpod_stacks_invalid_operation (line 675) | async def test_manage_hyperpod_stacks_invalid_operation(self): method test_manage_hyperpod_stacks_write_access_disabled (line 694) | async def test_manage_hyperpod_stacks_write_access_disabled(self): method test_manage_hyperpod_stacks_missing_parameters (line 762) | async def test_manage_hyperpod_stacks_missing_parameters(self): method test_deploy_stack_error_handling (line 784) | async def test_deploy_stack_error_handling(self): method test_describe_stack_error_handling (line 805) | async def test_describe_stack_error_handling(self): method test_delete_stack_error_handling (line 824) | async def test_delete_stack_error_handling(self): method test_ensure_stack_ownership_general_exception (line 845) | def test_ensure_stack_ownership_general_exception(self): method test_manage_hyperpod_stacks_general_exception (line 866) | async def test_manage_hyperpod_stacks_general_exception(self): method test_describe_stack_with_stack_details (line 885) | async def test_describe_stack_with_stack_details(self): method test_describe_stack_missing_creation_time (line 913) | async def test_describe_stack_missing_creation_time(self): method test_construct_cfn_tag_mapping_node (line 936) | def test_construct_cfn_tag_mapping_node(self): method test_construct_cfn_tag_sequence_node (line 950) | def test_construct_cfn_tag_sequence_node(self): method test_construct_cfn_tag_unknown_node (line 964) | def test_construct_cfn_tag_unknown_node(self): method test_deploy_stack_update_exception (line 977) | async def test_deploy_stack_update_exception(self): method test_deploy_stack_create_exception (line 1009) | async def test_deploy_stack_create_exception(self): method test_describe_stack_exception (line 1035) | async def test_describe_stack_exception(self): method test_delete_stack_exception (line 1051) | async def test_delete_stack_exception(self): method test_construct_cfn_tag_scalar_node (line 1079) | def test_construct_cfn_tag_scalar_node(self): method test_describe_stack_no_outputs (line 1094) | async def test_describe_stack_no_outputs(self): method test_describe_stack_outputs_missing_keys (line 1119) | async def test_describe_stack_outputs_missing_keys(self): method test_describe_stack_missing_stack_details (line 1149) | async def test_describe_stack_missing_stack_details(self): method test_deploy_stack_ownership_check_exception (line 1168) | async def test_deploy_stack_ownership_check_exception(self): method test_describe_stack_creation_time_exception (line 1194) | async def test_describe_stack_creation_time_exception(self): method test_deploy_stack_ownership_failure_with_stack (line 1223) | async def test_deploy_stack_ownership_failure_with_stack(self): method test_delete_stack_general_exception (line 1248) | async def test_delete_stack_general_exception(self): FILE: src/sagemaker-ai-mcp-server/tests/test_init.py class TestInit (line 21) | class TestInit: method test_version (line 24) | def test_version(self): method test_module_reload (line 42) | def test_module_reload(self): FILE: src/sagemaker-ai-mcp-server/tests/test_logging_helper.py class TestLogLevel (line 23) | class TestLogLevel: method test_log_level_values (line 26) | def test_log_level_values(self): class TestLogWithRequestId (line 35) | class TestLogWithRequestId: method mock_ctx (line 39) | def mock_ctx(self): method test_log_debug (line 46) | def test_log_debug(self, mock_logger, mock_ctx): method test_log_info (line 53) | def test_log_info(self, mock_logger, mock_ctx): method test_log_warning (line 60) | def test_log_warning(self, mock_logger, mock_ctx): method test_log_error (line 69) | def test_log_error(self, mock_logger, mock_ctx): method test_log_critical (line 76) | def test_log_critical(self, mock_logger, mock_ctx): method test_log_with_additional_kwargs (line 85) | def test_log_with_additional_kwargs(self, mock_logger, mock_ctx): FILE: src/sagemaker-ai-mcp-server/tests/test_main.py class TestMain (line 28) | class TestMain: method test_main_default (line 36) | def test_main_default( method test_main_with_write_access (line 74) | def test_main_with_write_access( method test_main_with_sensitive_data_access (line 119) | def test_main_with_sensitive_data_access( method test_main_with_all_access (line 171) | def test_main_with_all_access( method test_create_server (line 209) | def test_create_server(self): method test_module_execution (line 222) | def test_module_execution(self): FILE: src/sagemaker-ai-mcp-server/tests/test_models.py class TestClusterSummary (line 44) | class TestClusterSummary: method test_create_cluster_summary (line 47) | def test_create_cluster_summary(self): method test_create_cluster_summary_without_optional_fields (line 70) | def test_create_cluster_summary_without_optional_fields(self): class TestClusterInstanceStatusDetails (line 89) | class TestClusterInstanceStatusDetails: method test_create_cluster_instance_status_details (line 92) | def test_create_cluster_instance_status_details(self): method test_create_cluster_instance_status_details_without_optional_fields (line 102) | def test_create_cluster_instance_status_details_without_optional_field... class TestClusterNodeSummary (line 112) | class TestClusterNodeSummary: method test_create_cluster_node_summary (line 115) | def test_create_cluster_node_summary(self): method test_create_cluster_node_summary_without_optional_fields (line 138) | def test_create_cluster_node_summary_without_optional_fields(self): class TestListClustersResponse (line 160) | class TestListClustersResponse: method test_create_list_clusters_response (line 163) | def test_create_list_clusters_response(self): method test_create_list_clusters_response_without_optional_fields (line 187) | def test_create_list_clusters_response_without_optional_fields(self): class TestListClusterNodesResponse (line 212) | class TestListClusterNodesResponse: method test_create_list_cluster_nodes_response (line 215) | def test_create_list_cluster_nodes_response(self): method test_create_list_cluster_nodes_response_without_optional_fields (line 244) | def test_create_list_cluster_nodes_response_without_optional_fields(se... class TestClusterEbsVolumeConfig (line 274) | class TestClusterEbsVolumeConfig: method test_create_cluster_ebs_volume_config (line 277) | def test_create_cluster_ebs_volume_config(self): method test_create_cluster_ebs_volume_config_without_optional_fields (line 285) | def test_create_cluster_ebs_volume_config_without_optional_fields(self): class TestClusterInstanceStorageConfig (line 292) | class TestClusterInstanceStorageConfig: method test_create_cluster_instance_storage_config (line 295) | def test_create_cluster_instance_storage_config(self): method test_create_cluster_instance_storage_config_without_optional_fields (line 307) | def test_create_cluster_instance_storage_config_without_optional_field... class TestClusterLifeCycleConfig (line 314) | class TestClusterLifeCycleConfig: method test_create_cluster_life_cycle_config (line 317) | def test_create_cluster_life_cycle_config(self): class TestVpcConfig (line 328) | class TestVpcConfig: method test_create_vpc_config (line 331) | def test_create_vpc_config(self): method test_create_vpc_config_without_optional_fields (line 341) | def test_create_vpc_config_without_optional_fields(self): class TestClusterInstancePlacement (line 349) | class TestClusterInstancePlacement: method test_create_cluster_instance_placement (line 352) | def test_create_cluster_instance_placement(self): method test_create_cluster_instance_placement_without_optional_fields (line 362) | def test_create_cluster_instance_placement_without_optional_fields(self): class TestAlarmDetails (line 370) | class TestAlarmDetails: method test_create_alarm_details (line 373) | def test_create_alarm_details(self): class TestCapacitySizeConfig (line 382) | class TestCapacitySizeConfig: method test_create_capacity_size_config (line 385) | def test_create_capacity_size_config(self): class TestRollingDeploymentPolicy (line 396) | class TestRollingDeploymentPolicy: method test_create_rolling_deployment_policy (line 399) | def test_create_rolling_deployment_policy(self): method test_create_rolling_deployment_policy_without_optional_fields (line 419) | def test_create_rolling_deployment_policy_without_optional_fields(self): class TestDeploymentConfiguration (line 434) | class TestDeploymentConfiguration: method test_create_deployment_configuration (line 437) | def test_create_deployment_configuration(self): method test_create_deployment_configuration_without_optional_fields (line 462) | def test_create_deployment_configuration_without_optional_fields(self): class TestUpdateClusterSoftwareInstanceGroupSpecification (line 471) | class TestUpdateClusterSoftwareInstanceGroupSpecification: method test_create_update_cluster_software_instance_group_specification (line 474) | def test_create_update_cluster_software_instance_group_specification(s... class TestClusterNodeDetails (line 483) | class TestClusterNodeDetails: method test_create_cluster_node_details (line 486) | def test_create_cluster_node_details(self): method test_create_cluster_node_details_without_optional_fields (line 548) | def test_create_cluster_node_details_without_optional_fields(self): class TestDescribeClusterNodeResponse (line 577) | class TestDescribeClusterNodeResponse: method test_create_describe_cluster_node_response (line 580) | def test_create_describe_cluster_node_response(self): method test_create_describe_cluster_node_response_without_optional_fields (line 605) | def test_create_describe_cluster_node_response_without_optional_fields... class TestUpdateClusterSoftwareResponse (line 620) | class TestUpdateClusterSoftwareResponse: method test_create_update_cluster_software_response (line 623) | def test_create_update_cluster_software_response(self): class TestBatchDeleteClusterNodesError (line 640) | class TestBatchDeleteClusterNodesError: method test_create_batch_delete_cluster_nodes_error (line 643) | def test_create_batch_delete_cluster_nodes_error(self): class TestBatchDeleteClusterNodesResponse (line 656) | class TestBatchDeleteClusterNodesResponse: method test_create_batch_delete_cluster_nodes_response (line 659) | def test_create_batch_delete_cluster_nodes_response(self): method test_create_batch_delete_cluster_nodes_response_without_optional_fields (line 683) | def test_create_batch_delete_cluster_nodes_response_without_optional_f... class TestDeployStackResponse (line 702) | class TestDeployStackResponse: method test_create_deploy_stack_response (line 705) | def test_create_deploy_stack_response(self): class TestDescribeStackResponse (line 725) | class TestDescribeStackResponse: method test_create_describe_stack_response (line 728) | def test_create_describe_stack_response(self): FILE: src/sagemaker-ai-mcp-server/tests/test_server.py function test_server_initialization (line 35) | async def test_server_initialization(): function test_command_line_args (line 58) | async def test_command_line_args(): function test_hyperpod_cluster_node_handler_initialization (line 198) | async def test_hyperpod_cluster_node_handler_initialization(): function test_hyperpod_stack_handler_initialization (line 222) | async def test_hyperpod_stack_handler_initialization(): FILE: src/stepfunctions-tool-mcp-server/awslabs/stepfunctions_tool_mcp_server/aws_helper.py class AwsHelper (line 23) | class AwsHelper: method get_aws_region (line 27) | def get_aws_region() -> Optional[str]: method get_aws_profile (line 36) | def get_aws_profile() -> Optional[str]: method create_boto3_client (line 45) | def create_boto3_client(service_name: str, region_name: Optional[str] ... FILE: src/stepfunctions-tool-mcp-server/awslabs/stepfunctions_tool_mcp_server/server.py function validate_state_machine_name (line 68) | def validate_state_machine_name(state_machine_name: str) -> bool: function sanitize_tool_name (line 80) | def sanitize_tool_name(name: str) -> str: function format_state_machine_response (line 96) | def format_state_machine_response(state_machine_name: str, payload: byte... function invoke_standard_state_machine_impl (line 107) | async def invoke_standard_state_machine_impl( function invoke_express_state_machine_impl (line 147) | async def invoke_express_state_machine_impl( function get_schema_from_registry (line 178) | def get_schema_from_registry(schema_arn: str) -> Optional[dict]: function create_state_machine_tool (line 217) | def create_state_machine_tool( function get_schema_arn_from_state_machine_arn (line 271) | def get_schema_arn_from_state_machine_arn(state_machine_arn: str) -> Opt... function filter_state_machines_by_tag (line 301) | def filter_state_machines_by_tag(state_machines, tag_key, tag_value): function register_state_machines (line 335) | def register_state_machines(): function main (line 408) | def main(): FILE: src/stepfunctions-tool-mcp-server/tests/test_aws_helper.py class TestAwsHelper (line 9) | class TestAwsHelper: method test_get_aws_region_default (line 12) | def test_get_aws_region_default(self): method test_get_aws_region_from_env (line 19) | def test_get_aws_region_from_env(self): method test_get_aws_profile_from_env (line 25) | def test_get_aws_profile_from_env(self): method test_create_boto3_client_with_profile (line 31) | def test_create_boto3_client_with_profile(self, mock_boto3_session): method test_create_boto3_client_without_profile (line 45) | def test_create_boto3_client_without_profile(self, mock_boto3_client): method test_create_boto3_client_user_agent (line 54) | def test_create_boto3_client_user_agent(self): FILE: src/stepfunctions-tool-mcp-server/tests/test_create_state_machine_tool.py class TestCreateTool (line 15) | class TestCreateTool: method setup_schema_env (line 19) | def setup_schema_env(self): method test_create_tool_basic (line 28) | def test_create_tool_basic(self, mock_mcp): method test_create_tool_with_prefix (line 52) | def test_create_tool_with_prefix(self, mock_mcp): method test_create_tool_with_schema (line 73) | def test_create_tool_with_schema(self, mock_get_schema, mock_mcp): method test_create_tool_schema_error (line 99) | def test_create_tool_schema_error(self, mock_get_schema, mock_mcp, cap... method test_create_tool_standard_impl (line 126) | async def test_create_tool_standard_impl( method test_create_tool_express_impl (line 159) | async def test_create_tool_express_impl(self, mock_mcp, mock_express_i... FILE: src/stepfunctions-tool-mcp-server/tests/test_filter_state_machines_by_tag.py class TestFilterStateMachines (line 13) | class TestFilterStateMachines: method test_filter_state_machines_matching_tags (line 17) | def test_filter_state_machines_matching_tags(self, mock_sfn_client): method test_filter_state_machines_no_matching_tags (line 54) | def test_filter_state_machines_no_matching_tags(self, mock_sfn_client): method test_filter_state_machines_error_handling (line 83) | def test_filter_state_machines_error_handling(self, mock_sfn_client, c... method test_filter_state_machines_mixed_responses (line 111) | def test_filter_state_machines_mixed_responses(self, mock_sfn_client): FILE: src/stepfunctions-tool-mcp-server/tests/test_format_state_machine_response.py class TestFormatResponse (line 13) | class TestFormatResponse: method test_format_response_json_success (line 16) | def test_format_response_json_success(self): method test_format_response_non_json (line 28) | def test_format_response_non_json(self): method test_format_response_invalid_json (line 39) | def test_format_response_invalid_json(self): method test_format_response_unicode_error (line 51) | def test_format_response_unicode_error(self): method test_format_response_complex_json (line 63) | def test_format_response_complex_json(self): method test_format_response_empty_json (line 89) | def test_format_response_empty_json(self): FILE: src/stepfunctions-tool-mcp-server/tests/test_get_schema_arn_from_state_machine_arn.py class TestGetSchemaArn (line 13) | class TestGetSchemaArn: method test_get_schema_arn_success (line 21) | def test_get_schema_arn_success(self, mock_sfn_client): method test_get_schema_arn_no_tag_key (line 45) | def test_get_schema_arn_no_tag_key(self, mock_sfn_client): method test_get_schema_arn_tag_not_found (line 62) | def test_get_schema_arn_tag_not_found(self, mock_sfn_client): method test_get_schema_arn_error_handling (line 86) | def test_get_schema_arn_error_handling(self, mock_sfn_client, caplog): method test_get_schema_arn_empty_tags (line 113) | def test_get_schema_arn_empty_tags(self, mock_sfn_client): FILE: src/stepfunctions-tool-mcp-server/tests/test_get_schema_from_registry.py class TestGetSchema (line 13) | class TestGetSchema: method test_get_schema_success (line 17) | def test_get_schema_success(self, mock_schemas_client): method test_get_schema_invalid_arn (line 37) | def test_get_schema_invalid_arn(self, mock_schemas_client, caplog): method test_get_schema_invalid_path (line 54) | def test_get_schema_invalid_path(self, mock_schemas_client, caplog): method test_get_schema_client_error (line 71) | def test_get_schema_client_error(self, mock_schemas_client, caplog): method test_get_schema_complex_content (line 95) | def test_get_schema_complex_content(self, mock_schemas_client): FILE: src/stepfunctions-tool-mcp-server/tests/test_invoke_express_state_machine_impl.py class TestExpressStateMachines (line 14) | class TestExpressStateMachines: method test_express_state_machine_success (line 19) | async def test_express_state_machine_success(self, mock_sfn_client): method test_express_state_machine_failure (line 71) | async def test_express_state_machine_failure(self, mock_sfn_client): method test_express_state_machine_direct_invocation (line 126) | async def test_express_state_machine_direct_invocation(self, mock_sfn_... method test_express_state_machine_complex_input (line 167) | async def test_express_state_machine_complex_input(self, mock_sfn_clie... FILE: src/stepfunctions-tool-mcp-server/tests/test_invoke_standard_state_machine_impl.py class TestStandardStateMachines (line 14) | class TestStandardStateMachines: method test_standard_state_machine_success (line 19) | async def test_standard_state_machine_success(self, mock_sfn_client): method test_standard_state_machine_failure (line 66) | async def test_standard_state_machine_failure(self, mock_sfn_client): method test_standard_state_machine_polling (line 116) | async def test_standard_state_machine_polling(self, mock_sfn_client): method test_standard_state_machine_complex_input (line 178) | async def test_standard_state_machine_complex_input(self, mock_sfn_cli... method test_standard_state_machine_other_statuses (line 238) | async def test_standard_state_machine_other_statuses(self, mock_sfn_cl... FILE: src/stepfunctions-tool-mcp-server/tests/test_main.py class TestMain (line 12) | class TestMain: method test_main_stdio_transport (line 18) | def test_main_stdio_transport(self, mock_parse_args, mock_mcp, mock_re... FILE: src/stepfunctions-tool-mcp-server/tests/test_register_state_machines.py class TestRegisterStateMachines (line 13) | class TestRegisterStateMachines: method test_register_machines_with_prefix (line 19) | def test_register_machines_with_prefix(self, mock_create_tool, mock_sf... method test_register_machines_with_list (line 55) | def test_register_machines_with_list(self, mock_create_tool, mock_sfn_... method test_register_machines_with_tags (line 102) | def test_register_machines_with_tags(self, mock_create_tool, mock_sfn_... method test_register_machines_with_comments (line 132) | def test_register_machines_with_comments(self, mock_create_tool, mock_... method test_register_machines_incomplete_tag_config (line 164) | def test_register_machines_incomplete_tag_config(self, mock_sfn_client... method test_register_machines_error_handling (line 180) | def test_register_machines_error_handling(self, mock_sfn_client, caplog): method test_mcp_server_initialization (line 193) | def test_mcp_server_initialization(self): FILE: src/stepfunctions-tool-mcp-server/tests/test_sanitize_tool_name.py class TestSanitizeName (line 12) | class TestSanitizeName: method test_sanitize_name_prefix_removal (line 16) | def test_sanitize_name_prefix_removal(self): method test_sanitize_name_invalid_chars (line 27) | def test_sanitize_name_invalid_chars(self): method test_sanitize_name_numeric_start (line 44) | def test_sanitize_name_numeric_start(self): method test_sanitize_name_already_valid (line 59) | def test_sanitize_name_already_valid(self): method test_sanitize_name_edge_cases (line 75) | def test_sanitize_name_edge_cases(self): method test_sanitize_name_complex_cases (line 93) | def test_sanitize_name_complex_cases(self): FILE: src/stepfunctions-tool-mcp-server/tests/test_validate_state_machine_name.py class TestValidateName (line 12) | class TestValidateName: method test_validate_name_no_filters (line 15) | def test_validate_name_no_filters(self): method test_validate_name_prefix_filter (line 34) | def test_validate_name_prefix_filter(self): method test_validate_name_list_filter (line 56) | def test_validate_name_list_filter(self): method test_validate_name_both_filters (line 77) | def test_validate_name_both_filters(self): method test_validate_name_edge_cases (line 95) | def test_validate_name_edge_cases(self): method test_validate_name_empty_filters (line 121) | def test_validate_name_empty_filters(self): FILE: src/syntheticdata-mcp-server/awslabs/syntheticdata_mcp_server/pandas_interpreter.py function safe_eval_dataframe (line 22) | def safe_eval_dataframe(node: ast.AST) -> pd.DataFrame: function execute_pandas_code (line 70) | def execute_pandas_code(code_string: str, output_dir: str) -> Dict[str, ... function check_referential_integrity (line 171) | def check_referential_integrity(dataframes: Dict[str, pd.DataFrame]) -> ... FILE: src/syntheticdata-mcp-server/awslabs/syntheticdata_mcp_server/server.py class ExecutePandasCodeInput (line 29) | class ExecutePandasCodeInput(BaseModel): class ValidateAndSaveDataInput (line 58) | class ValidateAndSaveDataInput(BaseModel): class LoadToStorageInput (line 87) | class LoadToStorageInput(BaseModel): function get_data_gen_instructions (line 158) | async def get_data_gen_instructions( function validate_and_save_data (line 226) | async def validate_and_save_data(input_data: ValidateAndSaveDataInput) -... function load_to_storage (line 305) | async def load_to_storage(input_data: LoadToStorageInput) -> Dict: function execute_pandas_code (line 347) | async def execute_pandas_code(input_data: ExecutePandasCodeInput) -> Dict: function _extract_key_entities (line 422) | def _extract_key_entities(description: str) -> List[str]: function _generate_data_structure_instructions (line 487) | def _generate_data_structure_instructions(description: str, entities: Li... function _get_entity_attribute_suggestions (line 529) | def _get_entity_attribute_suggestions(entity: str) -> List[str]: function _generate_data_generation_instructions (line 567) | def _generate_data_generation_instructions(entities: List[str]) -> Dict: function _get_recommended_record_counts (line 601) | def _get_recommended_record_counts(entities: List[str]) -> Dict[str, int]: function _generate_example_data (line 627) | def _generate_example_data(entities: List[str]) -> Dict[str, List[Dict]]: function _get_entity_example_data (line 645) | def _get_entity_example_data(entity: str) -> List[Dict]: function _validate_table_data (line 714) | def _validate_table_data(table_name: str, records: List[Dict]) -> Dict: function main (line 768) | def main(): FILE: src/syntheticdata-mcp-server/awslabs/syntheticdata_mcp_server/storage/base.py class DataTarget (line 22) | class DataTarget(ABC): method load (line 26) | async def load(self, data: Dict[str, List[Dict]], config: Dict[str, An... method validate (line 39) | async def validate(self, data: Dict[str, List[Dict]], config: Dict[str... FILE: src/syntheticdata-mcp-server/awslabs/syntheticdata_mcp_server/storage/loader.py class UnifiedDataLoader (line 22) | class UnifiedDataLoader: method __init__ (line 25) | def __init__(self): method load_data (line 29) | async def load_data( FILE: src/syntheticdata-mcp-server/awslabs/syntheticdata_mcp_server/storage/s3.py class S3Target (line 32) | class S3Target(DataTarget): method __init__ (line 35) | def __init__(self): method validate (line 42) | async def validate(self, data: Dict[str, List[Dict]], config: Dict[str... method load (line 77) | async def load(self, data: Dict[str, List[Dict]], config: Dict[str, An... method _convert_format (line 136) | def _convert_format( method _apply_partitioning (line 160) | def _apply_partitioning( method _upload_to_s3 (line 202) | async def _upload_to_s3( FILE: src/syntheticdata-mcp-server/tests/conftest.py function temp_dir (line 15) | def temp_dir() -> Generator[str, None, None]: function mock_cli_args (line 26) | def mock_cli_args() -> Generator[List[str], None, None]: function mock_aws_credentials (line 42) | def mock_aws_credentials() -> None: function mock_s3 (line 48) | def mock_s3(mock_aws_credentials) -> Generator[BaseClient, None, None]: function sample_data (line 62) | def sample_data() -> Dict: function sample_pandas_code (line 92) | def sample_pandas_code() -> str: FILE: src/syntheticdata-mcp-server/tests/test_pandas_interpreter.py function test_safe_eval_dataframe_valid (line 14) | def test_safe_eval_dataframe_valid(): function test_safe_eval_dataframe_invalid_constructor (line 26) | def test_safe_eval_dataframe_invalid_constructor(): function test_safe_eval_dataframe_wrong_constructor (line 36) | def test_safe_eval_dataframe_wrong_constructor(): function test_execute_pandas_code_success (line 46) | def test_execute_pandas_code_success(temp_dir: str, sample_pandas_code: ... function test_execute_pandas_code_no_dataframes (line 70) | def test_execute_pandas_code_no_dataframes(temp_dir: str) -> None: function test_execute_pandas_code_syntax_error (line 85) | def test_execute_pandas_code_syntax_error(temp_dir: str) -> None: function test_execute_pandas_code_invalid_directory (line 101) | def test_execute_pandas_code_invalid_directory(temp_dir: str) -> None: function test_check_referential_integrity (line 117) | def test_check_referential_integrity() -> None: function test_execute_pandas_code_directory_creation (line 181) | def test_execute_pandas_code_directory_creation(temp_dir: str, sample_pa... function test_execute_pandas_code_security (line 199) | def test_execute_pandas_code_security(temp_dir: str, code: str, expected... FILE: src/syntheticdata-mcp-server/tests/test_server.py function test_get_data_gen_instructions (line 26) | async def test_get_data_gen_instructions() -> None: function test_get_data_gen_instructions_empty (line 61) | async def test_get_data_gen_instructions_empty() -> None: function test_get_data_gen_instructions_invalid (line 71) | async def test_get_data_gen_instructions_invalid() -> None: function test_validate_and_save_data (line 81) | async def test_validate_and_save_data(temp_dir: str, sample_data: dict) ... function test_validate_and_save_data_invalid (line 101) | async def test_validate_and_save_data_invalid(temp_dir: str) -> None: function test_validate_and_save_data_duplicate_ids (line 121) | async def test_validate_and_save_data_duplicate_ids(temp_dir: str) -> None: function test_load_to_storage_s3 (line 141) | async def test_load_to_storage_s3(mock_s3, sample_data: dict) -> None: function test_load_to_storage_invalid_config (line 170) | async def test_load_to_storage_invalid_config() -> None: function test_execute_pandas_code_success (line 190) | async def test_execute_pandas_code_success(temp_dir: str, sample_pandas_... function test_execute_pandas_code_with_output_dir (line 205) | async def test_execute_pandas_code_with_output_dir(temp_dir: str, sample... function test_validate_table_data (line 219) | def test_validate_table_data() -> None: function test_generate_data_structure_instructions (line 245) | def test_generate_data_structure_instructions() -> None: function test_generate_data_generation_instructions (line 276) | def test_generate_data_generation_instructions() -> None: function test_get_recommended_record_counts (line 305) | def test_get_recommended_record_counts() -> None: function test_get_entity_example_data (line 325) | def test_get_entity_example_data() -> None: function test_main_cli_arguments (line 352) | def test_main_cli_arguments(monkeypatch) -> None: function test_main_emits_deprecation_warning (line 373) | def test_main_emits_deprecation_warning(monkeypatch) -> None: FILE: src/syntheticdata-mcp-server/tests/test_storage/test_loader.py function data_loader (line 9) | def data_loader() -> UnifiedDataLoader: function test_load_data_s3_success (line 15) | async def test_load_data_s3_success( function test_load_data_multiple_targets (line 39) | async def test_load_data_multiple_targets( function test_load_data_unsupported_target (line 58) | async def test_load_data_unsupported_target( function test_load_data_invalid_config (line 73) | async def test_load_data_invalid_config( function test_load_data_mixed_success (line 95) | async def test_load_data_mixed_success( function test_load_data_empty_targets (line 112) | async def test_load_data_empty_targets(data_loader: UnifiedDataLoader, s... function test_load_data_empty_data (line 121) | async def test_load_data_empty_data(data_loader: UnifiedDataLoader, mock... function test_load_data_invalid_target_config (line 143) | async def test_load_data_invalid_target_config( FILE: src/syntheticdata-mcp-server/tests/test_storage/test_s3.py function s3_target (line 13) | def s3_target(mock_s3) -> S3Target: function test_s3_target_init (line 18) | def test_s3_target_init(monkeypatch) -> None: function test_validate_with_empty_data (line 45) | async def test_validate_with_empty_data(s3_target: S3Target) -> None: function test_validate_with_invalid_data_structure (line 63) | async def test_validate_with_invalid_data_structure(s3_target: S3Target)... function test_validate_s3_access_error (line 81) | async def test_validate_s3_access_error(s3_target: S3Target, sample_data... function test_validate_config_success (line 102) | async def test_validate_config_success(s3_target: S3Target, sample_data:... function test_validate_config_invalid (line 133) | async def test_validate_config_invalid( function test_load_success (line 142) | async def test_load_success(s3_target: S3Target, sample_data: dict) -> N... function test_load_with_partitioning (line 158) | async def test_load_with_partitioning(s3_target: S3Target) -> None: function test_convert_format (line 195) | async def test_convert_format(s3_target: S3Target, format: str, compress... function test_convert_format_empty_dataframe (line 205) | async def test_convert_format_empty_dataframe(s3_target: S3Target) -> None: function test_convert_format_with_special_characters (line 228) | async def test_convert_format_with_special_characters(s3_target: S3Targe... function test_convert_format_compression_options (line 262) | async def test_convert_format_compression_options( function test_convert_format_invalid (line 284) | async def test_convert_format_invalid(s3_target: S3Target) -> None: function test_apply_partitioning_multiple_columns (line 293) | async def test_apply_partitioning_multiple_columns(s3_target: S3Target) ... function test_apply_partitioning_missing_columns (line 329) | async def test_apply_partitioning_missing_columns(s3_target: S3Target) -... function test_apply_partitioning_with_null_values (line 344) | async def test_apply_partitioning_with_null_values(s3_target: S3Target) ... function test_apply_partitioning (line 367) | async def test_apply_partitioning(s3_target: S3Target) -> None: function test_upload_to_s3 (line 396) | async def test_upload_to_s3(s3_target: S3Target) -> None: function test_upload_to_s3_error (line 413) | async def test_upload_to_s3_error(s3_target: S3Target) -> None: function test_load_with_multiple_tables (line 426) | async def test_load_with_multiple_tables(s3_target: S3Target) -> None: function test_load_with_large_data (line 462) | async def test_load_with_large_data(s3_target: S3Target) -> None: function test_upload_with_storage_options (line 510) | async def test_upload_with_storage_options( function test_parquet_with_complex_data (line 542) | async def test_parquet_with_complex_data(s3_target: S3Target) -> None: function test_load_error_handling (line 573) | async def test_load_error_handling(s3_target: S3Target) -> None: FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/impl/resources/terraform_aws_provider_resources_listing.py function terraform_aws_provider_assets_listing_impl (line 40) | async def terraform_aws_provider_assets_listing_impl() -> str: FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/impl/resources/terraform_awscc_provider_resources_listing.py function terraform_awscc_provider_resources_listing_impl (line 40) | async def terraform_awscc_provider_resources_listing_impl() -> str: FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/impl/tools/execute_terraform_command.py function execute_terraform_command_impl (line 29) | async def execute_terraform_command_impl( FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/impl/tools/execute_terragrunt_command.py function execute_terragrunt_command_impl (line 32) | async def execute_terragrunt_command_impl( FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/impl/tools/run_checkov_scan.py function _clean_output_text (line 33) | def _clean_output_text(text: str) -> str: function _ensure_checkov_installed (line 89) | def _ensure_checkov_installed() -> bool: function _parse_checkov_json_output (line 122) | def _parse_checkov_json_output(output: str) -> Tuple[List[CheckovVulnera... function run_checkov_scan_impl (line 169) | async def run_checkov_scan_impl(request: CheckovScanRequest) -> CheckovS... FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/impl/tools/search_aws_provider_docs.py function resource_to_github_path (line 54) | def resource_to_github_path( function fetch_github_documentation (line 115) | def fetch_github_documentation( function parse_markdown_documentation (line 205) | def parse_markdown_documentation( function search_aws_provider_docs_impl (line 490) | async def search_aws_provider_docs_impl( FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/impl/tools/search_awscc_provider_docs.py function resource_to_github_path (line 54) | def resource_to_github_path( function fetch_github_documentation (line 115) | def fetch_github_documentation( function parse_markdown_documentation (line 205) | def parse_markdown_documentation( function search_awscc_provider_docs_impl (line 445) | async def search_awscc_provider_docs_impl( FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/impl/tools/search_specific_aws_ia_modules.py function get_module_details (line 43) | async def get_module_details(namespace: str, name: str, provider: str = ... function get_specific_module_info (line 254) | async def get_specific_module_info(module_info: Dict[str, str]) -> Optio... function search_specific_aws_ia_modules_impl (line 355) | async def search_specific_aws_ia_modules_impl(query: str) -> List[Module... FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/impl/tools/search_user_provided_module.py function search_user_provided_module_impl (line 36) | async def search_user_provided_module_impl( function parse_module_url (line 168) | def parse_module_url(module_url: str) -> Optional[Tuple[str, str, str]]: function get_module_details (line 207) | async def get_module_details( FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/impl/tools/utils.py function clean_description (line 28) | def clean_description(description: str) -> str: function get_github_release_details (line 59) | async def get_github_release_details(owner: str, repo: str) -> Dict[str,... function get_submodules (line 137) | async def get_submodules(owner: str, repo: str, branch: str = 'master') ... function extract_description_from_readme (line 278) | def extract_description_from_readme(readme_content: str) -> Optional[str]: function extract_outputs_from_readme (line 319) | def extract_outputs_from_readme(readme_content: str) -> List[Dict[str, s... function get_variables_tf (line 396) | async def get_variables_tf( function parse_variables_tf (line 460) | def parse_variables_tf(content: str) -> List[TerraformVariable]: function validate_working_directory (line 507) | def validate_working_directory(working_dir: str, allowed_base: Optional[... function get_dangerous_patterns (line 545) | def get_dangerous_patterns() -> List[str]: FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/models/models.py class TerraformExecutionRequest (line 19) | class TerraformExecutionRequest(BaseModel): class SubmoduleInfo (line 39) | class SubmoduleInfo(BaseModel): class TerraformVariable (line 55) | class TerraformVariable(BaseModel): class TerraformOutput (line 73) | class TerraformOutput(BaseModel): class ModuleSearchResult (line 85) | class ModuleSearchResult(BaseModel): method has_submodules (line 122) | def has_submodules(self) -> bool: class TerraformProviderDocsResult (line 127) | class TerraformProviderDocsResult(BaseModel): class TerraformAWSProviderDocsResult (line 149) | class TerraformAWSProviderDocsResult(TerraformProviderDocsResult): class TerraformAWSCCProviderDocsResult (line 165) | class TerraformAWSCCProviderDocsResult(TerraformProviderDocsResult): class TerraformExecutionResult (line 179) | class TerraformExecutionResult(BaseModel): class CheckovVulnerability (line 205) | class CheckovVulnerability(BaseModel): class CheckovScanRequest (line 233) | class CheckovScanRequest(BaseModel): class CheckovScanResult (line 253) | class CheckovScanResult(BaseModel): class SearchUserProvidedModuleRequest (line 277) | class SearchUserProvidedModuleRequest(BaseModel): class SearchUserProvidedModuleResult (line 295) | class SearchUserProvidedModuleResult(BaseModel): class TerragruntExecutionRequest (line 321) | class TerragruntExecutionRequest(BaseModel): class TerragruntExecutionResult (line 354) | class TerragruntExecutionResult(BaseModel): FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/scripts/generate_aws_provider_resources.py class ResourceItem (line 86) | class ResourceItem(TypedDict): class CategoryData (line 100) | class CategoryData(TypedDict): class ProviderResult (line 112) | class ProviderResult(TypedDict): function ensure_tag (line 128) | def ensure_tag(element: Optional[PageElement]) -> Optional[Tag]: function safe_find (line 135) | def safe_find(element: Any, *args: Any, **kwargs: Any) -> Optional[Tag]: function safe_find_all (line 143) | def safe_find_all(element: Any, *args: Any, **kwargs: Any) -> ResultSet: function safe_get_text (line 150) | def safe_get_text(element: Any, strip: bool = False) -> str: function fetch_aws_provider_page (line 157) | async def fetch_aws_provider_page() -> ProviderResult: function get_fallback_resource_data (line 798) | def get_fallback_resource_data() -> Dict[str, CategoryData]: function parse_arguments (line 1100) | def parse_arguments(): function main (line 1125) | async def main(): FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/scripts/generate_awscc_provider_resources.py function ensure_tag (line 52) | def ensure_tag(element: Optional[PageElement]) -> Optional[Tag]: function safe_find (line 59) | def safe_find(element: Any, *args: Any, **kwargs: Any) -> Optional[Tag]: function safe_find_all (line 67) | def safe_find_all(element: Any, *args: Any, **kwargs: Any) -> ResultSet: function safe_get_text (line 74) | def safe_get_text(element: Any, strip: bool = False) -> str: function fetch_awscc_provider_page (line 118) | async def fetch_awscc_provider_page(): function get_fallback_resource_data (line 837) | def get_fallback_resource_data(): function parse_arguments (line 899) | def parse_arguments(): function main (line 924) | async def main(): FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/scripts/scrape_aws_terraform_best_practices.py function download_pdf (line 33) | def download_pdf(url): function extract_text_from_pdf (line 41) | def extract_text_from_pdf(pdf_bytes): function convert_to_markdown (line 55) | def convert_to_markdown(text): function main (line 112) | def main(): FILE: src/terraform-mcp-server/awslabs/terraform_mcp_server/server.py function execute_terraform_command (line 75) | async def execute_terraform_command( function execute_terragrunt_command (line 113) | async def execute_terragrunt_command( function search_aws_provider_docs (line 171) | async def search_aws_provider_docs( function search_awscc_provider_docs (line 219) | async def search_awscc_provider_docs( function search_specific_aws_ia_modules (line 273) | async def search_specific_aws_ia_modules( function run_checkov_scan (line 325) | async def run_checkov_scan( function search_user_provided_module (line 366) | async def search_user_provided_module( function terraform_development_workflow (line 423) | async def terraform_development_workflow() -> str: function terraform_aws_provider_resources_listing (line 434) | async def terraform_aws_provider_resources_listing() -> str: function terraform_awscc_provider_resources_listing (line 445) | async def terraform_awscc_provider_resources_listing() -> str: function terraform_aws_best_practices (line 456) | async def terraform_aws_best_practices() -> str: function main (line 461) | def main(): FILE: src/terraform-mcp-server/tests/conftest.py function temp_terraform_dir (line 25) | def temp_terraform_dir(): function mock_terraform_command_output (line 38) | def mock_terraform_command_output(): function mock_checkov_output (line 102) | def mock_checkov_output(temp_terraform_dir): function mock_subprocess (line 200) | def mock_subprocess(): function mock_os_path (line 214) | def mock_os_path(): function mock_aws_provider_docs (line 230) | def mock_aws_provider_docs(): function mock_awscc_provider_docs (line 272) | def mock_awscc_provider_docs(): function mock_aws_ia_modules (line 312) | def mock_aws_ia_modules(): function mock_terragrunt_command_output (line 377) | def mock_terragrunt_command_output(): FILE: src/terraform-mcp-server/tests/test_command_impl.py function mock_path_validation (line 27) | def mock_path_validation(temp_terraform_dir): function test_execute_terraform_command_success (line 47) | async def test_execute_terraform_command_success(temp_terraform_dir): function test_execute_terraform_command_error (line 86) | async def test_execute_terraform_command_error(temp_terraform_dir): function test_run_checkov_scan_success (line 123) | async def test_run_checkov_scan_success(temp_terraform_dir): function test_execute_terraform_command_invalid_command (line 202) | async def test_execute_terraform_command_invalid_command(): function test_execute_terraform_command_dangerous_patterns (line 223) | async def test_execute_terraform_command_dangerous_patterns(temp_terrafo... function test_execute_terraform_command_with_outputs (line 248) | async def test_execute_terraform_command_with_outputs(temp_terraform_dir): function test_run_checkov_scan_invalid_framework (line 302) | async def test_run_checkov_scan_invalid_framework(temp_terraform_dir): function test_run_checkov_scan_invalid_output_format (line 324) | async def test_run_checkov_scan_invalid_output_format(temp_terraform_dir): function test_run_checkov_scan_dangerous_patterns (line 346) | async def test_run_checkov_scan_dangerous_patterns(temp_terraform_dir): function test_run_checkov_scan_cli_output (line 371) | async def test_run_checkov_scan_cli_output(temp_terraform_dir): function test_run_checkov_scan_error (line 428) | async def test_run_checkov_scan_error(temp_terraform_dir): function test_run_checkov_scan_checkov_not_installed (line 465) | async def test_run_checkov_scan_checkov_not_installed(temp_terraform_dir): function test_execute_terragrunt_command_success (line 494) | async def test_execute_terragrunt_command_success(temp_terraform_dir): function test_execute_terragrunt_command_error (line 531) | async def test_execute_terragrunt_command_error(temp_terraform_dir): FILE: src/terraform-mcp-server/tests/test_execute_terraform_command.py function mock_path_validation (line 16) | def mock_path_validation(temp_terraform_dir): function test_clean_output_text_helper (line 26) | async def test_clean_output_text_helper(temp_terraform_dir): function test_execute_terraform_command_with_region (line 60) | async def test_execute_terraform_command_with_region(temp_terraform_dir): function test_execute_terraform_command_exception_handling (line 93) | async def test_execute_terraform_command_exception_handling(temp_terrafo... function test_execute_terraform_command_output_error_handling (line 116) | async def test_execute_terraform_command_output_error_handling(temp_terr... function test_execute_terraform_command_output_json_error (line 150) | async def test_execute_terraform_command_output_json_error(temp_terrafor... function test_execute_terraform_command_complex_outputs (line 189) | async def test_execute_terraform_command_complex_outputs(temp_terraform_... function test_execute_terraform_command_rejects_invalid_path (line 242) | async def test_execute_terraform_command_rejects_invalid_path(temp_terra... FILE: src/terraform-mcp-server/tests/test_execute_terragrunt_command.py function mock_path_validation (line 18) | def mock_path_validation(temp_terraform_dir): function test_execute_terragrunt_command_success (line 28) | async def test_execute_terragrunt_command_success(temp_terraform_dir): function test_execute_terragrunt_command_error (line 65) | async def test_execute_terragrunt_command_error(temp_terraform_dir): function test_clean_output_text_helper (line 100) | async def test_clean_output_text_helper(temp_terraform_dir): function test_execute_terragrunt_command_with_region (line 137) | async def test_execute_terragrunt_command_with_region(temp_terraform_dir): function test_execute_terragrunt_command_dangerous_patterns (line 174) | async def test_execute_terragrunt_command_dangerous_patterns(temp_terraf... function test_execute_terragrunt_command_with_outputs (line 200) | async def test_execute_terragrunt_command_with_outputs(temp_terraform_dir): function test_execute_terragrunt_command_complex_outputs (line 252) | async def test_execute_terragrunt_command_complex_outputs(temp_terraform... function test_execute_terragrunt_command_output_error_handling (line 309) | async def test_execute_terragrunt_command_output_error_handling(temp_ter... function test_execute_terragrunt_command_run_all (line 347) | async def test_execute_terragrunt_command_run_all(temp_terraform_dir): function test_execute_terragrunt_command_invalid_command (line 413) | async def test_execute_terragrunt_command_invalid_command(temp_terraform... function test_execute_terragrunt_command_with_exception (line 442) | async def test_execute_terragrunt_command_with_exception(temp_terraform_... function test_execute_terragrunt_command_with_custom_config (line 468) | async def test_execute_terragrunt_command_with_custom_config(temp_terraf... function test_execute_terragrunt_command_rejects_invalid_path (line 507) | async def test_execute_terragrunt_command_rejects_invalid_path(temp_terr... function test_execute_terragrunt_command_rejects_invalid_config_path (line 533) | async def test_execute_terragrunt_command_rejects_invalid_config_path(te... FILE: src/terraform-mcp-server/tests/test_models.py class TestTerraformExecutionRequest (line 33) | class TestTerraformExecutionRequest: method test_terraform_execution_request_creation (line 36) | def test_terraform_execution_request_creation(self, temp_terraform_dir): method test_terraform_execution_request_defaults (line 52) | def test_terraform_execution_request_defaults(self, temp_terraform_dir): class TestTerraformExecutionResult (line 69) | class TestTerraformExecutionResult: method test_terraform_execution_result_success (line 72) | def test_terraform_execution_result_success(self, temp_terraform_dir): method test_terraform_execution_result_error (line 93) | def test_terraform_execution_result_error(self, temp_terraform_dir): class TestCheckovScanRequest (line 116) | class TestCheckovScanRequest: method test_checkov_scan_request_creation (line 119) | def test_checkov_scan_request_creation(self, temp_terraform_dir): method test_checkov_scan_request_defaults (line 135) | def test_checkov_scan_request_defaults(self, temp_terraform_dir): class TestCheckovVulnerability (line 152) | class TestCheckovVulnerability: method test_checkov_vulnerability_creation (line 155) | def test_checkov_vulnerability_creation(self, temp_terraform_dir): class TestCheckovScanResult (line 184) | class TestCheckovScanResult: method test_checkov_scan_result_success (line 187) | def test_checkov_scan_result_success(self, temp_terraform_dir): method test_checkov_scan_result_error (line 232) | def test_checkov_scan_result_error(self, temp_terraform_dir): class TestTerraformAWSProviderDocsResult (line 252) | class TestTerraformAWSProviderDocsResult: method test_terraform_aws_provider_docs_result_creation (line 255) | def test_terraform_aws_provider_docs_result_creation(self): class TestTerraformAWSCCProviderDocsResult (line 301) | class TestTerraformAWSCCProviderDocsResult: method test_terraform_awscc_provider_docs_result_creation (line 304) | def test_terraform_awscc_provider_docs_result_creation(self): class TestModuleSearchResult (line 346) | class TestModuleSearchResult: method test_module_search_result_creation (line 349) | def test_module_search_result_creation(self): class TestSubmoduleInfo (line 417) | class TestSubmoduleInfo: method test_submodule_info_creation (line 420) | def test_submodule_info_creation(self): class TestTerraformVariable (line 438) | class TestTerraformVariable: method test_terraform_variable_creation (line 441) | def test_terraform_variable_creation(self): class TestTerraformOutput (line 458) | class TestTerraformOutput: method test_terraform_output_creation (line 461) | def test_terraform_output_creation(self): FILE: src/terraform-mcp-server/tests/test_parameter_annotations.py function print_tool_parameters (line 15) | def print_tool_parameters(): function add_parameter_annotations (line 44) | def add_parameter_annotations(): function main (line 190) | def main(): FILE: src/terraform-mcp-server/tests/test_resources.py function test_terraform_aws_provider_assets_listing_success (line 18) | async def test_terraform_aws_provider_assets_listing_success(): function test_terraform_aws_provider_assets_listing_file_not_found (line 46) | async def test_terraform_aws_provider_assets_listing_file_not_found(): function test_terraform_aws_provider_assets_listing_exception (line 59) | async def test_terraform_aws_provider_assets_listing_exception(): function test_terraform_awscc_provider_resources_listing_success (line 74) | async def test_terraform_awscc_provider_resources_listing_success(): function test_terraform_awscc_provider_resources_listing_file_not_found (line 102) | async def test_terraform_awscc_provider_resources_listing_file_not_found(): function test_terraform_awscc_provider_resources_listing_exception (line 115) | async def test_terraform_awscc_provider_resources_listing_exception(): FILE: src/terraform-mcp-server/tests/test_run_checkov_scan.py function test_clean_output_text_function (line 19) | def test_clean_output_text_function(): function test_parse_checkov_json_output_valid (line 54) | async def test_parse_checkov_json_output_valid(): function test_parse_checkov_json_output_invalid (line 112) | async def test_parse_checkov_json_output_invalid(): function test_run_checkov_scan_with_absolute_path_outside_cwd (line 135) | async def test_run_checkov_scan_with_absolute_path_outside_cwd(temp_terr... function test_run_checkov_scan_with_parent_traversal (line 154) | async def test_run_checkov_scan_with_parent_traversal(temp_terraform_dir): function test_run_checkov_scan_with_valid_subdirectory (line 172) | async def test_run_checkov_scan_with_valid_subdirectory(temp_terraform_d... function test_run_checkov_scan_with_relative_path_in_cwd (line 209) | async def test_run_checkov_scan_with_relative_path_in_cwd(temp_terraform... function test_run_checkov_scan_with_skip_check_ids_dangerous_pattern (line 247) | async def test_run_checkov_scan_with_skip_check_ids_dangerous_pattern(te... function test_run_checkov_scan_cli_output_parsing (line 269) | async def test_run_checkov_scan_cli_output_parsing(temp_terraform_dir): function test_run_checkov_scan_with_return_code_2 (line 321) | async def test_run_checkov_scan_with_return_code_2(temp_terraform_dir): function test_run_checkov_scan_exception_handling (line 353) | async def test_run_checkov_scan_exception_handling(temp_terraform_dir): function test_run_checkov_scan_checkov_not_found_install_success (line 380) | async def test_run_checkov_scan_checkov_not_found_install_success(temp_t... function test_run_checkov_scan_checkov_not_found_install_fails (line 418) | async def test_run_checkov_scan_checkov_not_found_install_fails(temp_ter... FILE: src/terraform-mcp-server/tests/test_search_user_provided_module.py class MockResponse (line 39) | class MockResponse: method __init__ (line 42) | def __init__(self, status_code, json_data=None, text=None): method json (line 54) | def json(self): method raise_for_status (line 62) | def raise_for_status(self): function mock_terraform_registry_response (line 73) | def mock_terraform_registry_response(): function mock_github_readme (line 164) | def mock_github_readme(): function mock_github_variables_tf (line 218) | def mock_github_variables_tf(): function mock_github_release (line 262) | def mock_github_release(): function test_parse_module_url (line 272) | async def test_parse_module_url(): function test_get_module_details_success (line 293) | async def test_get_module_details_success( function test_get_module_details_error (line 374) | async def test_get_module_details_error(mock_requests_get): function test_search_user_provided_module_impl_success (line 392) | async def test_search_user_provided_module_impl_success( function test_search_user_provided_module_impl_with_registry_prefix (line 458) | async def test_search_user_provided_module_impl_with_registry_prefix(moc... function test_search_user_provided_module_impl_invalid_url (line 503) | async def test_search_user_provided_module_impl_invalid_url(mock_get_mod... function test_search_user_provided_module_impl_module_not_found (line 530) | async def test_search_user_provided_module_impl_module_not_found(mock_ge... function test_search_user_provided_module_impl_exception (line 566) | async def test_search_user_provided_module_impl_exception(mock_get_modul... function test_search_user_provided_module_impl_extract_outputs_from_readme (line 590) | async def test_search_user_provided_module_impl_extract_outputs_from_rea... function test_parse_module_url_with_http_scheme (line 667) | async def test_parse_module_url_with_http_scheme(mock_requests_get): function test_get_module_details_with_readme_in_api (line 683) | async def test_get_module_details_with_readme_in_api(mock_requests_get): function test_get_module_details_with_github_source (line 712) | async def test_get_module_details_with_github_source(mock_requests_get): function test_get_module_details_with_large_readme (line 792) | async def test_get_module_details_with_large_readme(mock_requests_get): function test_get_module_details_with_api_error (line 825) | async def test_get_module_details_with_api_error(mock_requests_get): function test_get_module_details_no_readme_content (line 838) | async def test_get_module_details_no_readme_content(mock_requests_get): function test_get_module_details_with_variables_content (line 891) | async def test_get_module_details_with_variables_content(mock_requests_g... function test_get_module_details_with_variables_in_master_branch (line 963) | async def test_get_module_details_with_variables_in_master_branch(mock_r... function test_get_module_details_with_version_from_github (line 1026) | async def test_get_module_details_with_version_from_github(mock_requests... function test_search_user_provided_module_impl_with_variables_from_root (line 1082) | async def test_search_user_provided_module_impl_with_variables_from_root... function test_search_user_provided_module_impl_with_outputs_from_root (line 1126) | async def test_search_user_provided_module_impl_with_outputs_from_root(m... function test_search_user_provided_module_impl_no_readme_content (line 1166) | async def test_search_user_provided_module_impl_no_readme_content(mock_g... function format_json (line 1215) | def format_json(obj: Any) -> str: function test_format_json (line 1228) | async def test_format_json(): function main (line 1249) | async def main(): FILE: src/terraform-mcp-server/tests/test_server.py class TestMCPServer (line 41) | class TestMCPServer: method test_mcp_initialization (line 44) | def test_mcp_initialization(self): method test_mcp_dependencies (line 55) | def test_mcp_dependencies(self): class TestTools (line 64) | class TestTools: method test_execute_terraform_command_registration (line 67) | def test_execute_terraform_command_registration(self): method test_execute_terraform_command (line 81) | async def test_execute_terraform_command(self, mock_execute_terraform_... method test_search_aws_provider_docs_registration (line 123) | def test_search_aws_provider_docs_registration(self): method test_search_aws_provider_docs (line 137) | async def test_search_aws_provider_docs(self, mock_search_aws_provider... method test_search_awscc_provider_docs_registration (line 167) | def test_search_awscc_provider_docs_registration(self): method test_search_awscc_provider_docs (line 181) | async def test_search_awscc_provider_docs(self, mock_search_awscc_prov... method test_search_specific_aws_ia_modules_registration (line 210) | def test_search_specific_aws_ia_modules_registration(self): method test_search_specific_aws_ia_modules (line 224) | async def test_search_specific_aws_ia_modules(self, mock_search_specif... method test_run_checkov_scan_registration (line 250) | def test_run_checkov_scan_registration(self): method test_run_checkov_scan (line 264) | async def test_run_checkov_scan(self, mock_run_checkov_scan_impl): method test_search_user_provided_module_registration (line 318) | def test_search_user_provided_module_registration(self): method test_search_user_provided_module (line 332) | async def test_search_user_provided_module(self, mock_search_user_prov... method test_execute_terragrunt_command_registration (line 380) | def test_execute_terragrunt_command_registration(self): method test_execute_terragrunt_command (line 394) | async def test_execute_terragrunt_command(self, mock_execute_terragrun... class TestResources (line 446) | class TestResources: method test_resource_registrations (line 449) | def test_resource_registrations(self): method test_terraform_development_workflow_resource (line 499) | def test_terraform_development_workflow_resource(self): method test_terraform_development_workflow_content (line 514) | async def test_terraform_development_workflow_content(self): method test_terraform_aws_provider_resources_listing_resource (line 525) | async def test_terraform_aws_provider_resources_listing_resource(self): method test_terraform_awscc_provider_resources_listing_resource (line 535) | async def test_terraform_awscc_provider_resources_listing_resource(self): method test_terraform_aws_best_practices_resource (line 544) | def test_terraform_aws_best_practices_resource(self): method test_terraform_aws_best_practices_content (line 561) | async def test_terraform_aws_best_practices_content(self): class TestMain (line 572) | class TestMain: method test_main_default (line 576) | def test_main_default(self, mock_mcp): FILE: src/terraform-mcp-server/tests/test_tool_implementations.py function print_aws_provider_results (line 36) | def print_aws_provider_results(results): function print_awscc_provider_results (line 75) | def print_awscc_provider_results(results): function test_search_aws_provider_docs (line 110) | async def test_search_aws_provider_docs(): function test_search_awscc_provider_docs (line 151) | async def test_search_awscc_provider_docs(): function test_search_specific_aws_ia_modules (line 189) | async def test_search_specific_aws_ia_modules(): function format_json (line 225) | def format_json(obj: Any) -> str: function main (line 238) | async def main(): FILE: src/terraform-mcp-server/tests/test_utils.py class TestCleanDescription (line 18) | class TestCleanDescription: method test_clean_description_with_emojis (line 21) | def test_clean_description_with_emojis(self): method test_clean_description_without_emojis (line 35) | def test_clean_description_without_emojis(self): method test_clean_description_with_whitespace (line 41) | def test_clean_description_with_whitespace(self): class TestExtractDescriptionFromReadme (line 51) | class TestExtractDescriptionFromReadme: method test_extract_description_from_readme_with_paragraph (line 54) | def test_extract_description_from_readme_with_paragraph(self): method test_extract_description_from_readme_with_long_paragraph (line 67) | def test_extract_description_from_readme_with_long_paragraph(self): method test_extract_description_from_readme_without_paragraph (line 84) | def test_extract_description_from_readme_without_paragraph(self): method test_extract_description_from_readme_with_empty_content (line 94) | def test_extract_description_from_readme_with_empty_content(self): class TestExtractOutputsFromReadme (line 102) | class TestExtractOutputsFromReadme: method test_extract_outputs_from_readme_with_table (line 105) | def test_extract_outputs_from_readme_with_table(self): method test_extract_outputs_from_readme_with_list (line 125) | def test_extract_outputs_from_readme_with_list(self): method test_extract_outputs_from_readme_without_outputs (line 152) | def test_extract_outputs_from_readme_without_outputs(self): method test_extract_outputs_from_readme_with_empty_content (line 163) | def test_extract_outputs_from_readme_with_empty_content(self): class TestParseVariablesTf (line 171) | class TestParseVariablesTf: method test_parse_variables_tf_with_variables (line 174) | def test_parse_variables_tf_with_variables(self): method test_parse_variables_tf_without_variables (line 225) | def test_parse_variables_tf_without_variables(self): method test_parse_variables_tf_with_complex_types (line 232) | def test_parse_variables_tf_with_complex_types(self): class TestGetDangerousPatterns (line 284) | class TestGetDangerousPatterns: method test_get_dangerous_patterns (line 287) | def test_get_dangerous_patterns(self): class TestValidateWorkingDirectory (line 309) | class TestValidateWorkingDirectory: method test_relative_path_within_base (line 312) | def test_relative_path_within_base(self): method test_absolute_path_outside_base_rejected (line 320) | def test_absolute_path_outside_base_rejected(self): method test_parent_traversal_rejected (line 326) | def test_parent_traversal_rejected(self): method test_dot_path_accepted (line 332) | def test_dot_path_accepted(self): method test_nested_subdirectory_accepted (line 338) | def test_nested_subdirectory_accepted(self): method test_symlink_escape_rejected (line 346) | def test_symlink_escape_rejected(self): method test_defaults_to_cwd (line 354) | def test_defaults_to_cwd(self): FILE: src/terraform-mcp-server/tests/test_utils_additional.py class TestGetGithubReleaseDetails (line 16) | class TestGetGithubReleaseDetails: method test_get_github_release_details_with_latest_release (line 20) | async def test_get_github_release_details_with_latest_release(self): method test_get_github_release_details_with_tags (line 47) | async def test_get_github_release_details_with_tags(self): method test_get_github_release_details_with_no_releases_or_tags (line 98) | async def test_get_github_release_details_with_no_releases_or_tags(self): method test_get_github_release_details_with_exception (line 133) | async def test_get_github_release_details_with_exception(self): class TestGetSubmodules (line 145) | class TestGetSubmodules: method test_get_submodules_with_submodules (line 149) | async def test_get_submodules_with_submodules(self): method test_get_submodules_with_no_modules_directory (line 229) | async def test_get_submodules_with_no_modules_directory(self): method test_get_submodules_with_rate_limit (line 252) | async def test_get_submodules_with_rate_limit(self): method test_get_submodules_with_exception (line 275) | async def test_get_submodules_with_exception(self): class TestGetVariablesTf (line 286) | class TestGetVariablesTf: method test_get_variables_tf_with_variables (line 290) | async def test_get_variables_tf_with_variables(self): method test_get_variables_tf_with_no_variables_tf (line 359) | async def test_get_variables_tf_with_no_variables_tf(self): method test_get_variables_tf_with_master_branch_fallback (line 399) | async def test_get_variables_tf_with_master_branch_fallback(self): method test_get_variables_tf_with_exception (line 468) | async def test_get_variables_tf_with_exception(self): FILE: src/timestream-for-influxdb-mcp-server/awslabs/timestream_for_influxdb_mcp_server/server.py function get_timestream_influxdb_client (line 247) | def get_timestream_influxdb_client(): function resolve_influxdb_config (line 268) | def resolve_influxdb_config( function get_influxdb_client (line 308) | def get_influxdb_client(url, token, org=None, timeout=10000, verify_ssl:... function create_db_cluster (line 347) | async def create_db_cluster( function create_db_instance (line 432) | async def create_db_instance( function list_db_instances_for_cluster (line 512) | async def list_db_instances_for_cluster( function list_db_instances (line 542) | async def list_db_instances( function list_db_clusters (line 570) | async def list_db_clusters( function get_db_parameter_group (line 601) | async def get_db_parameter_group( function get_db_instance (line 625) | async def get_db_instance( function get_db_cluster (line 649) | async def get_db_cluster( function delete_db_instance (line 673) | async def delete_db_instance( function delete_db_cluster (line 703) | async def delete_db_cluster( function list_db_parameter_groups (line 732) | async def list_db_parameter_groups( function list_tags_for_resource (line 760) | async def list_tags_for_resource( function tag_resource (line 784) | async def tag_resource( function untag_resource (line 818) | async def untag_resource( function update_db_cluster (line 846) | async def update_db_cluster( function update_db_instance (line 897) | async def update_db_instance( function list_db_instances_by_status (line 955) | async def list_db_instances_by_status( function list_db_clusters_by_status (line 1016) | async def list_db_clusters_by_status( function create_db_parameter_group (line 1077) | async def create_db_parameter_group( function influxdb_write_points (line 1119) | async def influxdb_write_points( function influxdb_write_line_protocol (line 1204) | async def influxdb_write_line_protocol( function influxdb_query (line 1260) | async def influxdb_query( function influxdb_list_buckets (line 1325) | async def influxdb_list_buckets( function influxdb_create_bucket (line 1369) | async def influxdb_create_bucket( function influxdb_list_orgs (line 1439) | async def influxdb_list_orgs( function influxdb_create_org (line 1479) | async def influxdb_create_org( function main (line 1521) | def main(): FILE: src/timestream-for-influxdb-mcp-server/tests/test_init.py class TestInit (line 21) | class TestInit: method test_version (line 24) | def test_version(self): method test_module_reload (line 41) | def test_module_reload(self): FILE: src/timestream-for-influxdb-mcp-server/tests/test_main.py class TestMain (line 21) | class TestMain: method test_main_default (line 26) | def test_main_default(self, mock_run): method test_module_execution (line 35) | def test_module_execution(self): FILE: src/timestream-for-influxdb-mcp-server/tests/test_server.py class TestClientCreation (line 52) | class TestClientCreation: method test_get_timestream_influxdb_client_happy_path (line 56) | def test_get_timestream_influxdb_client_happy_path(self, mock_boto3): method test_get_timestream_influxdb_client_exception_path (line 76) | def test_get_timestream_influxdb_client_exception_path(self, mock_boto3): method test_get_influxdb_client_happy_path (line 88) | def test_get_influxdb_client_happy_path(self, mock_influxdb_client): method test_get_influxdb_client_exception_path (line 109) | def test_get_influxdb_client_exception_path(self, mock_influxdb_client): method test_get_influxdb_client_missing_token (line 124) | def test_get_influxdb_client_missing_token(self): method test_get_timestream_influxdb_client_with_profile (line 133) | def test_get_timestream_influxdb_client_with_profile(self, mock_boto3): class TestDbClusterOperations (line 152) | class TestDbClusterOperations: method test_create_db_cluster_happy_path (line 157) | async def test_create_db_cluster_happy_path(self, mock_get_client): method test_create_db_cluster_read_only_mode (line 217) | async def test_create_db_cluster_read_only_mode(self): method test_create_db_cluster_exception_path (line 244) | async def test_create_db_cluster_exception_path(self, mock_get_client): method test_get_db_cluster_happy_path (line 283) | async def test_get_db_cluster_happy_path(self, mock_get_client): method test_get_db_cluster_exception_path (line 304) | async def test_get_db_cluster_exception_path(self, mock_get_client): method test_delete_db_cluster_happy_path (line 324) | async def test_delete_db_cluster_happy_path(self, mock_get_client): method test_delete_db_cluster_read_only_mode (line 343) | async def test_delete_db_cluster_read_only_mode(self): method test_delete_db_cluster_exception_path (line 357) | async def test_delete_db_cluster_exception_path(self, mock_get_client): method test_list_db_clusters_happy_path (line 382) | async def test_list_db_clusters_happy_path(self, mock_get_client): method test_list_db_clusters_exception_path (line 405) | async def test_list_db_clusters_exception_path(self, mock_get_client): method test_update_db_cluster_happy_path (line 430) | async def test_update_db_cluster_happy_path(self, mock_get_client): method test_update_db_cluster_read_only_mode (line 471) | async def test_update_db_cluster_read_only_mode(self): method test_update_db_cluster_exception_path (line 492) | async def test_update_db_cluster_exception_path(self, mock_get_client): method test_list_db_clusters_by_status_happy_path (line 524) | async def test_list_db_clusters_by_status_happy_path(self, mock_get_cl... method test_list_db_clusters_by_status_exception_path (line 561) | async def test_list_db_clusters_by_status_exception_path(self, mock_ge... method test_create_db_cluster_client_exception (line 586) | async def test_create_db_cluster_client_exception(self, mock_get_client): method test_create_db_cluster_with_all_optional_params (line 608) | async def test_create_db_cluster_with_all_optional_params(self, mock_g... method test_update_db_cluster_with_log_delivery_config (line 652) | async def test_update_db_cluster_with_log_delivery_config(self, mock_g... class TestDbInstanceOperations (line 675) | class TestDbInstanceOperations: method test_create_db_instance_happy_path (line 680) | async def test_create_db_instance_happy_path(self, mock_get_client): method test_create_db_instance_read_only_mode (line 740) | async def test_create_db_instance_read_only_mode(self): method test_create_db_instance_exception_path (line 768) | async def test_create_db_instance_exception_path(self, mock_create): method test_get_db_instance_happy_path (line 805) | async def test_get_db_instance_happy_path(self, mock_get_client): method test_get_db_instance_exception_path (line 826) | async def test_get_db_instance_exception_path(self, mock_get_client): method test_delete_db_instance_happy_path (line 846) | async def test_delete_db_instance_happy_path(self, mock_get_client): method test_delete_db_instance_read_only_mode (line 865) | async def test_delete_db_instance_read_only_mode(self): method test_delete_db_instance_exception_path (line 878) | async def test_delete_db_instance_exception_path(self, mock_get_client): method test_list_db_instances_happy_path (line 903) | async def test_list_db_instances_happy_path(self, mock_get_client): method test_list_db_instances_exception_path (line 926) | async def test_list_db_instances_exception_path(self, mock_get_client): method test_list_db_instances_for_cluster_happy_path (line 951) | async def test_list_db_instances_for_cluster_happy_path(self, mock_get... method test_list_db_instances_for_cluster_exception_path (line 973) | async def test_list_db_instances_for_cluster_exception_path(self, mock... method test_update_db_instance_happy_path (line 993) | async def test_update_db_instance_happy_path(self, mock_get_client): method test_update_db_instance_read_only_mode (line 1036) | async def test_update_db_instance_read_only_mode(self): method test_update_db_instance_exception_path (line 1054) | async def test_update_db_instance_exception_path(self, mock_get_client): method test_list_db_instances_by_status_happy_path (line 1084) | async def test_list_db_instances_by_status_happy_path(self, mock_get_c... method test_list_db_instances_by_status_exception_path (line 1121) | async def test_list_db_instances_by_status_exception_path(self, mock_g... method test_create_db_instance_client_exception (line 1146) | async def test_create_db_instance_client_exception(self, mock_get_clie... method test_create_db_instance_with_all_optional_params (line 1168) | async def test_create_db_instance_with_all_optional_params(self, mock_... method test_update_db_instance_with_all_optional_params (line 1208) | async def test_update_db_instance_with_all_optional_params(self, mock_... method test_list_db_instances_for_cluster_with_next_token (line 1236) | async def test_list_db_instances_for_cluster_with_next_token(self, moc... class TestParameterGroupOperations (line 1255) | class TestParameterGroupOperations: method test_create_db_parameter_group_happy_path (line 1260) | async def test_create_db_parameter_group_happy_path(self, mock_get_cli... method test_create_db_parameter_group_read_only_mode (line 1303) | async def test_create_db_parameter_group_read_only_mode(self): method test_create_db_parameter_group_exception_path (line 1321) | async def test_create_db_parameter_group_exception_path(self, mock_cre... method test_get_db_parameter_group_happy_path (line 1352) | async def test_get_db_parameter_group_happy_path(self, mock_get_client): method test_get_db_parameter_group_exception_path (line 1377) | async def test_get_db_parameter_group_exception_path(self, mock_get_cl... method test_list_db_parameter_groups_happy_path (line 1402) | async def test_list_db_parameter_groups_happy_path(self, mock_get_clie... method test_list_db_parameter_groups_exception_path (line 1433) | async def test_list_db_parameter_groups_exception_path(self, mock_get_... method test_create_db_parameter_group_client_exception (line 1453) | async def test_create_db_parameter_group_client_exception(self, mock_g... class TestTagOperations (line 1469) | class TestTagOperations: method test_list_tags_for_resource_happy_path (line 1474) | async def test_list_tags_for_resource_happy_path(self, mock_get_client): method test_list_tags_for_resource_exception_path (line 1503) | async def test_list_tags_for_resource_exception_path(self, mock_get_cl... method test_tag_resource_happy_path (line 1525) | async def test_tag_resource_happy_path(self, mock_get_client): method test_tag_resource_read_only_mode (line 1549) | async def test_tag_resource_read_only_mode(self): method test_tag_resource_exception_path (line 1566) | async def test_tag_resource_exception_path(self, mock_get_client): method test_untag_resource_happy_path (line 1589) | async def test_untag_resource_happy_path(self, mock_get_client): method test_untag_resource_read_only_mode (line 1612) | async def test_untag_resource_read_only_mode(self): method test_untag_resource_exception_path (line 1631) | async def test_untag_resource_exception_path(self, mock_get_client): class TestInfluxDBOperations (line 1657) | class TestInfluxDBOperations: method test_influxdb_write_points_happy_path (line 1662) | async def test_influxdb_write_points_happy_path(self, mock_get_client): method test_influxdb_write_points_read_only_mode (line 1704) | async def test_influxdb_write_points_read_only_mode(self): method test_influxdb_write_points_exception_path (line 1740) | async def test_influxdb_write_points_exception_path(self, mock_get_cli... method test_influxdb_write_line_protocol_happy_path (line 1783) | async def test_influxdb_write_line_protocol_happy_path(self, mock_get_... method test_influxdb_write_line_protocol_read_only_mode (line 1817) | async def test_influxdb_write_line_protocol_read_only_mode(self): method test_influxdb_write_line_protocol_exception_path (line 1846) | async def test_influxdb_write_line_protocol_exception_path(self, mock_... method test_influxdb_query_happy_path (line 1882) | async def test_influxdb_query_happy_path(self, mock_get_client): method test_influxdb_query_exception_path (line 1931) | async def test_influxdb_query_exception_path(self, mock_get_client): method test_influxdb_list_buckets_happy_path (line 1956) | async def test_influxdb_list_buckets_happy_path(self, mock_get_client): method test_influxdb_list_buckets_exception_path (line 1996) | async def test_influxdb_list_buckets_exception_path(self, mock_get_cli... method test_influxdb_create_bucket_happy_path (line 2018) | async def test_influxdb_create_bucket_happy_path(self, mock_get_client): method test_influxdb_create_bucket_read_only_mode (line 2068) | async def test_influxdb_create_bucket_read_only_mode(self): method test_influxdb_create_bucket_exception_path (line 2089) | async def test_influxdb_create_bucket_exception_path(self, mock_get_cl... method test_influxdb_list_orgs_happy_path (line 2120) | async def test_influxdb_list_orgs_happy_path(self, mock_get_client): method test_influxdb_list_orgs_exception_path (line 2155) | async def test_influxdb_list_orgs_exception_path(self, mock_get_client): method test_influxdb_create_org_happy_path (line 2176) | async def test_influxdb_create_org_happy_path(self, mock_get_client): method test_influxdb_create_org_read_only_mode (line 2212) | async def test_influxdb_create_org_read_only_mode(self): method test_influxdb_create_org_exception_path (line 2230) | async def test_influxdb_create_org_exception_path(self, mock_get_client): method test_influxdb_write_points_with_time (line 2257) | async def test_influxdb_write_points_with_time(self, mock_get_client): class TestResolveInfluxDBConfig (line 2287) | class TestResolveInfluxDBConfig: method test_resolve_influxdb_config_missing_url (line 2290) | def test_resolve_influxdb_config_missing_url(self): method test_resolve_influxdb_config_missing_token (line 2299) | def test_resolve_influxdb_config_missing_token(self): method test_resolve_influxdb_config_missing_org_when_required (line 2308) | def test_resolve_influxdb_config_missing_org_when_required(self): method test_resolve_influxdb_config_org_not_required (line 2319) | def test_resolve_influxdb_config_org_not_required(self): class TestInfluxDBAsyncWriteMode (line 2332) | class TestInfluxDBAsyncWriteMode: method test_influxdb_write_points_async_mode (line 2337) | async def test_influxdb_write_points_async_mode(self, mock_get_client): method test_influxdb_write_line_protocol_async_mode (line 2361) | async def test_influxdb_write_line_protocol_async_mode(self, mock_get_... class TestInfluxDBCreateBucketWithRetention (line 2384) | class TestInfluxDBCreateBucketWithRetention: method test_influxdb_create_bucket_with_retention (line 2389) | async def test_influxdb_create_bucket_with_retention(self, mock_get_cl... method test_influxdb_create_bucket_org_not_found (line 2431) | async def test_influxdb_create_bucket_org_not_found(self, mock_get_cli... FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/common/config.py function generate_valkey_uri (line 39) | def generate_valkey_uri(): FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/common/connection.py class ValkeyConnectionManager (line 26) | class ValkeyConnectionManager: method get_connection (line 32) | def get_connection(cls, decode_responses: bool = True) -> Union[Valkey... FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/context.py class Context (line 18) | class Context: method initialize (line 24) | def initialize(cls, readonly: bool = False): method readonly_mode (line 33) | def readonly_mode(cls) -> bool: FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/main.py function health_check (line 40) | async def health_check(request): class ValkeyMCPServer (line 48) | class ValkeyMCPServer: method __init__ (line 51) | def __init__(self): method run (line 54) | def run(self): function main (line 59) | def main(): FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/tools/bitmap.py function bitmap_set (line 25) | async def bitmap_set(key: str, offset: int, value: int) -> str: function bitmap_get (line 54) | async def bitmap_get(key: str, offset: int) -> str: function bitmap_count (line 76) | async def bitmap_count(key: str, start: Optional[int] = None, end: Optio... function bitmap_pos (line 106) | async def bitmap_pos( FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/tools/hash.py function hash_set (line 25) | async def hash_set(key: str, field: str, value: Any) -> str: function hash_set_multiple (line 49) | async def hash_set_multiple(key: str, mapping: Dict[str, Any]) -> str: function hash_set_if_not_exists (line 72) | async def hash_set_if_not_exists(key: str, field: str, value: Any) -> str: function hash_get (line 98) | async def hash_get(key: str, field: str) -> str: function hash_get_all (line 119) | async def hash_get_all(key: str) -> str: function hash_exists (line 139) | async def hash_exists(key: str, field: str) -> str: function hash_increment (line 158) | async def hash_increment(key: str, field: str, amount: Union[int, float]... function hash_keys (line 185) | async def hash_keys(key: str) -> str: function hash_length (line 205) | async def hash_length(key: str) -> str: function hash_random_field (line 223) | async def hash_random_field(key: str, count: Optional[int] = None) -> str: function hash_random_field_with_values (line 247) | async def hash_random_field_with_values(key: str, count: int) -> str: function hash_strlen (line 268) | async def hash_strlen(key: str, field: str) -> str: function hash_values (line 287) | async def hash_values(key: str) -> str: FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/tools/hyperloglog.py function hll_add (line 24) | async def hll_add(key: str, element: str) -> str: function hll_count (line 52) | async def hll_count(key: str) -> str: FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/tools/json.py function json_set (line 25) | async def json_set(key: str, path: str, value: Any, nx: bool = False, xx... function json_get (line 53) | async def json_get( function json_type (line 91) | async def json_type(key: str, path: Optional[str] = None) -> str: function json_numincrby (line 112) | async def json_numincrby(key: str, path: str, value: Union[int, float]) ... function json_nummultby (line 138) | async def json_nummultby(key: str, path: str, value: Union[int, float]) ... function json_strappend (line 164) | async def json_strappend(key: str, path: str, value: str) -> str: function json_strlen (line 188) | async def json_strlen(key: str, path: str) -> str: function json_arrappend (line 209) | async def json_arrappend(key: str, path: str, *values: Any) -> str: function json_arrindex (line 236) | async def json_arrindex( function json_arrlen (line 271) | async def json_arrlen(key: str, path: str) -> str: function json_arrpop (line 292) | async def json_arrpop(key: str, path: str, index: int = -1) -> str: function json_arrtrim (line 318) | async def json_arrtrim(key: str, path: str, start: int, stop: int) -> str: function json_objkeys (line 343) | async def json_objkeys(key: str, path: str) -> str: function json_objlen (line 368) | async def json_objlen(key: str, path: str) -> str: function json_toggle (line 389) | async def json_toggle(key: str, path: str) -> str: function json_clear (line 414) | async def json_clear(key: str, path: str) -> str: function json_del (line 439) | async def json_del(key: str, path: str) -> str: FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/tools/list.py function list_append (line 26) | async def list_append(key: str, value: Any) -> str: function list_prepend (line 49) | async def list_prepend(key: str, value: Any) -> str: function list_append_multiple (line 72) | async def list_append_multiple(key: str, values: PyList[Any]) -> str: function list_prepend_multiple (line 95) | async def list_prepend_multiple(key: str, values: PyList[Any]) -> str: function list_get (line 118) | async def list_get(key: str, index: int) -> str: function list_set (line 139) | async def list_set(key: str, index: int, value: Any) -> str: function list_range (line 163) | async def list_range(key: str, start: int = 0, stop: int = -1) -> str: function list_trim (line 185) | async def list_trim(key: str, start: int, stop: int) -> str: function list_length (line 209) | async def list_length(key: str) -> str: function list_pop_left (line 227) | async def list_pop_left(key: str, count: Optional[int] = None) -> str: function list_pop_right (line 255) | async def list_pop_right(key: str, count: Optional[int] = None) -> str: function list_position (line 283) | async def list_position( function list_move (line 321) | async def list_move( function list_insert_before (line 356) | async def list_insert_before(key: str, pivot: Any, value: Any) -> str: function list_insert_after (line 382) | async def list_insert_after(key: str, pivot: Any, value: Any) -> str: function list_remove (line 408) | async def list_remove(key: str, value: Any, count: int = 0) -> str: FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/tools/misc.py function delete (line 23) | async def delete(key: str) -> str: function type (line 45) | async def type(key: str) -> Dict[str, Any]: function expire (line 65) | async def expire(name: str, expire_seconds: int) -> str: function rename (line 92) | async def rename(old_key: str, new_key: str) -> Dict[str, Any]: FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/tools/server_management.py function dbsize (line 21) | async def dbsize() -> str: function info (line 32) | async def info(section: str = 'default') -> str: function client_list (line 50) | async def client_list() -> str: FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/tools/set.py function set_add (line 25) | async def set_add(key: str, member: str) -> str: function set_remove (line 48) | async def set_remove(key: str, member: str) -> str: function set_pop (line 71) | async def set_pop(key: str, count: Optional[int] = None) -> str: function set_move (line 99) | async def set_move(source: str, destination: str, member: Any) -> str: function set_cardinality (line 125) | async def set_cardinality(key: str) -> str: function set_members (line 143) | async def set_members(key: str) -> str: function set_random_member (line 163) | async def set_random_member(key: str, count: Optional[int] = None) -> str: function set_contains (line 187) | async def set_contains(key: str, member: Any) -> str: FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/tools/sorted_set.py function sorted_set_add (line 25) | async def sorted_set_add(key: str, mapping: Dict[Any, float]) -> str: function sorted_set_add_incr (line 48) | async def sorted_set_add_incr(key: str, member: Any, score: float) -> str: function sorted_set_remove (line 72) | async def sorted_set_remove(key: str, *members: Any) -> str: function sorted_set_remove_by_rank (line 95) | async def sorted_set_remove_by_rank(key: str, start: int, stop: int) -> ... function sorted_set_remove_by_score (line 119) | async def sorted_set_remove_by_score(key: str, min_score: float, max_sco... function sorted_set_remove_by_lex (line 143) | async def sorted_set_remove_by_lex(key: str, min_lex: str, max_lex: str)... function sorted_set_cardinality (line 167) | async def sorted_set_cardinality( function sorted_set_score (line 192) | async def sorted_set_score(key: str, member: Any) -> str: function sorted_set_rank (line 213) | async def sorted_set_rank(key: str, member: Any, reverse: bool = False) ... function sorted_set_range (line 238) | async def sorted_set_range( function sorted_set_range_by_score (line 267) | async def sorted_set_range_by_score( function sorted_set_range_by_lex (line 308) | async def sorted_set_range_by_lex( function sorted_set_popmin (line 343) | async def sorted_set_popmin(key: str, count: Optional[int] = None) -> str: function sorted_set_popmax (line 371) | async def sorted_set_popmax(key: str, count: Optional[int] = None) -> str: FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/tools/stream.py function stream_add (line 25) | async def stream_add( function stream_delete (line 64) | async def stream_delete(key: str, id: str) -> str: function stream_trim (line 87) | async def stream_trim(key: str, maxlen: int, approximate: bool = True) -... function stream_length (line 111) | async def stream_length(key: str) -> str: function stream_range (line 129) | async def stream_range( function stream_read (line 159) | async def stream_read( function stream_group_create (line 185) | async def stream_group_create( function stream_group_destroy (line 212) | async def stream_group_destroy(key: str, group_name: str) -> str: function stream_group_set_id (line 237) | async def stream_group_set_id(key: str, group_name: str, id: str) -> str: function stream_group_delete_consumer (line 261) | async def stream_group_delete_consumer(key: str, group_name: str, consum... function stream_read_group (line 285) | async def stream_read_group( function stream_info (line 324) | async def stream_info(key: str) -> str: function stream_info_groups (line 342) | async def stream_info_groups(key: str) -> str: function stream_info_consumers (line 362) | async def stream_info_consumers(key: str, group_name: str) -> str: FILE: src/valkey-mcp-server/awslabs/valkey_mcp_server/tools/string.py function string_set (line 25) | async def string_set( function string_get (line 63) | async def string_get(key: str) -> str: function string_append (line 83) | async def string_append(key: str, value: str) -> str: function string_get_range (line 106) | async def string_get_range(key: str, start: int, end: int) -> str: function string_get_set (line 128) | async def string_get_set(key: str, value: Any) -> str: function string_increment (line 153) | async def string_increment(key: str, amount: int = 1) -> str: function string_increment_float (line 176) | async def string_increment_float(key: str, amount: float) -> str: function string_decrement (line 199) | async def string_decrement(key: str, amount: int = 1) -> str: function string_length (line 222) | async def string_length(key: str) -> str: function string_set_range (line 240) | async def string_set_range(key: str, offset: int, value: str) -> str: FILE: src/valkey-mcp-server/tests/test_bitmap.py class TestBitmap (line 28) | class TestBitmap: method mock_connection (line 32) | def mock_connection(self): method mock_context (line 42) | def mock_context(self): method test_bitmap_set (line 49) | async def test_bitmap_set(self, mock_connection, mock_context): method test_bitmap_get (line 85) | async def test_bitmap_get(self, mock_connection): method test_bitmap_count (line 102) | async def test_bitmap_count(self, mock_connection): method test_bitmap_pos (line 127) | async def test_bitmap_pos(self, mock_connection): FILE: src/valkey-mcp-server/tests/test_config.py class TestConfig (line 25) | class TestConfig: method test_default_config (line 28) | def test_default_config(self): method test_environment_config (line 58) | def test_environment_config(self): method test_generate_valkey_uri_basic (line 96) | def test_generate_valkey_uri_basic(self): method test_generate_valkey_uri_with_auth (line 107) | def test_generate_valkey_uri_with_auth(self): method test_generate_valkey_uri_with_ssl (line 144) | def test_generate_valkey_uri_with_ssl(self): method test_generate_valkey_uri_with_partial_ssl (line 173) | def test_generate_valkey_uri_with_partial_ssl(self): method test_generate_valkey_uri_with_special_chars (line 202) | def test_generate_valkey_uri_with_special_chars(self): FILE: src/valkey-mcp-server/tests/test_connection.py class TestValkeyConnectionManager (line 8) | class TestValkeyConnectionManager(unittest.TestCase): method setUp (line 11) | def setUp(self): method test_basic_connection (line 15) | def test_basic_connection(self): method test_cluster_mode_connection (line 56) | def test_cluster_mode_connection(self): method test_ssl_connection (line 97) | def test_ssl_connection(self): method test_connection_reuse (line 137) | def test_connection_reuse(self): method test_authentication_error (line 165) | def test_authentication_error(self): method test_connection_error (line 185) | def test_connection_error(self): method test_timeout_error (line 205) | def test_timeout_error(self): method test_response_error (line 225) | def test_response_error(self): method test_cluster_error (line 245) | def test_cluster_error(self): method test_valkey_error (line 265) | def test_valkey_error(self): method test_unexpected_error (line 285) | def test_unexpected_error(self): FILE: src/valkey-mcp-server/tests/test_hash.py class TestHash (line 37) | class TestHash: method mock_connection (line 41) | def mock_connection(self): method mock_context (line 49) | def mock_context(self): method test_hash_set (line 56) | async def test_hash_set(self, mock_connection, mock_context): method test_hash_set_multiple (line 83) | async def test_hash_set_multiple(self, mock_connection, mock_context): method test_hash_set_if_not_exists (line 110) | async def test_hash_set_if_not_exists(self, mock_connection, mock_cont... method test_hash_get (line 143) | async def test_hash_get(self, mock_connection): method test_hash_get_all (line 166) | async def test_hash_get_all(self, mock_connection): method test_hash_exists (line 188) | async def test_hash_exists(self, mock_connection): method test_hash_increment (line 211) | async def test_hash_increment(self, mock_connection, mock_context): method test_hash_keys (line 244) | async def test_hash_keys(self, mock_connection): method test_hash_length (line 266) | async def test_hash_length(self, mock_connection): method test_hash_random_field (line 283) | async def test_hash_random_field(self, mock_connection): method test_hash_random_field_with_values (line 311) | async def test_hash_random_field_with_values(self, mock_connection): method test_hash_strlen (line 334) | async def test_hash_strlen(self, mock_connection): method test_hash_values (line 352) | async def test_hash_values(self, mock_connection): FILE: src/valkey-mcp-server/tests/test_hyperloglog.py class TestHyperLogLog (line 26) | class TestHyperLogLog: method mock_connection (line 30) | def mock_connection(self): method mock_context (line 40) | def mock_context(self): method test_hll_add (line 47) | async def test_hll_add(self, mock_connection, mock_context): method test_hll_count (line 83) | async def test_hll_count(self, mock_connection): FILE: src/valkey-mcp-server/tests/test_init.py class TestInit (line 20) | class TestInit: method test_version (line 23) | def test_version(self): method test_module_reload (line 40) | def test_module_reload(self): FILE: src/valkey-mcp-server/tests/test_json.py class TestJson (line 34) | class TestJson: method mock_connection (line 38) | def mock_connection(self): method mock_context (line 48) | def mock_context(self): method test_json_set (line 55) | async def test_json_set(self, mock_connection, mock_context): method test_json_numincrby (line 91) | async def test_json_numincrby(self, mock_connection, mock_context): method test_json_nummultby (line 122) | async def test_json_nummultby(self, mock_connection, mock_context): method test_json_strappend (line 153) | async def test_json_strappend(self, mock_connection, mock_context): method test_json_arrappend (line 184) | async def test_json_arrappend(self, mock_connection, mock_context): method test_json_arrpop (line 215) | async def test_json_arrpop(self, mock_connection, mock_context): method test_json_arrtrim (line 246) | async def test_json_arrtrim(self, mock_connection, mock_context): method test_json_toggle (line 278) | async def test_json_toggle(self, mock_connection, mock_context): method test_json_clear (line 308) | async def test_json_clear(self, mock_connection, mock_context): method test_json_del (line 338) | async def test_json_del(self, mock_connection, mock_context): FILE: src/valkey-mcp-server/tests/test_json_additional.py class TestJsonAdditional (line 31) | class TestJsonAdditional: method mock_connection (line 35) | def mock_connection(self): method test_json_get (line 45) | async def test_json_get(self, mock_connection): method test_json_type (line 82) | async def test_json_type(self, mock_connection): method test_json_strlen (line 114) | async def test_json_strlen(self, mock_connection): method test_json_arrindex (line 140) | async def test_json_arrindex(self, mock_connection): method test_json_arrlen (line 182) | async def test_json_arrlen(self, mock_connection): method test_json_objkeys (line 208) | async def test_json_objkeys(self, mock_connection): method test_json_objlen (line 244) | async def test_json_objlen(self, mock_connection): FILE: src/valkey-mcp-server/tests/test_json_readonly.py class TestJsonReadonly (line 33) | class TestJsonReadonly: method mock_connection (line 37) | def mock_connection(self): method mock_context (line 47) | def mock_context(self): method test_json_set_readonly (line 54) | async def test_json_set_readonly(self, mock_connection, mock_context): method test_json_numincrby_readonly (line 68) | async def test_json_numincrby_readonly(self, mock_connection, mock_con... method test_json_nummultby_readonly (line 82) | async def test_json_nummultby_readonly(self, mock_connection, mock_con... method test_json_strappend_readonly (line 96) | async def test_json_strappend_readonly(self, mock_connection, mock_con... method test_json_arrappend_readonly (line 110) | async def test_json_arrappend_readonly(self, mock_connection, mock_con... method test_json_arrpop_readonly (line 124) | async def test_json_arrpop_readonly(self, mock_connection, mock_context): method test_json_arrtrim_readonly (line 138) | async def test_json_arrtrim_readonly(self, mock_connection, mock_conte... method test_json_toggle_readonly (line 153) | async def test_json_toggle_readonly(self, mock_connection, mock_context): method test_json_clear_readonly (line 166) | async def test_json_clear_readonly(self, mock_connection, mock_context): method test_json_del_readonly (line 179) | async def test_json_del_readonly(self, mock_connection, mock_context): FILE: src/valkey-mcp-server/tests/test_list.py class TestList (line 39) | class TestList: method test_list_append (line 43) | async def test_list_append(self, mock_connection): method test_list_append_multiple (line 61) | async def test_list_append_multiple(self, mock_connection): method test_list_get (line 79) | async def test_list_get(self, mock_connection): method test_list_set (line 102) | async def test_list_set(self, mock_connection): method test_list_range (line 120) | async def test_list_range(self, mock_connection): method test_list_move (line 144) | async def test_list_move(self, mock_connection): method mock_connection (line 175) | def mock_connection(self): method test_list_prepend_multiple (line 183) | async def test_list_prepend_multiple(self, mock_connection): method test_list_trim (line 201) | async def test_list_trim(self, mock_connection): method test_list_length (line 219) | async def test_list_length(self, mock_connection): method test_list_pop_left_with_count (line 236) | async def test_list_pop_left_with_count(self, mock_connection): method test_list_pop_right (line 248) | async def test_list_pop_right(self, mock_connection): method test_list_position_with_options (line 277) | async def test_list_position_with_options(self, mock_connection): method test_list_insert_before (line 312) | async def test_list_insert_before(self, mock_connection): method test_list_insert_after (line 336) | async def test_list_insert_after(self, mock_connection): method test_list_remove (line 360) | async def test_list_remove(self, mock_connection): FILE: src/valkey-mcp-server/tests/test_list_additional.py class TestListAdditional (line 26) | class TestListAdditional: method mock_connection (line 30) | def mock_connection(self): method mock_context (line 38) | def mock_context(self): method test_list_prepend (line 45) | async def test_list_prepend(self, mock_connection, mock_context): method test_list_pop_left (line 72) | async def test_list_pop_left(self, mock_connection, mock_context): FILE: src/valkey-mcp-server/tests/test_list_readonly.py class TestListReadonly (line 35) | class TestListReadonly: method mock_connection (line 39) | def mock_connection(self): method mock_context (line 47) | def mock_context(self): method test_list_append_readonly (line 54) | async def test_list_append_readonly(self, mock_connection, mock_context): method test_list_prepend_readonly (line 64) | async def test_list_prepend_readonly(self, mock_connection, mock_conte... method test_list_append_multiple_readonly (line 74) | async def test_list_append_multiple_readonly(self, mock_connection, mo... method test_list_prepend_multiple_readonly (line 84) | async def test_list_prepend_multiple_readonly(self, mock_connection, m... method test_list_set_readonly (line 94) | async def test_list_set_readonly(self, mock_connection, mock_context): method test_list_trim_readonly (line 105) | async def test_list_trim_readonly(self, mock_connection, mock_context): method test_list_pop_left_readonly (line 116) | async def test_list_pop_left_readonly(self, mock_connection, mock_cont... method test_list_pop_right_readonly (line 125) | async def test_list_pop_right_readonly(self, mock_connection, mock_con... method test_list_move_readonly (line 134) | async def test_list_move_readonly(self, mock_connection, mock_context): method test_list_insert_before_readonly (line 144) | async def test_list_insert_before_readonly(self, mock_connection, mock... method test_list_insert_after_readonly (line 155) | async def test_list_insert_after_readonly(self, mock_connection, mock_... method test_list_remove_readonly (line 166) | async def test_list_remove_readonly(self, mock_connection, mock_context): FILE: src/valkey-mcp-server/tests/test_main.py class TestMain (line 20) | class TestMain: method test_main_default (line 25) | def test_main_default(self, mock_run): method test_module_execution (line 33) | def test_module_execution(self): FILE: src/valkey-mcp-server/tests/test_misc.py class TestMisc (line 28) | class TestMisc: method mock_connection (line 32) | def mock_connection(self): method mock_context (line 40) | def mock_context(self): method test_delete (line 47) | async def test_delete(self, mock_connection, mock_context): method test_type (line 78) | async def test_type(self, mock_connection): method test_expire (line 98) | async def test_expire(self, mock_connection, mock_context): method test_rename (line 130) | async def test_rename(self, mock_connection, mock_context): FILE: src/valkey-mcp-server/tests/test_server_management.py function test_dbsize_success (line 8) | async def test_dbsize_success(): function test_dbsize_error (line 23) | async def test_dbsize_error(): function test_info_success (line 38) | async def test_info_success(): function test_info_error (line 59) | async def test_info_error(): function test_client_list_success (line 74) | async def test_client_list_success(): function test_client_list_error (line 93) | async def test_client_list_error(): FILE: src/valkey-mcp-server/tests/test_set.py class TestSet (line 32) | class TestSet: method mock_connection (line 36) | def mock_connection(self): method test_set_add (line 44) | async def test_set_add(self, mock_connection): method test_set_remove (line 62) | async def test_set_remove(self, mock_connection): method test_set_pop (line 80) | async def test_set_pop(self, mock_connection): method test_set_move (line 102) | async def test_set_move(self, mock_connection): method test_set_cardinality (line 126) | async def test_set_cardinality(self, mock_connection): method test_set_members (line 143) | async def test_set_members(self, mock_connection): method test_set_random_member (line 165) | async def test_set_random_member(self, mock_connection): method test_set_contains (line 187) | async def test_set_contains(self, mock_connection): FILE: src/valkey-mcp-server/tests/test_set_readonly.py class TestSetReadonly (line 27) | class TestSetReadonly: method mock_connection (line 31) | def mock_connection(self): method mock_context (line 39) | def mock_context(self): method test_set_add_readonly (line 46) | async def test_set_add_readonly(self, mock_connection, mock_context): method test_set_remove_readonly (line 56) | async def test_set_remove_readonly(self, mock_connection, mock_context): method test_set_pop_readonly (line 66) | async def test_set_pop_readonly(self, mock_connection, mock_context): method test_set_move_readonly (line 80) | async def test_set_move_readonly(self, mock_connection, mock_context): FILE: src/valkey-mcp-server/tests/test_sorted_set.py class TestSortedSet (line 30) | class TestSortedSet: method mock_connection (line 34) | def mock_connection(self): method test_sorted_set_add (line 44) | async def test_sorted_set_add(self, mock_connection): method test_sorted_set_add_incr (line 62) | async def test_sorted_set_add_incr(self, mock_connection): method test_sorted_set_remove (line 81) | async def test_sorted_set_remove(self, mock_connection): method test_sorted_set_score (line 99) | async def test_sorted_set_score(self, mock_connection): method test_sorted_set_range (line 122) | async def test_sorted_set_range(self, mock_connection): method test_sorted_set_popmin (line 147) | async def test_sorted_set_popmin(self, mock_connection): FILE: src/valkey-mcp-server/tests/test_sorted_set_additional.py class TestSortedSetAdditional (line 32) | class TestSortedSetAdditional: method mock_connection (line 36) | def mock_connection(self): method mock_context (line 46) | def mock_context(self): method test_sorted_set_remove_by_rank (line 53) | async def test_sorted_set_remove_by_rank(self, mock_connection, mock_c... method test_sorted_set_remove_by_score (line 81) | async def test_sorted_set_remove_by_score(self, mock_connection, mock_... method test_sorted_set_remove_by_lex (line 109) | async def test_sorted_set_remove_by_lex(self, mock_connection, mock_co... method test_sorted_set_cardinality (line 137) | async def test_sorted_set_cardinality(self, mock_connection): method test_sorted_set_rank (line 162) | async def test_sorted_set_rank(self, mock_connection): method test_sorted_set_range_by_score (line 191) | async def test_sorted_set_range_by_score(self, mock_connection): method test_sorted_set_range_by_lex (line 245) | async def test_sorted_set_range_by_lex(self, mock_connection): method test_sorted_set_popmax (line 287) | async def test_sorted_set_popmax(self, mock_connection, mock_context): FILE: src/valkey-mcp-server/tests/test_sorted_set_readonly.py class TestSortedSetReadonly (line 31) | class TestSortedSetReadonly: method mock_connection (line 35) | def mock_connection(self): method mock_context (line 45) | def mock_context(self): method test_sorted_set_add_readonly (line 52) | async def test_sorted_set_add_readonly(self, mock_connection, mock_con... method test_sorted_set_add_incr_readonly (line 62) | async def test_sorted_set_add_incr_readonly(self, mock_connection, moc... method test_sorted_set_remove_readonly (line 73) | async def test_sorted_set_remove_readonly(self, mock_connection, mock_... method test_sorted_set_remove_by_rank_readonly (line 83) | async def test_sorted_set_remove_by_rank_readonly(self, mock_connectio... method test_sorted_set_remove_by_score_readonly (line 94) | async def test_sorted_set_remove_by_score_readonly(self, mock_connecti... method test_sorted_set_remove_by_lex_readonly (line 105) | async def test_sorted_set_remove_by_lex_readonly(self, mock_connection... method test_sorted_set_popmin_readonly (line 116) | async def test_sorted_set_popmin_readonly(self, mock_connection, mock_... method test_sorted_set_popmax_readonly (line 125) | async def test_sorted_set_popmax_readonly(self, mock_connection, mock_... FILE: src/valkey-mcp-server/tests/test_stream.py class TestStream (line 34) | class TestStream: method mock_connection (line 38) | def mock_connection(self): method test_stream_add_with_options (line 48) | async def test_stream_add_with_options(self, mock_connection): method test_stream_delete (line 79) | async def test_stream_delete(self, mock_connection): method test_stream_trim_options (line 97) | async def test_stream_trim_options(self, mock_connection): method test_stream_range_options (line 120) | async def test_stream_range_options(self, mock_connection): method test_stream_read_options (line 156) | async def test_stream_read_options(self, mock_connection): method test_stream_group_operations (line 187) | async def test_stream_group_operations(self, mock_connection): method test_stream_read_group_options (line 230) | async def test_stream_read_group_options(self, mock_connection): FILE: src/valkey-mcp-server/tests/test_stream_additional.py class TestStreamAdditional (line 28) | class TestStreamAdditional: method mock_connection (line 32) | def mock_connection(self): method mock_context (line 42) | def mock_context(self): method test_stream_length (line 49) | async def test_stream_length(self, mock_connection): method test_stream_info (line 66) | async def test_stream_info(self, mock_connection): method test_stream_info_groups (line 91) | async def test_stream_info_groups(self, mock_connection): method test_stream_info_consumers (line 127) | async def test_stream_info_consumers(self, mock_connection): FILE: src/valkey-mcp-server/tests/test_stream_readonly.py class TestStreamReadonly (line 31) | class TestStreamReadonly: method mock_connection (line 35) | def mock_connection(self): method mock_context (line 45) | def mock_context(self): method test_stream_add_readonly (line 52) | async def test_stream_add_readonly(self, mock_connection, mock_context): method test_stream_delete_readonly (line 62) | async def test_stream_delete_readonly(self, mock_connection, mock_cont... method test_stream_trim_readonly (line 72) | async def test_stream_trim_readonly(self, mock_connection, mock_context): method test_stream_group_create_readonly (line 82) | async def test_stream_group_create_readonly(self, mock_connection, moc... method test_stream_group_destroy_readonly (line 92) | async def test_stream_group_destroy_readonly(self, mock_connection, mo... method test_stream_group_set_id_readonly (line 102) | async def test_stream_group_set_id_readonly(self, mock_connection, moc... method test_stream_group_delete_consumer_readonly (line 113) | async def test_stream_group_delete_consumer_readonly(self, mock_connec... method test_stream_read_group_readonly (line 124) | async def test_stream_read_group_readonly(self, mock_connection, mock_... FILE: src/valkey-mcp-server/tests/test_string.py class TestString (line 33) | class TestString: method mock_connection (line 37) | def mock_connection(self): method mock_context (line 47) | def mock_context(self): method test_string_set (line 54) | async def test_string_set(self, mock_connection, mock_context): method test_string_get (line 93) | async def test_string_get(self, mock_connection): method test_string_append (line 115) | async def test_string_append(self, mock_connection, mock_context): method test_string_increment (line 142) | async def test_string_increment(self, mock_connection, mock_context): method test_string_increment_float (line 169) | async def test_string_increment_float(self, mock_connection, mock_cont... method test_string_decrement (line 196) | async def test_string_decrement(self, mock_connection, mock_context): method test_string_length (line 223) | async def test_string_length(self, mock_connection, mock_context): method test_string_get_set (line 241) | async def test_string_get_set(self, mock_connection, mock_context): method test_string_set_range (line 273) | async def test_string_set_range(self, mock_connection, mock_context): FILE: src/well-architected-security-mcp-server/awslabs/well_architected_security_mcp_server/server.py function check_security_services (line 133) | async def check_security_services( function get_security_findings (line 324) | async def get_security_findings( function get_stored_security_context (line 516) | async def get_stored_security_context( function check_storage_encryption_tool (line 569) | async def check_storage_encryption_tool( function list_services_in_region_tool (line 631) | async def list_services_in_region_tool( function check_network_security_tool (line 692) | async def check_network_security_tool( function security_assessment_precheck (line 754) | async def security_assessment_precheck(ctx: Context) -> str: function check_storage_security_prompt (line 851) | async def check_storage_security_prompt(ctx: Context) -> str: function check_network_security_prompt (line 998) | async def check_network_security_prompt(ctx: Context) -> str: function main (line 1146) | def main(): FILE: src/well-architected-security-mcp-server/awslabs/well_architected_security_mcp_server/util/network_security.py function check_network_security (line 35) | async def check_network_security( function _update_results (line 113) | async def _update_results( function generate_recommendations (line 138) | async def generate_recommendations(results: Dict[str, Any]) -> List[str]: function find_network_resources (line 222) | async def find_network_resources( function check_classic_load_balancers (line 332) | async def check_classic_load_balancers( function check_elbv2_load_balancers (line 491) | async def check_elbv2_load_balancers( function check_vpc_endpoints (line 682) | async def check_vpc_endpoints( function check_security_groups (line 798) | async def check_security_groups( function check_api_gateway (line 939) | async def check_api_gateway( function check_cloudfront_distributions (line 1091) | async def check_cloudfront_distributions( FILE: src/well-architected-security-mcp-server/awslabs/well_architected_security_mcp_server/util/prompt_utils.py function load_prompt_templates (line 28) | def load_prompt_templates(file_path: str = "PROMPT_TEMPLATE.md") -> Dict... function get_prompt_template (line 124) | def get_prompt_template(template_name: str) -> Optional[Dict[str, Any]]: function get_all_template_names (line 141) | def get_all_template_names() -> List[str]: function get_template_metadata (line 155) | def get_template_metadata() -> List[Dict[str, str]]: FILE: src/well-architected-security-mcp-server/awslabs/well_architected_security_mcp_server/util/resource_utils.py function list_services_in_region (line 25) | async def list_services_in_region( FILE: src/well-architected-security-mcp-server/awslabs/well_architected_security_mcp_server/util/security_services.py function get_analyzer_findings_count (line 27) | async def get_analyzer_findings_count( function check_access_analyzer (line 48) | async def check_access_analyzer(region: str, session: boto3.Session, ctx... function check_security_hub (line 141) | async def check_security_hub(region: str, session: boto3.Session, ctx: C... function check_guard_duty (line 253) | async def check_guard_duty(region: str, session: boto3.Session, ctx: Con... function check_inspector (line 315) | async def check_inspector(region: str, session: boto3.Session, ctx: Cont... function get_guardduty_findings (line 563) | async def get_guardduty_findings( function get_securityhub_findings (line 708) | async def get_securityhub_findings( function get_inspector_findings (line 799) | async def get_inspector_findings( function get_access_analyzer_findings (line 881) | async def get_access_analyzer_findings( function _clean_datetime_objects (line 972) | def _clean_datetime_objects(obj: Any) -> Any: function _summarize_guardduty_findings (line 991) | def _summarize_guardduty_findings(findings: List[Dict]) -> Dict: function _summarize_securityhub_findings (line 1034) | def _summarize_securityhub_findings(findings: List[Dict]) -> Dict: function _summarize_inspector_findings (line 1081) | def _summarize_inspector_findings(findings: List[Dict]) -> Dict: function _summarize_access_analyzer_findings (line 1126) | def _summarize_access_analyzer_findings(findings: List[Dict]) -> Dict: function check_trusted_advisor (line 1156) | async def check_trusted_advisor(region: str, session: boto3.Session, ctx... function get_trusted_advisor_findings (line 1247) | async def get_trusted_advisor_findings( function _summarize_trusted_advisor_findings (line 1386) | def _summarize_trusted_advisor_findings(findings: List[Dict]) -> Dict: function check_macie (line 1423) | async def check_macie(region: str, session: boto3.Session, ctx: Context)... function get_macie_findings (line 1482) | async def get_macie_findings( function _summarize_macie_findings (line 1571) | def _summarize_macie_findings(findings: List[Dict]) -> Dict: FILE: src/well-architected-security-mcp-server/awslabs/well_architected_security_mcp_server/util/storage_security.py function check_storage_encryption (line 26) | async def check_storage_encryption( function _update_results (line 104) | async def _update_results( function generate_recommendations (line 129) | async def generate_recommendations(results: Dict[str, Any]) -> List[str]: function find_storage_resources (line 192) | async def find_storage_resources( function check_s3_buckets (line 292) | async def check_s3_buckets( function check_ebs_volumes (line 461) | async def check_ebs_volumes( function check_rds_instances (line 578) | async def check_rds_instances( function check_dynamodb_tables (line 708) | async def check_dynamodb_tables( function check_efs_filesystems (line 849) | async def check_efs_filesystems( function check_elasticache_clusters (line 971) | async def check_elasticache_clusters( FILE: src/well-architected-security-mcp-server/tests/conftest.py function mock_ctx (line 23) | def mock_ctx(): function mock_boto3_session (line 32) | def mock_boto3_session(): function mock_resource_explorer_client (line 41) | def mock_resource_explorer_client(mock_boto3_session): function mock_s3_client (line 70) | def mock_s3_client(mock_boto3_session): function mock_elb_client (line 104) | def mock_elb_client(mock_boto3_session): function mock_elbv2_client (line 146) | def mock_elbv2_client(mock_boto3_session): function mock_ec2_client (line 178) | def mock_ec2_client(mock_boto3_session): function mock_apigateway_client (line 221) | def mock_apigateway_client(mock_boto3_session): function mock_cloudfront_client (line 253) | def mock_cloudfront_client(mock_boto3_session): function mock_guardduty_client (line 298) | def mock_guardduty_client(mock_boto3_session): function mock_securityhub_client (line 341) | def mock_securityhub_client(mock_boto3_session): function mock_inspector_client (line 394) | def mock_inspector_client(mock_boto3_session): function mock_accessanalyzer_client (line 440) | def mock_accessanalyzer_client(mock_boto3_session): function mock_macie_client (line 479) | def mock_macie_client(mock_boto3_session): function mock_support_client (line 520) | def mock_support_client(mock_boto3_session): FILE: src/well-architected-security-mcp-server/tests/test_access_analyzer_fix.py function test_check_access_analyzer_api_error_handling (line 27) | async def test_check_access_analyzer_api_error_handling(mock_ctx, mock_b... function test_check_access_analyzer_with_active_analyzers (line 47) | async def test_check_access_analyzer_with_active_analyzers(mock_ctx, moc... function test_check_access_analyzer_with_inactive_analyzers (line 85) | async def test_check_access_analyzer_with_inactive_analyzers(mock_ctx, m... function test_check_access_analyzer_with_no_analyzers (line 123) | async def test_check_access_analyzer_with_no_analyzers(mock_ctx, mock_bo... function test_check_access_analyzer_with_real_world_response (line 146) | async def test_check_access_analyzer_with_real_world_response(mock_ctx, ... function test_check_access_analyzer_with_missing_analyzers_field (line 188) | async def test_check_access_analyzer_with_missing_analyzers_field(mock_c... FILE: src/well-architected-security-mcp-server/tests/test_network_security.py function test_update_results (line 36) | async def test_update_results(): function test_generate_recommendations (line 100) | async def test_generate_recommendations(): function test_find_network_resources_success (line 150) | async def test_find_network_resources_success( function test_find_network_resources_no_default_view (line 210) | async def test_find_network_resources_no_default_view(mock_ctx, mock_bot... function test_check_classic_load_balancers_success (line 240) | async def test_check_classic_load_balancers_success(mock_ctx, mock_elb_c... function test_check_classic_load_balancers_insecure_protocol (line 271) | async def test_check_classic_load_balancers_insecure_protocol(mock_ctx, ... function test_check_classic_load_balancers_insecure_ssl_policy (line 320) | async def test_check_classic_load_balancers_insecure_ssl_policy(mock_ctx... function test_check_elbv2_load_balancers_success (line 385) | async def test_check_elbv2_load_balancers_success(mock_ctx, mock_elbv2_c... function test_check_elbv2_load_balancers_http_listener (line 426) | async def test_check_elbv2_load_balancers_http_listener(mock_ctx, mock_e... function test_check_elbv2_load_balancers_insecure_ssl_policy (line 466) | async def test_check_elbv2_load_balancers_insecure_ssl_policy(mock_ctx, ... function test_check_vpc_endpoints_success (line 507) | async def test_check_vpc_endpoints_success(mock_ctx, mock_ec2_client): function test_check_vpc_endpoints_private_dns_disabled (line 533) | async def test_check_vpc_endpoints_private_dns_disabled(mock_ctx, mock_e... function test_check_security_groups_success (line 572) | async def test_check_security_groups_success(mock_ctx, mock_ec2_client): function test_check_security_groups_open_sensitive_ports (line 598) | async def test_check_security_groups_open_sensitive_ports(mock_ctx, mock... function test_check_api_gateway_success (line 645) | async def test_check_api_gateway_success(mock_ctx, mock_apigateway_client): function test_check_api_gateway_https_not_enforced (line 674) | async def test_check_api_gateway_https_not_enforced(mock_ctx, mock_apiga... function test_check_cloudfront_distributions_success (line 715) | async def test_check_cloudfront_distributions_success(mock_ctx, mock_clo... function test_check_cloudfront_distributions_insecure_viewer_protocol (line 743) | async def test_check_cloudfront_distributions_insecure_viewer_protocol( function test_check_network_security_success (line 800) | async def test_check_network_security_success(mock_ctx, mock_boto3_sessi... function test_check_network_security_include_non_compliant_only (line 852) | async def test_check_network_security_include_non_compliant_only(mock_ct... FILE: src/well-architected-security-mcp-server/tests/test_network_security_additional.py function test_find_network_resources_api_error (line 35) | async def test_find_network_resources_api_error(mock_ctx, mock_boto3_ses... function test_find_network_resources_empty_views (line 56) | async def test_find_network_resources_empty_views(mock_ctx, mock_boto3_s... function test_find_network_resources_with_all_services (line 78) | async def test_find_network_resources_with_all_services( function test_check_classic_load_balancers_api_error (line 134) | async def test_check_classic_load_balancers_api_error(mock_ctx, mock_bot... function test_check_classic_load_balancers_fallback_to_direct_api (line 169) | async def test_check_classic_load_balancers_fallback_to_direct_api(mock_... function test_check_classic_load_balancers_ssl_policy_error (line 195) | async def test_check_classic_load_balancers_ssl_policy_error(mock_ctx, m... function test_check_elbv2_load_balancers_api_error (line 252) | async def test_check_elbv2_load_balancers_api_error(mock_ctx, mock_boto3... function test_check_elbv2_load_balancers_fallback_to_direct_api (line 288) | async def test_check_elbv2_load_balancers_fallback_to_direct_api(mock_ct... function test_check_elbv2_load_balancers_listener_error (line 310) | async def test_check_elbv2_load_balancers_listener_error(mock_ctx, mock_... function test_check_elbv2_load_balancers_network_load_balancer (line 342) | async def test_check_elbv2_load_balancers_network_load_balancer(mock_ctx... function test_check_elbv2_load_balancers_network_load_balancer_insecure_policy (line 395) | async def test_check_elbv2_load_balancers_network_load_balancer_insecure... function test_check_vpc_endpoints_api_error (line 449) | async def test_check_vpc_endpoints_api_error(mock_ctx, mock_boto3_session): function test_check_vpc_endpoints_fallback_to_direct_api (line 480) | async def test_check_vpc_endpoints_fallback_to_direct_api(mock_ctx, mock... function test_check_vpc_endpoints_gateway_endpoint (line 504) | async def test_check_vpc_endpoints_gateway_endpoint(mock_ctx, mock_ec2_c... function test_check_security_groups_api_error (line 541) | async def test_check_security_groups_api_error(mock_ctx, mock_boto3_sess... function test_check_security_groups_fallback_to_direct_api (line 572) | async def test_check_security_groups_fallback_to_direct_api(mock_ctx, mo... function test_check_security_groups_no_ports_defined (line 596) | async def test_check_security_groups_no_ports_defined(mock_ctx, mock_ec2... function test_check_api_gateway_api_error (line 641) | async def test_check_api_gateway_api_error(mock_ctx, mock_boto3_session): function test_check_api_gateway_fallback_to_direct_api (line 673) | async def test_check_api_gateway_fallback_to_direct_api(mock_ctx, mock_a... function test_check_api_gateway_stages_error (line 695) | async def test_check_api_gateway_stages_error(mock_ctx, mock_apigateway_... function test_check_api_gateway_domains_error (line 730) | async def test_check_api_gateway_domains_error(mock_ctx, mock_apigateway... function test_check_api_gateway_with_domain_mapping (line 761) | async def test_check_api_gateway_with_domain_mapping(mock_ctx, mock_apig... function test_check_cloudfront_distributions_api_error (line 813) | async def test_check_cloudfront_distributions_api_error(mock_ctx, mock_b... function test_check_cloudfront_distributions_fallback_to_direct_api (line 847) | async def test_check_cloudfront_distributions_fallback_to_direct_api( function test_check_cloudfront_distributions_s3_origins_without_oai (line 875) | async def test_check_cloudfront_distributions_s3_origins_without_oai( function test_check_network_security_with_multiple_services (line 932) | async def test_check_network_security_with_multiple_services(mock_ctx, m... function test_check_network_security_cloudfront_in_us_east_1 (line 1049) | async def test_check_network_security_cloudfront_in_us_east_1(mock_ctx, ... function test_check_network_security_cloudfront_not_in_us_east_1 (line 1101) | async def test_check_network_security_cloudfront_not_in_us_east_1(mock_c... FILE: src/well-architected-security-mcp-server/tests/test_prompt_utils.py function reset_prompt_utils_state (line 32) | def reset_prompt_utils_state(): function test_load_prompt_templates_file_not_found (line 52) | def test_load_prompt_templates_file_not_found(reset_prompt_utils_state): function test_load_prompt_templates_valid_file (line 59) | def test_load_prompt_templates_valid_file(reset_prompt_utils_state): function test_load_prompt_templates_empty_file (line 115) | def test_load_prompt_templates_empty_file(reset_prompt_utils_state): function test_load_prompt_templates_invalid_format (line 127) | def test_load_prompt_templates_invalid_format(reset_prompt_utils_state): function test_load_prompt_templates_missing_code_block (line 144) | def test_load_prompt_templates_missing_code_block(reset_prompt_utils_sta... function test_load_prompt_templates_caching (line 166) | def test_load_prompt_templates_caching(reset_prompt_utils_state): function test_get_prompt_template (line 208) | def test_get_prompt_template(reset_prompt_utils_state): function test_get_all_template_names (line 246) | def test_get_all_template_names(reset_prompt_utils_state): function test_get_template_metadata (line 281) | def test_get_template_metadata(reset_prompt_utils_state): function test_load_prompt_templates_with_exception (line 324) | def test_load_prompt_templates_with_exception(reset_prompt_utils_state): function test_get_prompt_template_loads_if_not_initialized (line 332) | def test_get_prompt_template_loads_if_not_initialized(reset_prompt_utils... function test_get_all_template_names_loads_if_not_initialized (line 366) | def test_get_all_template_names_loads_if_not_initialized(reset_prompt_ut... function test_get_template_metadata_loads_if_not_initialized (line 383) | def test_get_template_metadata_loads_if_not_initialized(reset_prompt_uti... FILE: src/well-architected-security-mcp-server/tests/test_prompt_utils_coverage.py function test_load_prompt_templates_with_missing_file (line 29) | def test_load_prompt_templates_with_missing_file(): function test_load_prompt_templates_with_valid_file (line 38) | def test_load_prompt_templates_with_valid_file(): function test_get_prompt_template_existing (line 92) | def test_get_prompt_template_existing(): function test_get_prompt_template_nonexistent (line 118) | def test_get_prompt_template_nonexistent(): function test_get_all_template_names (line 131) | def test_get_all_template_names(): function test_get_template_metadata (line 154) | def test_get_template_metadata(): FILE: src/well-architected-security-mcp-server/tests/test_resource_utils.py function test_list_services_in_region_success (line 27) | async def test_list_services_in_region_success( function test_list_services_in_region_resource_explorer_not_setup (line 74) | async def test_list_services_in_region_resource_explorer_not_setup(mock_... function test_list_services_in_region_api_error (line 95) | async def test_list_services_in_region_api_error(mock_ctx, mock_boto3_se... function test_list_services_in_region_empty_resources (line 116) | async def test_list_services_in_region_empty_resources( function test_list_services_in_region_malformed_arns (line 145) | async def test_list_services_in_region_malformed_arns( function test_list_services_in_region_no_default_view (line 181) | async def test_list_services_in_region_no_default_view(mock_ctx, mock_bo... FILE: src/well-architected-security-mcp-server/tests/test_resource_utils_fix.py function test_list_services_in_region_search_exception (line 27) | async def test_list_services_in_region_search_exception(mock_ctx, mock_b... function test_list_services_in_region_resource_explorer_not_setup_specific (line 48) | async def test_list_services_in_region_resource_explorer_not_setup_speci... function test_list_services_in_region_paginator_exception (line 73) | async def test_list_services_in_region_paginator_exception(mock_ctx, moc... function test_list_services_in_region_page_iterator_exception (line 99) | async def test_list_services_in_region_page_iterator_exception(mock_ctx,... function test_list_services_in_region_datetime_serialization (line 131) | async def test_list_services_in_region_datetime_serialization(mock_ctx, ... function test_list_services_in_region_general_exception (line 176) | async def test_list_services_in_region_general_exception(mock_ctx, mock_... FILE: src/well-architected-security-mcp-server/tests/test_security_services.py function test_clean_datetime_objects (line 47) | async def test_clean_datetime_objects(): function test_summarize_guardduty_findings (line 91) | async def test_summarize_guardduty_findings(): function test_summarize_securityhub_findings (line 127) | async def test_summarize_securityhub_findings(): function test_summarize_inspector_findings (line 164) | async def test_summarize_inspector_findings(): function test_summarize_access_analyzer_findings (line 200) | async def test_summarize_access_analyzer_findings(): function test_summarize_trusted_advisor_findings (line 224) | async def test_summarize_trusted_advisor_findings(): function test_summarize_macie_findings (line 249) | async def test_summarize_macie_findings(): function test_get_analyzer_findings_count (line 285) | async def test_get_analyzer_findings_count(mock_ctx, mock_accessanalyzer... function test_check_access_analyzer_enabled (line 314) | async def test_check_access_analyzer_enabled( function test_check_access_analyzer_not_enabled (line 350) | async def test_check_access_analyzer_not_enabled( function test_check_access_analyzer_error (line 370) | async def test_check_access_analyzer_error(mock_ctx, mock_boto3_session): function test_check_security_hub_enabled (line 388) | async def test_check_security_hub_enabled(mock_ctx, mock_boto3_session, ... function test_check_security_hub_not_enabled (line 424) | async def test_check_security_hub_not_enabled(mock_ctx, mock_boto3_sessi... function test_check_security_hub_error (line 441) | async def test_check_security_hub_error(mock_ctx, mock_boto3_session): function test_check_guard_duty_enabled (line 458) | async def test_check_guard_duty_enabled(mock_ctx, mock_boto3_session, mo... function test_check_guard_duty_not_enabled (line 485) | async def test_check_guard_duty_not_enabled(mock_ctx, mock_boto3_session): function test_check_guard_duty_error (line 502) | async def test_check_guard_duty_error(mock_ctx, mock_boto3_session): function test_check_inspector_enabled (line 519) | async def test_check_inspector_enabled(mock_ctx, mock_boto3_session, moc... function test_check_inspector_not_enabled (line 539) | async def test_check_inspector_not_enabled(mock_ctx, mock_boto3_session): function test_check_trusted_advisor_accessible (line 560) | async def test_check_trusted_advisor_accessible(mock_ctx, mock_boto3_ses... function test_check_trusted_advisor_subscription_required (line 597) | async def test_check_trusted_advisor_subscription_required(mock_ctx, moc... function test_check_trusted_advisor_error (line 616) | async def test_check_trusted_advisor_error(mock_ctx, mock_boto3_session): function test_check_macie_enabled (line 635) | async def test_check_macie_enabled(mock_ctx, mock_boto3_session, mock_ma... function test_check_macie_not_enabled (line 659) | async def test_check_macie_not_enabled(mock_ctx, mock_boto3_session): function test_check_macie_error (line 676) | async def test_check_macie_error(mock_ctx, mock_boto3_session): function test_get_guardduty_findings_success (line 693) | async def test_get_guardduty_findings_success(mock_ctx, mock_boto3_sessi... function test_get_guardduty_findings_not_enabled (line 718) | async def test_get_guardduty_findings_not_enabled(mock_ctx, mock_boto3_s... function test_get_guardduty_findings_error (line 735) | async def test_get_guardduty_findings_error(mock_ctx, mock_boto3_session... function test_get_securityhub_findings_success (line 762) | async def test_get_securityhub_findings_success( function test_get_securityhub_findings_not_enabled (line 786) | async def test_get_securityhub_findings_not_enabled(mock_ctx, mock_boto3... function test_get_inspector_findings_success (line 803) | async def test_get_inspector_findings_success(mock_ctx, mock_boto3_sessi... function test_get_inspector_findings_not_enabled (line 825) | async def test_get_inspector_findings_not_enabled(mock_ctx, mock_boto3_s... function test_get_access_analyzer_findings_success (line 842) | async def test_get_access_analyzer_findings_success( function test_get_access_analyzer_findings_not_enabled (line 874) | async def test_get_access_analyzer_findings_not_enabled(mock_ctx, mock_b... function test_get_trusted_advisor_findings_success (line 891) | async def test_get_trusted_advisor_findings_success( function test_get_trusted_advisor_findings_not_enabled (line 915) | async def test_get_trusted_advisor_findings_not_enabled(mock_ctx, mock_b... function test_get_macie_findings_success (line 931) | async def test_get_macie_findings_success(mock_ctx, mock_boto3_session, ... function test_get_macie_findings_not_enabled (line 953) | async def test_get_macie_findings_not_enabled(mock_ctx, mock_boto3_sessi... FILE: src/well-architected-security-mcp-server/tests/test_security_services_additional.py function test_get_securityhub_findings_with_no_filter_criteria (line 31) | async def test_get_securityhub_findings_with_no_filter_criteria( function test_get_securityhub_findings_with_custom_filter_criteria (line 107) | async def test_get_securityhub_findings_with_custom_filter_criteria( function test_get_securityhub_findings_with_no_findings (line 176) | async def test_get_securityhub_findings_with_no_findings( function test_get_securityhub_findings_error (line 205) | async def test_get_securityhub_findings_error( function test_get_inspector_findings_error (line 237) | async def test_get_inspector_findings_error(mock_ctx, mock_boto3_session... function test_get_access_analyzer_findings_error (line 267) | async def test_get_access_analyzer_findings_error( function test_get_macie_findings_error (line 308) | async def test_get_macie_findings_error(mock_ctx, mock_boto3_session, mo... function test_get_trusted_advisor_findings_error (line 338) | async def test_get_trusted_advisor_findings_error( function test_get_inspector_findings_with_custom_filter_criteria (line 372) | async def test_get_inspector_findings_with_custom_filter_criteria( function test_get_macie_findings_with_custom_filter_criteria (line 441) | async def test_get_macie_findings_with_custom_filter_criteria( FILE: src/well-architected-security-mcp-server/tests/test_security_services_coverage.py function test_check_access_analyzer_with_findings_count_error (line 33) | async def test_check_access_analyzer_with_findings_count_error(mock_ctx,... function test_check_access_analyzer_missing_arn (line 64) | async def test_check_access_analyzer_missing_arn(mock_ctx, mock_boto3_se... function test_check_guard_duty_with_disabled_detector (line 92) | async def test_check_guard_duty_with_disabled_detector(mock_ctx, mock_bo... function test_check_guard_duty_no_detectors (line 116) | async def test_check_guard_duty_no_detectors(mock_ctx, mock_boto3_session): function test_check_security_hub_invalid_access (line 134) | async def test_check_security_hub_invalid_access(mock_ctx, mock_boto3_se... function test_check_inspector_no_assessment_targets (line 154) | async def test_check_inspector_no_assessment_targets(mock_ctx, mock_boto... function test_check_macie_resource_not_found (line 174) | async def test_check_macie_resource_not_found(mock_ctx, mock_boto3_sessi... function test_check_trusted_advisor_subscription_required (line 194) | async def test_check_trusted_advisor_subscription_required(mock_ctx, moc... function test_check_guard_duty_api_error (line 214) | async def test_check_guard_duty_api_error(mock_ctx, mock_boto3_session): function test_check_inspector_api_error (line 232) | async def test_check_inspector_api_error(mock_ctx, mock_boto3_session): function test_check_security_hub_invalid_access_exception (line 252) | async def test_check_security_hub_invalid_access_exception(mock_ctx, moc... function test_check_security_hub_resource_not_found_exception (line 275) | async def test_check_security_hub_resource_not_found_exception(mock_ctx,... function test_check_security_hub_standards_error (line 298) | async def test_check_security_hub_standards_error(mock_ctx, mock_boto3_s... function test_check_inspector_access_denied_exception (line 322) | async def test_check_inspector_access_denied_exception(mock_ctx, mock_bo... function test_check_access_analyzer_with_await_exception (line 356) | async def test_check_access_analyzer_with_await_exception(mock_ctx, mock... function test_check_security_hub_standards_processing_error (line 391) | async def test_check_security_hub_standards_processing_error(mock_ctx, m... function test_check_access_analyzer_client_creation_error (line 429) | async def test_check_access_analyzer_client_creation_error(mock_ctx, moc... function test_check_security_hub_resource_not_found_specific (line 444) | async def test_check_security_hub_resource_not_found_specific(mock_ctx, ... function test_check_inspector_batch_get_account_status_success (line 472) | async def test_check_inspector_batch_get_account_status_success(mock_ctx... function test_check_inspector_access_denied_specific (line 505) | async def test_check_inspector_access_denied_specific(mock_ctx, mock_bot... function test_get_trusted_advisor_findings_with_category_filter (line 540) | async def test_get_trusted_advisor_findings_with_category_filter(mock_ct... function test_get_guardduty_findings_no_detector_id (line 598) | async def test_get_guardduty_findings_no_detector_id(mock_ctx, mock_boto... function test_get_guardduty_findings_no_findings_match_filter (line 624) | async def test_get_guardduty_findings_no_findings_match_filter(mock_ctx,... function test_get_trusted_advisor_findings_check_error (line 660) | async def test_get_trusted_advisor_findings_check_error(mock_ctx, mock_b... function test_check_macie_api_error (line 719) | async def test_check_macie_api_error(mock_ctx, mock_boto3_session): function test_check_security_hub_api_error (line 737) | async def test_check_security_hub_api_error(mock_ctx, mock_boto3_session): function test_check_trusted_advisor_api_error (line 755) | async def test_check_trusted_advisor_api_error(mock_ctx, mock_boto3_sess... FILE: src/well-architected-security-mcp-server/tests/test_server.py function test_check_security_services (line 33) | async def test_check_security_services(mock_ctx, mock_boto3_session): function test_check_security_services_error (line 112) | async def test_check_security_services_error(mock_ctx): function test_get_security_findings_guardduty (line 136) | async def test_get_security_findings_guardduty(mock_ctx): function test_get_security_findings_unsupported_service (line 179) | async def test_get_security_findings_unsupported_service(mock_ctx): function test_get_security_findings_with_context_data (line 202) | async def test_get_security_findings_with_context_data(mock_ctx): function test_get_stored_security_context_available (line 241) | async def test_get_stored_security_context_available(mock_ctx): function test_get_stored_security_context_not_available (line 283) | async def test_get_stored_security_context_not_available(mock_ctx): function test_check_storage_encryption_tool (line 304) | async def test_check_storage_encryption_tool(mock_ctx, mock_boto3_session): function test_check_storage_encryption_tool_error (line 360) | async def test_check_storage_encryption_tool_error(mock_ctx, mock_boto3_... function test_list_services_in_region_tool (line 386) | async def test_list_services_in_region_tool(mock_ctx, mock_boto3_session): function test_list_services_in_region_tool_error (line 420) | async def test_list_services_in_region_tool_error(mock_ctx, mock_boto3_s... function test_check_network_security_tool (line 446) | async def test_check_network_security_tool(mock_ctx, mock_boto3_session): function test_check_network_security_tool_error (line 502) | async def test_check_network_security_tool_error(mock_ctx, mock_boto3_se... function test_main (line 527) | def test_main(): function test_main_with_sse (line 553) | def test_main_with_sse(): FILE: src/well-architected-security-mcp-server/tests/test_server_additional.py function test_check_security_services_with_debug_false (line 35) | async def test_check_security_services_with_debug_false(mock_ctx, mock_b... function test_check_security_services_with_unknown_service (line 73) | async def test_check_security_services_with_unknown_service(mock_ctx, mo... function test_check_security_services_with_account_id (line 95) | async def test_check_security_services_with_account_id(mock_ctx, mock_bo... function test_check_security_services_with_aws_profile (line 123) | async def test_check_security_services_with_aws_profile(mock_ctx, mock_b... function test_check_security_services_with_no_services (line 151) | async def test_check_security_services_with_no_services(mock_ctx, mock_b... function test_get_security_findings_with_severity_filter (line 171) | async def test_get_security_findings_with_severity_filter(mock_ctx): function test_get_security_findings_with_check_enabled_false (line 207) | async def test_get_security_findings_with_check_enabled_false(mock_ctx): function test_get_stored_security_context_with_detailed_true (line 243) | async def test_get_stored_security_context_with_detailed_true(mock_ctx): function test_check_storage_encryption_tool_with_include_unencrypted_only (line 294) | async def test_check_storage_encryption_tool_with_include_unencrypted_only( function test_list_services_in_region_tool_with_aws_profile (line 356) | async def test_list_services_in_region_tool_with_aws_profile(mock_ctx, m... function test_check_network_security_tool_with_include_non_compliant_only (line 391) | async def test_check_network_security_tool_with_include_non_compliant_only( function test_check_network_security_tool_with_aws_profile (line 453) | async def test_check_network_security_tool_with_aws_profile(mock_ctx, mo... function test_field_defaults (line 509) | def test_field_defaults(): FILE: src/well-architected-security-mcp-server/tests/test_server_coverage.py function test_security_assessment_precheck (line 31) | async def test_security_assessment_precheck(mock_ctx): function test_check_storage_security_prompt (line 45) | async def test_check_storage_security_prompt(mock_ctx): function test_check_network_security_prompt (line 58) | async def test_check_network_security_prompt(mock_ctx): function test_main (line 70) | def test_main(): function test_main_with_sse (line 93) | def test_main_with_sse(): FILE: src/well-architected-security-mcp-server/tests/test_server_prompts.py function test_security_assessment_precheck (line 27) | async def test_security_assessment_precheck(mock_ctx): function test_check_storage_security_prompt (line 55) | async def test_check_storage_security_prompt(mock_ctx): function test_check_network_security_prompt (line 85) | async def test_check_network_security_prompt(mock_ctx): FILE: src/well-architected-security-mcp-server/tests/test_server_security_findings.py function test_get_security_findings_with_service_enabled_in_context (line 28) | async def test_get_security_findings_with_service_enabled_in_context(moc... function test_get_security_findings_with_service_disabled_in_context (line 80) | async def test_get_security_findings_with_service_disabled_in_context( function test_get_security_findings_with_service_not_in_context (line 127) | async def test_get_security_findings_with_service_not_in_context(mock_ct... function test_get_security_findings_with_no_context_storage (line 176) | async def test_get_security_findings_with_no_context_storage(mock_ctx, m... function test_get_security_findings_with_check_enabled_false (line 221) | async def test_get_security_findings_with_check_enabled_false(mock_ctx, ... function test_get_security_findings_with_securityhub (line 270) | async def test_get_security_findings_with_securityhub(mock_ctx, mock_bot... function test_get_security_findings_with_inspector (line 312) | async def test_get_security_findings_with_inspector(mock_ctx, mock_boto3... function test_get_security_findings_with_accessanalyzer (line 354) | async def test_get_security_findings_with_accessanalyzer(mock_ctx, mock_... function test_get_security_findings_with_trustedadvisor (line 396) | async def test_get_security_findings_with_trustedadvisor(mock_ctx, mock_... function test_get_security_findings_with_trustedadvisor_and_severity_filter (line 445) | async def test_get_security_findings_with_trustedadvisor_and_severity_fi... function test_get_security_findings_with_macie (line 489) | async def test_get_security_findings_with_macie(mock_ctx, mock_boto3_ses... function test_get_security_findings_with_severity_filter_guardduty (line 531) | async def test_get_security_findings_with_severity_filter_guardduty(mock... function test_get_security_findings_with_unsupported_service (line 569) | async def test_get_security_findings_with_unsupported_service(mock_ctx, ... function test_get_security_findings_with_exception (line 594) | async def test_get_security_findings_with_exception(mock_ctx, mock_boto3... function test_get_security_findings_updates_context_when_service_disabled (line 624) | async def test_get_security_findings_updates_context_when_service_disabled( FILE: src/well-architected-security-mcp-server/tests/test_storage_security.py function test_update_results (line 31) | async def test_update_results(): function test_generate_recommendations (line 95) | async def test_generate_recommendations(): function test_find_storage_resources_success (line 118) | async def test_find_storage_resources_success( function test_find_storage_resources_no_default_view (line 170) | async def test_find_storage_resources_no_default_view(mock_ctx, mock_bot... function test_find_storage_resources_api_error (line 200) | async def test_find_storage_resources_api_error(mock_ctx, mock_boto3_ses... function test_check_s3_buckets_success (line 227) | async def test_check_s3_buckets_success(mock_ctx, mock_boto3_session): function test_check_s3_buckets_no_encryption (line 276) | async def test_check_s3_buckets_no_encryption(mock_ctx, mock_boto3_sessi... function test_check_s3_buckets_no_public_access_block (line 324) | async def test_check_s3_buckets_no_public_access_block(mock_ctx, mock_bo... function test_check_s3_buckets_public_access_block_error (line 373) | async def test_check_s3_buckets_public_access_block_error(mock_ctx, mock... function test_check_s3_buckets_api_error (line 417) | async def test_check_s3_buckets_api_error(mock_ctx, mock_s3_client): function test_check_storage_encryption_success (line 444) | async def test_check_storage_encryption_success(mock_ctx, mock_boto3_ses... function test_check_storage_encryption_include_unencrypted_only (line 496) | async def test_check_storage_encryption_include_unencrypted_only(mock_ct... FILE: src/well-architected-security-mcp-server/tests/test_storage_security_additional.py function test_check_ebs_volumes_success (line 31) | async def test_check_ebs_volumes_success(mock_ctx, mock_boto3_session): function test_check_ebs_volumes_no_resources (line 83) | async def test_check_ebs_volumes_no_resources(mock_ctx, mock_boto3_sessi... function test_check_ebs_volumes_api_error (line 103) | async def test_check_ebs_volumes_api_error(mock_ctx, mock_boto3_session): function test_check_rds_instances_success (line 133) | async def test_check_rds_instances_success(mock_ctx, mock_boto3_session): function test_check_rds_instances_no_resources (line 192) | async def test_check_rds_instances_no_resources(mock_ctx, mock_boto3_ses... function test_check_dynamodb_tables_success (line 212) | async def test_check_dynamodb_tables_success(mock_ctx, mock_boto3_session): function test_check_dynamodb_tables_no_resources (line 290) | async def test_check_dynamodb_tables_no_resources(mock_ctx, mock_boto3_s... function test_check_efs_filesystems_success (line 312) | async def test_check_efs_filesystems_success(mock_ctx, mock_boto3_session): function test_check_efs_filesystems_no_resources (line 373) | async def test_check_efs_filesystems_no_resources(mock_ctx, mock_boto3_s... function test_check_elasticache_clusters_success (line 393) | async def test_check_elasticache_clusters_success(mock_ctx, mock_boto3_s... function test_check_elasticache_clusters_no_resources (line 453) | async def test_check_elasticache_clusters_no_resources(mock_ctx, mock_bo... function test_check_elasticache_clusters_api_error (line 475) | async def test_check_elasticache_clusters_api_error(mock_ctx, mock_boto3... function test_check_rds_instances_api_error (line 507) | async def test_check_rds_instances_api_error(mock_ctx, mock_boto3_session): function test_check_dynamodb_tables_api_error (line 537) | async def test_check_dynamodb_tables_api_error(mock_ctx, mock_boto3_sess... function test_check_efs_filesystems_api_error (line 569) | async def test_check_efs_filesystems_api_error(mock_ctx, mock_boto3_sess... FILE: src/well-architected-security-mcp-server/tests/test_storage_security_comprehensive.py function test_check_storage_encryption_multiple_services (line 27) | async def test_check_storage_encryption_multiple_services(mock_ctx, mock... function test_check_storage_encryption_with_efs_and_elasticache (line 134) | async def test_check_storage_encryption_with_efs_and_elasticache(mock_ct... function test_check_storage_encryption_unsupported_service (line 204) | async def test_check_storage_encryption_unsupported_service(mock_ctx, mo... function test_check_storage_encryption_find_resources_error (line 235) | async def test_check_storage_encryption_find_resources_error(mock_ctx, m... function test_check_storage_encryption_service_check_error (line 262) | async def test_check_storage_encryption_service_check_error(mock_ctx, mo... function test_check_storage_encryption_empty_services (line 306) | async def test_check_storage_encryption_empty_services(mock_ctx, mock_bo... function test_check_storage_encryption_no_resources_found (line 334) | async def test_check_storage_encryption_no_resources_found(mock_ctx, moc... FILE: src/well-architected-security-mcp-server/tests/test_storage_security_edge_cases.py function test_check_s3_buckets_with_kms_encryption (line 35) | async def test_check_s3_buckets_with_kms_encryption(mock_ctx, mock_boto3... function test_check_s3_buckets_fallback_to_list_buckets (line 89) | async def test_check_s3_buckets_fallback_to_list_buckets(mock_ctx, mock_... function test_check_ebs_volumes_fallback_to_describe_volumes (line 162) | async def test_check_ebs_volumes_fallback_to_describe_volumes(mock_ctx, ... function test_check_rds_instances_fallback_to_describe_db_instances (line 222) | async def test_check_rds_instances_fallback_to_describe_db_instances(moc... function test_check_dynamodb_tables_fallback_to_list_tables (line 283) | async def test_check_dynamodb_tables_fallback_to_list_tables(mock_ctx, m... function test_check_efs_filesystems_fallback_to_describe_file_systems (line 362) | async def test_check_efs_filesystems_fallback_to_describe_file_systems( function test_check_elasticache_clusters_fallback_to_describe_cache_clusters (line 421) | async def test_check_elasticache_clusters_fallback_to_describe_cache_clu... function test_find_storage_resources_with_pagination (line 483) | async def test_find_storage_resources_with_pagination(mock_ctx, mock_bot... function test_check_storage_encryption_with_botocore_error (line 536) | async def test_check_storage_encryption_with_botocore_error(mock_ctx, mo... function test_check_dynamodb_tables_with_sse_error (line 554) | async def test_check_dynamodb_tables_with_sse_error(mock_ctx, mock_boto3... FILE: src/well-architected-security-mcp-server/tests/test_storage_security_recommendations.py function test_generate_recommendations_with_s3_non_compliant (line 25) | async def test_generate_recommendations_with_s3_non_compliant(): function test_generate_recommendations_with_ebs_non_compliant (line 39) | async def test_generate_recommendations_with_ebs_non_compliant(): function test_generate_recommendations_with_rds_non_compliant (line 52) | async def test_generate_recommendations_with_rds_non_compliant(): function test_generate_recommendations_with_dynamodb_non_compliant (line 66) | async def test_generate_recommendations_with_dynamodb_non_compliant(): function test_generate_recommendations_with_efs_non_compliant (line 78) | async def test_generate_recommendations_with_efs_non_compliant(): function test_generate_recommendations_with_elasticache_non_compliant (line 93) | async def test_generate_recommendations_with_elasticache_non_compliant(): function test_generate_recommendations_with_multiple_services (line 110) | async def test_generate_recommendations_with_multiple_services(): function test_generate_recommendations_with_all_compliant (line 140) | async def test_generate_recommendations_with_all_compliant(): function test_generate_recommendations_empty_results (line 161) | async def test_generate_recommendations_empty_results(): FILE: src/well-architected-security-mcp-server/tests/test_user_agent_config.py function test_user_agent_config_is_properly_configured (line 21) | def test_user_agent_config_is_properly_configured(): function test_security_services_uses_user_agent_config (line 43) | async def test_security_services_uses_user_agent_config(): function test_storage_security_uses_user_agent_config (line 67) | async def test_storage_security_uses_user_agent_config(): function test_network_security_uses_user_agent_config (line 92) | async def test_network_security_uses_user_agent_config(): function test_resource_utils_uses_user_agent_config (line 117) | async def test_resource_utils_uses_user_agent_config(): FILE: testing/mcp_test_client.py class StdioMcpClient (line 25) | class StdioMcpClient: method __init__ (line 28) | def __init__(self, command: str, args: List[str], env: Optional[Dict[s... method connect (line 37) | async def connect(self) -> Dict[str, Any]: method disconnect (line 61) | async def disconnect(self): method ping (line 76) | async def ping(self) -> bool: method list_tools (line 87) | async def list_tools(self) -> List[types.Tool]: method call_tool (line 97) | async def call_tool(self, name: str, arguments: Dict[str, Any]) -> typ... method list_resources (line 107) | async def list_resources(self) -> List[types.Resource]: method read_resource (line 117) | async def read_resource(self, uri: str) -> types.ReadResourceResult: method list_prompts (line 127) | async def list_prompts(self) -> List[types.Prompt]: method get_prompt (line 137) | async def get_prompt(self, name: str, arguments: Dict[str, Any]) -> ty... method capabilities (line 148) | def capabilities(self) -> Optional[Dict[str, Any]]: FILE: testing/mcp_test_runner.py class TestResult (line 29) | class TestResult: class ValidationRule (line 39) | class ValidationRule: class MCPTestRunner (line 47) | class MCPTestRunner: method __init__ (line 50) | def __init__(self, client: StdioMcpClient): method run_tests (line 55) | async def run_tests(self, test_config: Dict[str, Any]) -> List[TestRes... method _run_protocol_tests (line 79) | async def _run_protocol_tests(self, test_config: Dict[str, Any]): method _validate_tools (line 114) | async def _validate_tools(self, tools: List[types.Tool], expected: Dic... method _validate_resources (line 151) | async def _validate_resources( method _validate_prompts (line 190) | async def _validate_prompts( method _run_custom_tests (line 229) | async def _run_custom_tests(self, custom_tests: List[Dict[str, Any]]): method _run_tool_test (line 252) | async def _run_tool_test(self, test: Dict[str, Any]) -> TestResult: method _run_resource_test (line 284) | async def _run_resource_test(self, test: Dict[str, Any]) -> TestResult: method _run_prompt_test (line 315) | async def _run_prompt_test(self, test: Dict[str, Any]) -> TestResult: method _validate_response (line 347) | async def _validate_response( FILE: testing/pytest_utils.py function setup_logging (line 29) | def setup_logging(level: str = 'INFO'): function event_loop (line 39) | def event_loop(): function mcp_client_factory (line 47) | async def mcp_client_factory(): function mcp_runner_factory (line 57) | async def mcp_runner_factory(): class MCPTestBase (line 66) | class MCPTestBase: method __init__ (line 69) | def __init__( method setup (line 84) | async def setup(self): method teardown (line 97) | async def teardown(self): method run_basic_tests (line 102) | async def run_basic_tests(self, expected_config: Dict[str, Any]) -> Li... method run_custom_test (line 109) | async def run_custom_test(self, test_config: Dict[str, Any]) -> TestRe... function create_test_config (line 145) | def create_test_config( function create_validation_rule (line 166) | def create_validation_rule( function create_tool_test_config (line 176) | def create_tool_test_config( function create_resource_test_config (line 194) | def create_resource_test_config( function create_prompt_test_config (line 211) | def create_prompt_test_config( function assert_test_results (line 233) | def assert_test_results(results: List[TestResult], expected_success_coun... function get_server_path (line 248) | def get_server_path(server_name: str) -> str: FILE: testing/types.py class TestType (line 19) | class TestType(Enum):