Merge pull request #1165 from ostcar/list_of_speaker_overlay
Fix list_of_speaker overlay
This commit is contained in:
commit
0051987286
@ -98,7 +98,7 @@ def agenda_list_of_speakers(sender, **kwargs):
|
|||||||
list-of-speakers slide.
|
list-of-speakers slide.
|
||||||
"""
|
"""
|
||||||
slide = get_active_object()
|
slide = get_active_object()
|
||||||
if isinstance(slide, Item):
|
if slide is None or isinstance(slide, Item):
|
||||||
item = slide
|
item = slide
|
||||||
else:
|
else:
|
||||||
# TODO: If there are more the one items, use the first one in the
|
# TODO: If there are more the one items, use the first one in the
|
||||||
|
5
openslides/projector/exceptions.py
Normal file
5
openslides/projector/exceptions.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
class ProjectorExceptionWarning(RuntimeWarning):
|
||||||
|
pass
|
@ -1,12 +1,15 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.conf import settings
|
import warnings
|
||||||
|
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
|
|
||||||
from openslides.config.api import config
|
from openslides.config.api import config
|
||||||
from openslides.utils.exceptions import OpenSlidesError
|
from openslides.utils.exceptions import OpenSlidesError
|
||||||
|
|
||||||
|
from .exceptions import ProjectorExceptionWarning
|
||||||
|
|
||||||
|
|
||||||
class Widget(object):
|
class Widget(object):
|
||||||
"""
|
"""
|
||||||
@ -72,6 +75,9 @@ class Overlay(object):
|
|||||||
self.javascript_callback = get_javascript
|
self.javascript_callback = get_javascript
|
||||||
self.allways_active = allways_active
|
self.allways_active = allways_active
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
def get_widget_html(self):
|
def get_widget_html(self):
|
||||||
"""
|
"""
|
||||||
Returns the html code for the overlay widget.
|
Returns the html code for the overlay widget.
|
||||||
@ -90,10 +96,9 @@ class Overlay(object):
|
|||||||
try:
|
try:
|
||||||
value = self.get_html_wrapper(self.projector_html_callback())
|
value = self.get_html_wrapper(self.projector_html_callback())
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
if settings.DEBUG:
|
warnings.warn('%s in overlay "%s": %s'
|
||||||
raise exception
|
% (type(exception).__name__, self, exception),
|
||||||
else:
|
ProjectorExceptionWarning)
|
||||||
# Catch all errors, so an overlay can not kill the projector
|
|
||||||
value = ''
|
value = ''
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ from django.test.client import Client
|
|||||||
from mock import patch, MagicMock
|
from mock import patch, MagicMock
|
||||||
|
|
||||||
from openslides.agenda.models import Item, Speaker
|
from openslides.agenda.models import Item, Speaker
|
||||||
|
from openslides.agenda.signals import agenda_list_of_speakers
|
||||||
from openslides.config.api import config
|
from openslides.config.api import config
|
||||||
from openslides.participant.models import Group, User
|
from openslides.participant.models import Group, User
|
||||||
from openslides.projector.api import set_active_slide
|
from openslides.projector.api import set_active_slide
|
||||||
@ -300,3 +301,16 @@ class GlobalListOfSpeakersLinks(SpeakerViewTestCase):
|
|||||||
response = self.admin_client.get('/agenda/list_of_speakers/end_speach/')
|
response = self.admin_client.get('/agenda/list_of_speakers/end_speach/')
|
||||||
self.assertRedirects(response, '/projector/dashboard/')
|
self.assertRedirects(response, '/projector/dashboard/')
|
||||||
self.assertTrue(Speaker.objects.get(item__pk='1').end_time is not None)
|
self.assertTrue(Speaker.objects.get(item__pk='1').end_time is not None)
|
||||||
|
|
||||||
|
|
||||||
|
class TestOverlay(TestCase):
|
||||||
|
def test_overlay_with_no_model_slide(self):
|
||||||
|
"""
|
||||||
|
When a slide is active, that is not a model (for example the agenda)
|
||||||
|
an Attribute Error was raised.
|
||||||
|
"""
|
||||||
|
config['projector_active_slide'] = {'callback': None}
|
||||||
|
|
||||||
|
value = agenda_list_of_speakers(sender='test').get_projector_html()
|
||||||
|
|
||||||
|
self.assertEqual(value, '')
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from mock import MagicMock, patch
|
import warnings
|
||||||
|
|
||||||
|
from mock import MagicMock
|
||||||
|
|
||||||
from openslides.projector.projector import Overlay
|
from openslides.projector.projector import Overlay
|
||||||
from openslides.utils.test import TestCase
|
from openslides.utils.test import TestCase
|
||||||
@ -9,18 +11,11 @@ from openslides.utils.test import TestCase
|
|||||||
class OverlayTest(TestCase):
|
class OverlayTest(TestCase):
|
||||||
def test_error_in_html(self):
|
def test_error_in_html(self):
|
||||||
"""
|
"""
|
||||||
Tests that the methof get_projector_html does not raise any errors.
|
Tests that the method get_projector_html does not raise any errors.
|
||||||
"""
|
"""
|
||||||
get_projector_html = MagicMock(side_effect=Exception('no good error'))
|
get_projector_html = MagicMock(side_effect=Exception('no good error'))
|
||||||
overlay = Overlay('test_overlay', lambda: 'widget_html', get_projector_html)
|
overlay = Overlay('test_overlay', lambda: 'widget_html', get_projector_html)
|
||||||
|
|
||||||
# Test in productive mode
|
with warnings.catch_warnings(record=True) as warning:
|
||||||
with patch('openslides.projector.projector.settings.DEBUG', False):
|
overlay.get_projector_html()
|
||||||
self.assertEqual(overlay.get_projector_html(), '')
|
self.assertEqual(warning[0].message.message, 'Exception in overlay "test_overlay": no good error')
|
||||||
|
|
||||||
# Test in debug mode
|
|
||||||
with patch('openslides.projector.projector.settings.DEBUG', True):
|
|
||||||
self.assertRaisesMessage(
|
|
||||||
Exception,
|
|
||||||
'no good error',
|
|
||||||
overlay.get_projector_html)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user