from typing import Generator, Type from ..core.exceptions import ProjectorException from ..utils.projector import ProjectorElement from .models import Assignment, AssignmentPoll class AssignmentSlide(ProjectorElement): """ Slide definitions for Assignment model. You can send a poll id to get a poll slide. """ name = "assignments/assignment" def check_data(self): if not Assignment.objects.filter(pk=self.config_entry.get("id")).exists(): raise ProjectorException("Election does not exist.") poll_id = self.config_entry.get("poll") if poll_id: # Poll slide. try: poll = AssignmentPoll.objects.get(pk=poll_id) except AssignmentPoll.DoesNotExist: raise ProjectorException("Poll does not exist.") if poll.assignment_id != self.config_entry.get("id"): raise ProjectorException( "Assignment id and poll do not belong together." ) def update_data(self): data = None try: assignment = Assignment.objects.get(pk=self.config_entry.get("id")) except Assignment.DoesNotExist: # Assignment does not exist, so just do nothing. pass else: data = {"agenda_item_id": assignment.agenda_item_id} return data def get_projector_elements() -> Generator[Type[ProjectorElement], None, None]: yield AssignmentSlide