From 8df1799b52db00c9b78daeda4da97cb297c0638c Mon Sep 17 00:00:00 2001 From: dan-kur <95598696+dan-kur@users.noreply.github.com> Date: Thu, 26 Sep 2024 09:28:22 -0400 Subject: [PATCH] Update code parser regex pattern to handle empty code blocks with no whitespace (#167) --- council/utils/code_parser.py | 2 +- tests/unit/utils/test_code_parser.py | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/council/utils/code_parser.py b/council/utils/code_parser.py index fe194607..2c801725 100644 --- a/council/utils/code_parser.py +++ b/council/utils/code_parser.py @@ -46,7 +46,7 @@ def find_last(language: Optional[str] = None, text: str = "") -> Optional[CodeBl @staticmethod def _get_pattern(language: Optional[str]): - return r"```(\w*) *\n(.*?)\n```" if language is None else rf"```({language})\n(.*?)\n```" + return r"```(\w*) *\n(.*?)\n?```" if language is None else rf"```({language})\n(.*?)\n?```" @staticmethod def _build_generator(language: Optional[str], text: str = "") -> Iterable[CodeBlock]: diff --git a/tests/unit/utils/test_code_parser.py b/tests/unit/utils/test_code_parser.py index 9ae3e49a..2380643b 100644 --- a/tests/unit/utils/test_code_parser.py +++ b/tests/unit/utils/test_code_parser.py @@ -30,10 +30,29 @@ def setUp(self): "```", ] + self._empty_with_whitespace = [ + "```python", + "", + "```", + ] + + self._empty_no_whitespace = [ + "```python", + "```", + ] + self._message = "\n".join( ["Here is the code:"] + self._python1 + ["", "text", ""] + self._yaml + self._undefined + self._python2 ) + self._message_empty_with_whitespace = "\n".join( + ["Here is an empty code block with whitespace:"] + self._empty_with_whitespace + ) + + self._message_empty_no_whitespace = "\n".join( + ["Here is an empty code block with no whitespace:"] + self._empty_no_whitespace + ) + def test_parse_all_python(self): code_blocks = CodeParser.extract_code_blocs(language="python", text=self._message) self.assertEqual(len(code_blocks), 2) @@ -61,3 +80,11 @@ def test_find_last(self): code_block = CodeParser.find_last(text=self._message) self.assertIsNotNone(code_block) self.assertEqual("\n".join(self._python2[1:-1]), code_block.code) + + def test_empty_code_block_with_whitespace(self): + code_block = CodeParser.find_first(language="python", text=self._message_empty_with_whitespace) + self.assertEqual(code_block.code, "") + + def test_empty_code_block_no_whitespace(self): + code_block = CodeParser.find_first(language="python", text=self._message_empty_no_whitespace) + self.assertEqual(code_block.code, "")