{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/domain\/entities\/crawl.py",
"content": "from __future__ import annotations\n\nfrom dataclasses import dataclass\nfrom datetime import datetime\nfrom typing import Mapping\n\nfrom src.domain.value_objects.enums import CrawlMode, CrawlStatus, TriggerSource\n\n\n@dataclass(frozen=True, slots=True)\nclass Crawl:\n id: int | None\n base_url: str\n mode: CrawlMode\n started_at: datetime\n finished_at: datetime | None\n status: CrawlStatus\n trigger_source: TriggerSource\n config: Mapping[str, object]\n total_urls: int = 0\n total_errors: int = 0\n\n def __post_init__(self) -> None:\n if self.finished_at is not None and self.finished_at < self.started_at:\n raise ValueError(\"finished_at must not precede started_at\")\n if self.total_urls < 0 or self.total_errors < 0:\n raise ValueError(\"counters must be non-negative\")\n\n @property\n def is_finished(self) -> bool:\n return self.status in {CrawlStatus.COMPLETED, CrawlStatus.FAILED, CrawlStatus.ABORTED}\n"
}
}
{
"tool_response": {
"type": "create",
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/domain\/entities\/crawl.py",
"content": "from __future__ import annotations\n\nfrom dataclasses import dataclass\nfrom datetime import datetime\nfrom typing import Mapping\n\nfrom src.domain.value_objects.enums import CrawlMode, CrawlStatus, TriggerSource\n\n\n@dataclass(frozen=True, slots=True)\nclass Crawl:\n id: int | None\n base_url: str\n mode: CrawlMode\n started_at: datetime\n finished_at: datetime | None\n status: CrawlStatus\n trigger_source: TriggerSource\n config: Mapping[str, object]\n total_urls: int = 0\n total_errors: int = 0\n\n def __post_init__(self) -> None:\n if self.finished_at is not None and self.finished_at < self.started_at:\n raise ValueError(\"finished_at must not precede started_at\")\n if self.total_urls < 0 or self.total_errors < 0:\n raise ValueError(\"counters must be non-negative\")\n\n @property\n def is_finished(self) -> bool:\n return self.status in {CrawlStatus.COMPLETED, CrawlStatus.FAILED, CrawlStatus.ABORTED}\n",
"structuredPatch": [],
"originalFile": null,
"userModified": false
}
}