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