{
"event": "PreToolUse",
"tool_name": "Edit",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/domain\/ports\/html_parser_port.py",
"old_string": "from abc import ABC, abstractmethod\nfrom dataclasses import dataclass\n\nfrom src.domain.value_objects.body_stats import BodyStats\nfrom src.domain.value_objects.head_meta import HeadMeta\nfrom src.domain.value_objects.hreflang import HreflangEntry\nfrom src.domain.value_objects.open_graph_meta import OpenGraphMeta\nfrom src.domain.value_objects.twitter_meta import TwitterMeta\n\n\n@dataclass(frozen=True, slots=True)\nclass ParsedDocument:\n head: HeadMeta\n og: OpenGraphMeta\n twitter: TwitterMeta\n body: BodyStats\n hreflang: tuple[HreflangEntry, ...]\n internal_links: tuple[str, ...]\n external_links: tuple[str, ...]\n image_specs: tuple[tuple[str, str | None, str | None, int | None, int | None], ...]",
"new_string": "from abc import ABC, abstractmethod\nfrom dataclasses import dataclass\nfrom typing import TypeAlias\n\nfrom src.domain.value_objects.body_stats import BodyStats\nfrom src.domain.value_objects.head_meta import HeadMeta\nfrom src.domain.value_objects.hreflang import HreflangEntry\nfrom src.domain.value_objects.open_graph_meta import OpenGraphMeta\nfrom src.domain.value_objects.twitter_meta import TwitterMeta\n\nLinkSpec: TypeAlias = tuple[str, str | None]\n\n\n@dataclass(frozen=True, slots=True)\nclass ParsedDocument:\n head: HeadMeta\n og: OpenGraphMeta\n twitter: TwitterMeta\n body: BodyStats\n hreflang: tuple[HreflangEntry, ...]\n internal_links: tuple[LinkSpec, ...]\n external_links: tuple[LinkSpec, ...]\n image_specs: tuple[tuple[str, str | None, str | None, int | None, int | None], ...]",
"replace_all": false
}
}
{
"tool_response": {
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/domain\/ports\/html_parser_port.py",
"oldString": "from abc import ABC, abstractmethod\nfrom dataclasses import dataclass\n\nfrom src.domain.value_objects.body_stats import BodyStats\nfrom src.domain.value_objects.head_meta import HeadMeta\nfrom src.domain.value_objects.hreflang import HreflangEntry\nfrom src.domain.value_objects.open_graph_meta import OpenGraphMeta\nfrom src.domain.value_objects.twitter_meta import TwitterMeta\n\n\n@dataclass(frozen=True, slots=True)\nclass ParsedDocument:\n head: HeadMeta\n og: OpenGraphMeta\n twitter: TwitterMeta\n body: BodyStats\n hreflang: tuple[HreflangEntry, ...]\n internal_links: tuple[str, ...]\n external_links: tuple[str, ...]\n image_specs: tuple[tuple[str, str | None, str | None, int | None, int | None], ...]",
"newString": "from abc import ABC, abstractmethod\nfrom dataclasses import dataclass\nfrom typing import TypeAlias\n\nfrom src.domain.value_objects.body_stats import BodyStats\nfrom src.domain.value_objects.head_meta import HeadMeta\nfrom src.domain.value_objects.hreflang import HreflangEntry\nfrom src.domain.value_objects.open_graph_meta import OpenGraphMeta\nfrom src.domain.value_objects.twitter_meta import TwitterMeta\n\nLinkSpec: TypeAlias = tuple[str, str | None]\n\n\n@dataclass(frozen=True, slots=True)\nclass ParsedDocument:\n head: HeadMeta\n og: OpenGraphMeta\n twitter: TwitterMeta\n body: BodyStats\n hreflang: tuple[HreflangEntry, ...]\n internal_links: tuple[LinkSpec, ...]\n external_links: tuple[LinkSpec, ...]\n image_specs: tuple[tuple[str, str | None, str | None, int | None, int | None], ...]",
"originalFile": "from __future__ import annotations\n\nfrom abc import ABC, abstractmethod\nfrom dataclasses import dataclass\n\nfrom src.domain.value_objects.body_stats import BodyStats\nfrom src.domain.value_objects.head_meta import HeadMeta\nfrom src.domain.value_objects.hreflang import HreflangEntry\nfrom src.domain.value_objects.open_graph_meta import OpenGraphMeta\nfrom src.domain.value_objects.twitter_meta import TwitterMeta\n\n\n@dataclass(frozen=True, slots=True)\nclass ParsedDocument:\n head: HeadMeta\n og: OpenGraphMeta\n twitter: TwitterMeta\n body: BodyStats\n hreflang: tuple[HreflangEntry, ...]\n internal_links: tuple[str, ...]\n external_links: tuple[str, ...]\n image_specs: tuple[tuple[str, str | None, str | None, int | None, int | None], ...]\n\n\nclass HtmlParserPort(ABC):\n @abstractmethod\n def parse(self, html: str, *, base_url: str) -> ParsedDocument: ...\n",
"structuredPatch": [
{
"oldStart": 2,
"oldLines": 6,
"newStart": 2,
"newLines": 7,
"lines": [
" ",
" from abc import ABC, abstractmethod",
" from dataclasses import dataclass",
"+from typing import TypeAlias",
" ",
" from src.domain.value_objects.body_stats import BodyStats",
" from src.domain.value_objects.head_meta import HeadMeta"
]
},
{
"oldStart": 9,
"oldLines": 7,
"newStart": 10,
"newLines": 9,
"lines": [
" from src.domain.value_objects.open_graph_meta import OpenGraphMeta",
" from src.domain.value_objects.twitter_meta import TwitterMeta",
" ",
"+LinkSpec: TypeAlias = tuple[str, str | None]",
" ",
"+",
" @dataclass(frozen=True, slots=True)",
" class ParsedDocument:",
" head: HeadMeta"
]
},
{
"oldStart": 17,
"oldLines": 8,
"newStart": 20,
"newLines": 8,
"lines": [
" twitter: TwitterMeta",
" body: BodyStats",
" hreflang: tuple[HreflangEntry, ...]",
"- internal_links: tuple[str, ...]",
"- external_links: tuple[str, ...]",
"+ internal_links: tuple[LinkSpec, ...]",
"+ external_links: tuple[LinkSpec, ...]",
" image_specs: tuple[tuple[str, str | None, str | None, int | None, int | None], ...]",
" ",
" "
]
}
],
"userModified": false,
"replaceAll": false
}
}