from typing import Generator, Type from ..core.exceptions import ProjectorException from ..utils.projector import ProjectorElement from .models import Motion, MotionBlock class MotionSlide(ProjectorElement): """ Slide definitions for Motion model. """ name = 'motions/motion' def check_data(self): if not Motion.objects.filter(pk=self.config_entry.get('id')).exists(): raise ProjectorException('Motion does not exist.') def update_data(self): data = None try: motion = Motion.objects.get(pk=self.config_entry.get('id')) except Motion.DoesNotExist: # Motion does not exist, so just do nothing. pass else: data = {'agenda_item_id': motion.agenda_item_id} return data class MotionBlockSlide(ProjectorElement): """ Slide definitions for a block of motions (MotionBlock model). """ name = 'motions/motion-block' def check_data(self): if not MotionBlock.objects.filter(pk=self.config_entry.get('id')).exists(): raise ProjectorException('MotionBlock does not exist.') def update_data(self): data = None try: motion_block = MotionBlock.objects.get(pk=self.config_entry.get('id')) except MotionBlock.DoesNotExist: # MotionBlock does not exist, so just do nothing. pass else: data = {'agenda_item_id': motion_block.agenda_item_id} return data def get_projector_elements() -> Generator[Type[ProjectorElement], None, None]: yield MotionSlide yield MotionBlockSlide