Source code for pykubegrader.utils
import os
import random
from typing import Any, Optional
import panel as pn
api_base_url = os.getenv("DB_URL")
student_user = os.getenv("user_name_student")
student_pw = os.getenv("keys_student")
[docs]
def list_of_lists(options: list[Any]) -> bool:
return all(isinstance(elem, list) for elem in options)
[docs]
def shuffle_options(options: list[Any], seed: int) -> None:
"""
Shuffle options in list[Optional[str]] or list[list[Optional[str]]].
Shuffling is done in place.
We annotate options as list[Any] just to keep Mypy happy.
Args:
options (list[Any]): List of options to shuffle
seed (int): Seed for RNG
Returns:
None
"""
random.seed(seed)
if list_of_lists(options):
for i in range(len(options)):
inner_list: list[Optional[str]] = options[i]
random.shuffle(inner_list)
else:
random.shuffle(options)
[docs]
def shuffle_questions(
desc_widgets: list[pn.pane.HTML],
dropdowns: list[pn.widgets.Select] | list[pn.Column],
seed: int,
) -> list[tuple[pn.pane.HTML, pn.widgets.Select | pn.Column]]:
random.seed(seed)
# Combine widgets into pairs
widget_pairs = list(zip(desc_widgets, dropdowns))
random.shuffle(widget_pairs)
return widget_pairs