Skip to content

Commit

Permalink
Update code parser regex pattern to handle empty code blocks with no …
Browse files Browse the repository at this point in the history
…whitespace (#167)
  • Loading branch information
dan-kur authored Sep 26, 2024
1 parent 1550bde commit 8df1799
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
2 changes: 1 addition & 1 deletion council/utils/code_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]:
Expand Down
27 changes: 27 additions & 0 deletions tests/unit/utils/test_code_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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, "")

0 comments on commit 8df1799

Please sign in to comment.