{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": ".\/venv\/bin\/ruff check src tests scripts 2>&1 | tail -40",
"description": "Remaining ruff issues"
}
}
{
"tool_response": {
"stdout": "51 | final_url=row.get(\"final_url\"),\n52 | redirect_chain=tuple(json.loads(row[\"redirect_chain\"]) if row.get(\"redirect_chain\") else []),\n | ^^^^^\n53 | response_time_ms=row.get(\"response_time_ms\"),\n54 | ttfb_ms=row.get(\"ttfb_ms\"),\n |\n\nS608 Possible SQL injection vector through string-based query construction\n --> src\/infrastructure\/persistence\/page_repository.py:22:11\n |\n20 | )\n21 | _PLACEHOLDERS = \", \".join(f\"%({name.strip()})s\" for name in _COLUMNS.split(\",\"))\n22 | _INSERT = f\"INSERT INTO pages ({_COLUMNS}) VALUES ({_PLACEHOLDERS})\"\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n23 | _SELECT_BY_ID = \"SELECT * FROM pages WHERE id=%s\"\n24 | _SELECT_BY_CRAWL = (\n |\n\nS608 Possible SQL injection vector through string-based query construction\n --> src\/infrastructure\/persistence\/resource_repository.py:14:11\n |\n12 | )\n13 | _PLACEHOLDERS = \", \".join(f\"%({n.strip()})s\" for n in _COLUMNS.split(\",\"))\n14 | _INSERT = f\"INSERT INTO resources ({_COLUMNS}) VALUES ({_PLACEHOLDERS})\"\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n15 | _SELECT_BY_PAGE = \"SELECT * FROM resources WHERE page_id=%s ORDER BY id\"\n |\n\nPLC0415 `import` should be at the top-level of a file\n --> src\/infrastructure\/queue\/db_url_queue.py:64:5\n |\n63 | def _rebuild_url(url: str, url_hash: str) -> NormalizedUrl:\n64 | from src.domain.value_objects.normalized_url import normalize\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n65 |\n66 | rebuilt = normalize(url)\n |\n\nFound 11 errors.\nNo fixes available (1 hidden fix can be enabled with the `--unsafe-fixes` option).",
"stderr": "",
"interrupted": false,
"isImage": false,
"noOutputExpected": false
}
}