Protokoll #27837

ID27837
Zeitstempel2025-12-28 12:27:01.261616
Clientroot
IP145.224.72.140
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens1,473 (Input: 734, Output: 739)
Dauer115 ms
Request-Zeit2025-12-28 12:27:01.261616
Response-Zeit2025-12-28 12:27:01.376323

Request

{
    "event": "PreToolUse",
    "tool_name": "Write",
    "tool_input": {
        "file_path": "\/var\/www\/mcp-servers\/shared\/infrastructure\/simple_db_connection.py",
        "content": "\"\"\"\nSimple DB Connection without Pooling.\n\nNOT suitable for:\n- High-Throughput (> 50 queries\/minute)\n- Connection Pooling Requirements\n- mcp_db Server\n\nFor those cases: Use dedicated implementation with mysql.connector.pooling\n\"\"\"\n\nfrom contextlib import contextmanager\nfrom typing import TYPE_CHECKING, Generator\n\nimport pymysql\nfrom pymysql.connections import Connection\n\nif TYPE_CHECKING:\n    from shared.config_base import AppDatabaseConfig, LogDatabaseConfig\n\n\nclass SimpleDbConnection:\n    \"\"\"\n    Simple database connection without pooling.\n\n    For servers with low query volume (< 50\/minute).\n    \"\"\"\n\n    @classmethod\n    @contextmanager\n    def get_connection(\n        cls,\n        config: \"AppDatabaseConfig\",\n        database: str | None = None,\n        autocommit: bool = False,\n    ) -> Generator[Connection, None, None]:\n        \"\"\"\n        Context Manager for App DB Connection.\n\n        WARNING: Do not add more parameters!\n        For more logic: Create a new method.\n\n        Args:\n            config: Server configuration with DB credentials\n            database: Optional - overrides config.DB_NAME\n            autocommit: True for logging, False for transactions\n        \"\"\"\n        conn = None\n        db_name = database or getattr(config, \"DB_NAME\", None)\n\n        try:\n            conn = pymysql.connect(\n                host=config.DB_HOST,\n                port=getattr(config, \"DB_PORT\", 3306),\n                user=config.DB_USER,\n                password=config.DB_PASSWORD,\n                database=db_name,\n                charset=\"utf8mb4\",\n                cursorclass=pymysql.cursors.DictCursor,\n                autocommit=autocommit,\n            )\n            yield conn\n            if not autocommit:\n                conn.commit()\n        except Exception:\n            if conn and not autocommit:\n                conn.rollback()\n            raise\n        finally:\n            if conn:\n                conn.close()\n\n    @classmethod\n    @contextmanager\n    def get_log_connection(\n        cls,\n        config: \"LogDatabaseConfig\",\n    ) -> Generator[Connection, None, None]:\n        \"\"\"Separate connection for logging (autocommit=True).\"\"\"\n        conn = None\n        try:\n            conn = pymysql.connect(\n                host=config.LOG_DB_HOST,\n                user=config.LOG_DB_USER,\n                password=config.LOG_DB_PASSWORD,\n                database=config.LOG_DB_NAME,\n                charset=\"utf8mb4\",\n                cursorclass=pymysql.cursors.DictCursor,\n                autocommit=True,\n            )\n            yield conn\n        finally:\n            if conn:\n                conn.close()\n"
    }
}

Response

{
    "tool_response": {
        "type": "create",
        "filePath": "\/var\/www\/mcp-servers\/shared\/infrastructure\/simple_db_connection.py",
        "content": "\"\"\"\nSimple DB Connection without Pooling.\n\nNOT suitable for:\n- High-Throughput (> 50 queries\/minute)\n- Connection Pooling Requirements\n- mcp_db Server\n\nFor those cases: Use dedicated implementation with mysql.connector.pooling\n\"\"\"\n\nfrom contextlib import contextmanager\nfrom typing import TYPE_CHECKING, Generator\n\nimport pymysql\nfrom pymysql.connections import Connection\n\nif TYPE_CHECKING:\n    from shared.config_base import AppDatabaseConfig, LogDatabaseConfig\n\n\nclass SimpleDbConnection:\n    \"\"\"\n    Simple database connection without pooling.\n\n    For servers with low query volume (< 50\/minute).\n    \"\"\"\n\n    @classmethod\n    @contextmanager\n    def get_connection(\n        cls,\n        config: \"AppDatabaseConfig\",\n        database: str | None = None,\n        autocommit: bool = False,\n    ) -> Generator[Connection, None, None]:\n        \"\"\"\n        Context Manager for App DB Connection.\n\n        WARNING: Do not add more parameters!\n        For more logic: Create a new method.\n\n        Args:\n            config: Server configuration with DB credentials\n            database: Optional - overrides config.DB_NAME\n            autocommit: True for logging, False for transactions\n        \"\"\"\n        conn = None\n        db_name = database or getattr(config, \"DB_NAME\", None)\n\n        try:\n            conn = pymysql.connect(\n                host=config.DB_HOST,\n                port=getattr(config, \"DB_PORT\", 3306),\n                user=config.DB_USER,\n                password=config.DB_PASSWORD,\n                database=db_name,\n                charset=\"utf8mb4\",\n                cursorclass=pymysql.cursors.DictCursor,\n                autocommit=autocommit,\n            )\n            yield conn\n            if not autocommit:\n                conn.commit()\n        except Exception:\n            if conn and not autocommit:\n                conn.rollback()\n            raise\n        finally:\n            if conn:\n                conn.close()\n\n    @classmethod\n    @contextmanager\n    def get_log_connection(\n        cls,\n        config: \"LogDatabaseConfig\",\n    ) -> Generator[Connection, None, None]:\n        \"\"\"Separate connection for logging (autocommit=True).\"\"\"\n        conn = None\n        try:\n            conn = pymysql.connect(\n                host=config.LOG_DB_HOST,\n                user=config.LOG_DB_USER,\n                password=config.LOG_DB_PASSWORD,\n                database=config.LOG_DB_NAME,\n                charset=\"utf8mb4\",\n                cursorclass=pymysql.cursors.DictCursor,\n                autocommit=True,\n            )\n            yield conn\n        finally:\n            if conn:\n                conn.close()\n",
        "structuredPatch": [],
        "originalFile": null
    }
}
← Vorheriger Zur Liste Nächster →