Protokoll #33607

ID33607
Zeitstempel2026-04-21 02:53:56.500689
Clientroot
IP62.246.34.195
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens823 (Input: 406, Output: 417)
Dauer70 ms
Request-Zeit2026-04-21 02:53:56.500689
Response-Zeit2026-04-21 02:53:56.571188

Request

{
    "event": "PreToolUse",
    "tool_name": "Write",
    "tool_input": {
        "file_path": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/infrastructure\/parsers\/structured_data_parser_extruct.py",
        "content": "from __future__ import annotations\n\nfrom collections.abc import Mapping\nfrom typing import Any\n\nimport extruct\n\nfrom src.domain.ports.structured_data_parser_port import (\n    StructuredDataParserPort,\n    StructuredDataTriple,\n)\nfrom src.domain.value_objects.enums import StructuredDataFormat\n\n_FORMAT_MAP = {\n    \"json-ld\": StructuredDataFormat.JSON_LD,\n    \"microdata\": StructuredDataFormat.MICRODATA,\n    \"rdfa\": StructuredDataFormat.RDFA,\n    \"opengraph\": StructuredDataFormat.OPEN_GRAPH,\n}\n\n\nclass ExtructStructuredDataParser(StructuredDataParserPort):\n    def parse(self, html: str, *, base_url: str) -> list[StructuredDataTriple]:\n        extracted = extruct.extract(\n            html, base_url=base_url,\n            syntaxes=list(_FORMAT_MAP.keys()),\n            uniform=True,\n        )\n        triples: list[StructuredDataTriple] = []\n        for key, fmt in _FORMAT_MAP.items():\n            for item in extracted.get(key, []) or []:\n                if isinstance(item, Mapping):\n                    triples.append((fmt, _schema_type(item), dict(item)))\n        return triples\n\n\ndef _schema_type(payload: Mapping[str, Any]) -> str | None:\n    value = payload.get(\"@type\") or payload.get(\"type\")\n    if isinstance(value, str):\n        return value\n    if isinstance(value, list) and value and isinstance(value[0], str):\n        return value[0]\n    return None\n"
    }
}

Response

{
    "tool_response": {
        "type": "create",
        "filePath": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/infrastructure\/parsers\/structured_data_parser_extruct.py",
        "content": "from __future__ import annotations\n\nfrom collections.abc import Mapping\nfrom typing import Any\n\nimport extruct\n\nfrom src.domain.ports.structured_data_parser_port import (\n    StructuredDataParserPort,\n    StructuredDataTriple,\n)\nfrom src.domain.value_objects.enums import StructuredDataFormat\n\n_FORMAT_MAP = {\n    \"json-ld\": StructuredDataFormat.JSON_LD,\n    \"microdata\": StructuredDataFormat.MICRODATA,\n    \"rdfa\": StructuredDataFormat.RDFA,\n    \"opengraph\": StructuredDataFormat.OPEN_GRAPH,\n}\n\n\nclass ExtructStructuredDataParser(StructuredDataParserPort):\n    def parse(self, html: str, *, base_url: str) -> list[StructuredDataTriple]:\n        extracted = extruct.extract(\n            html, base_url=base_url,\n            syntaxes=list(_FORMAT_MAP.keys()),\n            uniform=True,\n        )\n        triples: list[StructuredDataTriple] = []\n        for key, fmt in _FORMAT_MAP.items():\n            for item in extracted.get(key, []) or []:\n                if isinstance(item, Mapping):\n                    triples.append((fmt, _schema_type(item), dict(item)))\n        return triples\n\n\ndef _schema_type(payload: Mapping[str, Any]) -> str | None:\n    value = payload.get(\"@type\") or payload.get(\"type\")\n    if isinstance(value, str):\n        return value\n    if isinstance(value, list) and value and isinstance(value[0], str):\n        return value[0]\n    return None\n",
        "structuredPatch": [],
        "originalFile": null,
        "userModified": false
    }
}
← Vorheriger Zur Liste Nächster →