Protokoll #33328

ID33328
Zeitstempel2026-04-21 01:17:41.700070
Clientroot
IP62.246.34.195
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens1,045 (Input: 517, Output: 528)
Dauer64 ms
Request-Zeit2026-04-21 01:17:41.700070
Response-Zeit2026-04-21 01:17:41.763620

Request

{
    "event": "PreToolUse",
    "tool_name": "Write",
    "tool_input": {
        "file_path": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/scripts\/bootstrap_db.py",
        "content": "\"\"\"T-001 \/ T-002: Creates the `crawler` database and applies schema.\n\nUses credentials from \/etc\/environment via pipeline config helper.\nRun once. Idempotent (IF NOT EXISTS).\n\"\"\"\nfrom __future__ import annotations\n\nimport pathlib\nimport sys\n\nsys.path.insert(0, \"\/var\/www\/scripts\/pipeline\")\nfrom config import DB_CONFIG  # noqa: E402\n\nimport mysql.connector  # noqa: E402\n\nDB_NAME = \"crawler\"\nSCHEMA_PATH = pathlib.Path(\n    \"\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/db\/schema.sql\"\n)\n\n\ndef connect_server() -> mysql.connector.MySQLConnection:\n    return mysql.connector.connect(\n        host=DB_CONFIG[\"host\"],\n        user=DB_CONFIG[\"user\"],\n        password=DB_CONFIG[\"password\"],\n    )\n\n\ndef ensure_database(cur: mysql.connector.cursor.MySQLCursor) -> None:\n    cur.execute(\n        f\"CREATE DATABASE IF NOT EXISTS {DB_NAME} \"\n        \"CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci\"\n    )\n\n\ndef apply_schema(cur: mysql.connector.cursor.MySQLCursor) -> int:\n    if not SCHEMA_PATH.exists():\n        return 0\n    cur.execute(f\"USE {DB_NAME}\")\n    sql = SCHEMA_PATH.read_text(encoding=\"utf-8\")\n    count = 0\n    for stmt in _split_statements(sql):\n        cur.execute(stmt)\n        count += 1\n    return count\n\n\ndef _split_statements(sql: str) -> list[str]:\n    cleaned: list[str] = []\n    for raw in sql.split(\";\"):\n        stmt = raw.strip()\n        if stmt and not stmt.startswith(\"--\"):\n            cleaned.append(stmt)\n    return cleaned\n\n\ndef main() -> int:\n    conn = connect_server()\n    try:\n        cur = conn.cursor()\n        ensure_database(cur)\n        applied = apply_schema(cur)\n        conn.commit()\n        print(f\"OK database={DB_NAME} schema_statements={applied}\")\n        return 0\n    finally:\n        conn.close()\n\n\nif __name__ == \"__main__\":\n    sys.exit(main())\n"
    }
}

Response

{
    "tool_response": {
        "type": "create",
        "filePath": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/scripts\/bootstrap_db.py",
        "content": "\"\"\"T-001 \/ T-002: Creates the `crawler` database and applies schema.\n\nUses credentials from \/etc\/environment via pipeline config helper.\nRun once. Idempotent (IF NOT EXISTS).\n\"\"\"\nfrom __future__ import annotations\n\nimport pathlib\nimport sys\n\nsys.path.insert(0, \"\/var\/www\/scripts\/pipeline\")\nfrom config import DB_CONFIG  # noqa: E402\n\nimport mysql.connector  # noqa: E402\n\nDB_NAME = \"crawler\"\nSCHEMA_PATH = pathlib.Path(\n    \"\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/db\/schema.sql\"\n)\n\n\ndef connect_server() -> mysql.connector.MySQLConnection:\n    return mysql.connector.connect(\n        host=DB_CONFIG[\"host\"],\n        user=DB_CONFIG[\"user\"],\n        password=DB_CONFIG[\"password\"],\n    )\n\n\ndef ensure_database(cur: mysql.connector.cursor.MySQLCursor) -> None:\n    cur.execute(\n        f\"CREATE DATABASE IF NOT EXISTS {DB_NAME} \"\n        \"CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci\"\n    )\n\n\ndef apply_schema(cur: mysql.connector.cursor.MySQLCursor) -> int:\n    if not SCHEMA_PATH.exists():\n        return 0\n    cur.execute(f\"USE {DB_NAME}\")\n    sql = SCHEMA_PATH.read_text(encoding=\"utf-8\")\n    count = 0\n    for stmt in _split_statements(sql):\n        cur.execute(stmt)\n        count += 1\n    return count\n\n\ndef _split_statements(sql: str) -> list[str]:\n    cleaned: list[str] = []\n    for raw in sql.split(\";\"):\n        stmt = raw.strip()\n        if stmt and not stmt.startswith(\"--\"):\n            cleaned.append(stmt)\n    return cleaned\n\n\ndef main() -> int:\n    conn = connect_server()\n    try:\n        cur = conn.cursor()\n        ensure_database(cur)\n        applied = apply_schema(cur)\n        conn.commit()\n        print(f\"OK database={DB_NAME} schema_statements={applied}\")\n        return 0\n    finally:\n        conn.close()\n\n\nif __name__ == \"__main__\":\n    sys.exit(main())\n",
        "structuredPatch": [],
        "originalFile": null,
        "userModified": false
    }
}
← Vorheriger Zur Liste Nächster →