failed NO_PATCH NO_PATCH UNSUBMITTED empty_patch(budget) · 4 tool calls · 140 s · Textualize/rich
Fix raw markup printed on prompt errors sometimes ## Type of changes - [x] Bug fix - [ ] New feature - [ ] Documentation / docstrings - [ ] Tests - [ ] Other ## Checklist - [x] I've run the latest [black](https://github.com/psf/black) with default args on new code. - [ ] I've updated CHANGELOG.md and CONTRIBUTORS.md where appropriate (see note about typos above). - [x] I've added tests for new code. - [x] I accept that @willmcgugan may be pedantic in the code review. ## Description PromptBase.on_validate_error() should explicitly ask for markup in case the console passed to it has markup disabled globally. Fixes #3881.
| # | Tool | Arguments | Result |
|---|---|---|---|
| 1 | run_command | {
"command": "grep -rn \"PromptBase.on_validate_error\" ."
} | {"status": "error", "error_type": "CommandError", "error_message": "Command failed with exit code 1", "details": {"stdout": "", "stderr": "", "exit_code": 1}}full{"status": "error", "error_type": "CommandError", "error_message": "Command failed with exit code 1", "details": {"stdout": "", "stderr": "", "exit_code": 1}} |
| 2 | run_command | {
"command": "grep -rn \"on_validate_error\" ."
} | {"status": "ok", "stdout": "./rich/prompt.py:258: def on_validate_error(self, value: str, error: InvalidResponse) -> None:\n./rich/prompt.py:298: self.on_validafull{"status": "ok", "stdout": "./rich/prompt.py:258: def on_validate_error(self, value: str, error: InvalidResponse) -> None:\n./rich/prompt.py:298: self.on_validate_error(value, error)\n", "exit_code": 0} |
| 3 | read_file | {
"filepath": "rich/prompt.py",
"start_line": 250,
"end_line": 270
} | {"status": "ok", "filepath": "rich/prompt.py", "content": " # return the original choice, not the lower case version\n return_value = self.response_type(\n selffull{"status": "ok", "filepath": "rich/prompt.py", "content": " # return the original choice, not the lower case version\n return_value = self.response_type(\n self.choices[\n [choice.lower() for choice in self.choices].index(value.lower())\n ]\n )\n return return_value\n\n def on_validate_error(self, value: str, error: InvalidResponse) -> None:\n \"\"\"Called to handle validation error.\n\n Args:\n value (str): String entered by user.\n error (InvalidResponse): Exception instance the initiated the error.\n \"\"\"\n self.console.print(error)\n\n def pre_prompt(self) -> None:\n \"\"\"Hook to display something before the prompt.\"\"\"\n\n @overload\n", "start_line": 250, "end_line": 270, "total_lines": 400, "is_truncated": false} |
| 4 | run_command | {
"command": "cat > /tmp/repro.py <<'EOF'\nfrom rich.console import Console\nfrom rich.prompt import Prompt, InvalidResponse\n\nclass MyPrompt(Prompt):\n def validate_response(self, response: str) -> str:\n if response != \"yes\":\n raise InvalidResponse(\"[red]Invalid response![/red]\")\n return response\n\ndef test_markup_disabled():\n # Create a console with markup disabled globally\n console = Console(markup=False)\n prompt = MyPrompt(console=console)\n \n # We want to see if the error message is printed with markup\n # Since we can't easily capture the output of prompt.ask in a non-interactive way \n # without mocking input, we can call on_validate_error directly.\n \n import io\n from contextlib import redirect_stdout\n \n f = io.StringIO()\n with redirect_stdout(f):\n prompt.on_validate_error(\"no\", InvalidResponse(\"[red]Invalid response![/red]\"))\n \n output = f.getvalue()\n print(f\"Output: {repr(output)}\")\n if \"[red]\" in output:\n print(\"FAILED: Markup was printed raw\")\n else:\n print(\"PASSED: Markup was processed\")\n\nif __name__ == \"__main__\":\n test_markup_disabled()\nEOF\npython3 /tmp/repro.py"
} | {"status": "ok", "stdout": "Output: '[red]Invalid response![/red]\\n'\nFAILED: Markup was printed raw\n", "exit_code": 0}full{"status": "ok", "stdout": "Output: '[red]Invalid response![/red]\\n'\nFAILED: Markup was printed raw\n", "exit_code": 0} |