Source code for pykubegrader.widgets.question_processor

from typing import Optional

import panel as pn


[docs] def process_questions_and_codes( titles: str | list[str], ) -> tuple[list[str], list[Optional[pn.pane.Markdown]]]: # Ensure titles is a list if isinstance(titles, str): titles = [titles] processed_titles: list[str] = [] code_blocks: list[Optional[pn.pane.Markdown]] = [] for title in titles: # Split the title at the "```python" delimiter parts = title.split("```python", maxsplit=1) # First part is the title, stripped of leading/trailing whitespace title_without_code = parts[0].strip() # Remove aberrant ** from the beginning or end of the title if title_without_code.startswith("**"): title_without_code = title_without_code[2:] if title_without_code.endswith("**"): title_without_code = title_without_code[:-2] # Second part (if exists) contains the code block; split at closing ``` code = parts[1].split("```", maxsplit=1)[0].strip() if len(parts) > 1 else "" # Append processed title processed_titles.append(title_without_code) # Append code block as Markdown if it exists if code: code_blocks.append(pn.pane.Markdown(f"```python\n{code}\n```")) else: code_blocks.append(None) return processed_titles, code_blocks