{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/tests\/fixtures\/fixture_server.py",
"content": "\"\"\"Fixture HTTP server for integration + smoke tests.\n\nServes a small, deterministic site with known SEO findings:\n- \/ (home): complete, valid\n- \/double-h1: two <h1> tags\n- \/no-description: missing meta description\n- \/noindex: meta robots=noindex\n- \/broken-link: links to \/does-not-exist (404)\n- \/external-link: links to http:\/\/external.invalid (unreachable)\n\nUsage:\n python tests\/fixtures\/fixture_server.py --host 127.0.0.1 --port 8089\n\"\"\"\nfrom __future__ import annotations\n\nimport argparse\n\nfrom aiohttp import web\n\nPAGES: dict[str, str] = {\n \"\/\": \"\"\"<!doctype html><html lang=\"de\"><head>\n<meta charset=\"utf-8\"><title>Home<\/title>\n<meta name=\"description\" content=\"Fixture homepage\">\n<link rel=\"canonical\" href=\"http:\/\/127.0.0.1:8089\/\">\n<\/head><body>\n<h1>Home<\/h1>\n<a href=\"\/double-h1\">double<\/a>\n<a href=\"\/no-description\">nodesc<\/a>\n<a href=\"\/broken-link\">broken<\/a>\n<a href=\"\/external-link\">ext<\/a>\n<\/body><\/html>\"\"\",\n \"\/double-h1\": \"\"\"<!doctype html><html lang=\"de\"><head>\n<title>Double H1<\/title>\n<meta name=\"description\" content=\"double h1 page\">\n<\/head><body><h1>One<\/h1><h1>Two<\/h1><\/body><\/html>\"\"\",\n \"\/no-description\": \"\"\"<!doctype html><html lang=\"de\"><head>\n<title>No description<\/title>\n<\/head><body><h1>No desc<\/h1><\/body><\/html>\"\"\",\n \"\/noindex\": \"\"\"<!doctype html><html lang=\"de\"><head>\n<title>Noindex<\/title>\n<meta name=\"robots\" content=\"noindex,nofollow\">\n<\/head><body><h1>Noindex<\/h1><\/body><\/html>\"\"\",\n \"\/broken-link\": \"\"\"<!doctype html><html lang=\"de\"><head>\n<title>Broken<\/title><meta name=\"description\" content=\"broken link host\">\n<\/head><body><h1>Broken<\/h1><a href=\"\/does-not-exist\">dead<\/a><\/body><\/html>\"\"\",\n \"\/external-link\": \"\"\"<!doctype html><html lang=\"de\"><head>\n<title>Ext<\/title><meta name=\"description\" content=\"ext link host\">\n<\/head><body><h1>Ext<\/h1><a href=\"http:\/\/external.invalid\/\">ext<\/a><\/body><\/html>\"\"\",\n}\n\n\nasync def _page(request: web.Request) -> web.Response:\n path = request.path\n body = PAGES.get(path)\n if body is None:\n return web.Response(status=404, text=\"not found\")\n return web.Response(text=body, content_type=\"text\/html\")\n\n\ndef build_app() -> web.Application:\n app = web.Application()\n for path in PAGES:\n app.router.add_get(path, _page)\n app.router.add_get(\"\/{tail:.*}\", _page)\n return app\n\n\ndef main() -> None:\n parser = argparse.ArgumentParser()\n parser.add_argument(\"--host\", default=\"127.0.0.1\")\n parser.add_argument(\"--port\", type=int, default=8089)\n args = parser.parse_args()\n web.run_app(build_app(), host=args.host, port=args.port)\n\n\nif __name__ == \"__main__\":\n main()\n"
}
}
{
"tool_response": {
"type": "create",
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/tests\/fixtures\/fixture_server.py",
"content": "\"\"\"Fixture HTTP server for integration + smoke tests.\n\nServes a small, deterministic site with known SEO findings:\n- \/ (home): complete, valid\n- \/double-h1: two <h1> tags\n- \/no-description: missing meta description\n- \/noindex: meta robots=noindex\n- \/broken-link: links to \/does-not-exist (404)\n- \/external-link: links to http:\/\/external.invalid (unreachable)\n\nUsage:\n python tests\/fixtures\/fixture_server.py --host 127.0.0.1 --port 8089\n\"\"\"\nfrom __future__ import annotations\n\nimport argparse\n\nfrom aiohttp import web\n\nPAGES: dict[str, str] = {\n \"\/\": \"\"\"<!doctype html><html lang=\"de\"><head>\n<meta charset=\"utf-8\"><title>Home<\/title>\n<meta name=\"description\" content=\"Fixture homepage\">\n<link rel=\"canonical\" href=\"http:\/\/127.0.0.1:8089\/\">\n<\/head><body>\n<h1>Home<\/h1>\n<a href=\"\/double-h1\">double<\/a>\n<a href=\"\/no-description\">nodesc<\/a>\n<a href=\"\/broken-link\">broken<\/a>\n<a href=\"\/external-link\">ext<\/a>\n<\/body><\/html>\"\"\",\n \"\/double-h1\": \"\"\"<!doctype html><html lang=\"de\"><head>\n<title>Double H1<\/title>\n<meta name=\"description\" content=\"double h1 page\">\n<\/head><body><h1>One<\/h1><h1>Two<\/h1><\/body><\/html>\"\"\",\n \"\/no-description\": \"\"\"<!doctype html><html lang=\"de\"><head>\n<title>No description<\/title>\n<\/head><body><h1>No desc<\/h1><\/body><\/html>\"\"\",\n \"\/noindex\": \"\"\"<!doctype html><html lang=\"de\"><head>\n<title>Noindex<\/title>\n<meta name=\"robots\" content=\"noindex,nofollow\">\n<\/head><body><h1>Noindex<\/h1><\/body><\/html>\"\"\",\n \"\/broken-link\": \"\"\"<!doctype html><html lang=\"de\"><head>\n<title>Broken<\/title><meta name=\"description\" content=\"broken link host\">\n<\/head><body><h1>Broken<\/h1><a href=\"\/does-not-exist\">dead<\/a><\/body><\/html>\"\"\",\n \"\/external-link\": \"\"\"<!doctype html><html lang=\"de\"><head>\n<title>Ext<\/title><meta name=\"description\" content=\"ext link host\">\n<\/head><body><h1>Ext<\/h1><a href=\"http:\/\/external.invalid\/\">ext<\/a><\/body><\/html>\"\"\",\n}\n\n\nasync def _page(request: web.Request) -> web.Response:\n path = request.path\n body = PAGES.get(path)\n if body is None:\n return web.Response(status=404, text=\"not found\")\n return web.Response(text=body, content_type=\"text\/html\")\n\n\ndef build_app() -> web.Application:\n app = web.Application()\n for path in PAGES:\n app.router.add_get(path, _page)\n app.router.add_get(\"\/{tail:.*}\", _page)\n return app\n\n\ndef main() -> None:\n parser = argparse.ArgumentParser()\n parser.add_argument(\"--host\", default=\"127.0.0.1\")\n parser.add_argument(\"--port\", type=int, default=8089)\n args = parser.parse_args()\n web.run_app(build_app(), host=args.host, port=args.port)\n\n\nif __name__ == \"__main__\":\n main()\n",
"structuredPatch": [],
"originalFile": null,
"userModified": false
}
}