import bleach import re import uuid from typing import List, Union from wagtail.blocks import StreamValue from api.utils import get_object from assignments.models import Assignment from books.models import ContentBlock 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"