import re import uuid from typing import List, Union import bleach from api.utils import get_object from assignments.models import Assignment from books.models import ContentBlock from core.logger import get_logger from wagtail.blocks import StreamValue logger = get_logger(__name__) class AssignmentParameterException(Exception): pass class ContentTypeException(Exception): pass def get_previous_item(previous_contents: Union[StreamValue, List[dict]], item: dict): if isinstance(previous_contents, StreamValue): contents = previous_contents.raw_data else: contents = previous_contents return next((c for c in contents if c.get("id", None) == item["id"]), None) def handle_text(text): is_list = bool(re.search(r"