openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #22723
[Merge] lp:~trb143/openlp/mixins into lp:openlp
Tim Bentley has proposed merging lp:~trb143/openlp/mixins into lp:openlp.
Requested reviews:
Raoul Snyman (raoul-snyman)
For more details, see:
https://code.launchpad.net/~trb143/openlp/mixins/+merge/211108
Clean up all the duplicate values cut and pasted over the code.
Well start of it!
Fixed order and comment.
New mixin for tests to reduce C&P errors
--
https://code.launchpad.net/~trb143/openlp/mixins/+merge/211108
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/common/__init__.py'
--- openlp/core/common/__init__.py 2014-03-11 18:58:49 +0000
+++ openlp/core/common/__init__.py 2014-03-14 17:39:27 +0000
@@ -131,6 +131,7 @@
from .openlpmixin import OpenLPMixin
from .registry import Registry
from .registrymixin import RegistryMixin
+from .registryproperties import RegistryProperties
from .uistrings import UiStrings
from .settings import Settings
from .applocation import AppLocation
=== added file 'openlp/core/common/registryproperties.py'
--- openlp/core/common/registryproperties.py 1970-01-01 00:00:00 +0000
+++ openlp/core/common/registryproperties.py 2014-03-14 17:39:27 +0000
@@ -0,0 +1,117 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2014 Raoul Snyman #
+# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
+# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
+# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
+# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
+# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
+# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock, #
+# Frode Woldsund, Martin Zibricky, Patrick Zimmermann #
+# --------------------------------------------------------------------------- #
+# This program is free software; you can redistribute it and/or modify it #
+# under the terms of the GNU General Public License as published by the Free #
+# Software Foundation; version 2 of the License. #
+# #
+# This program is distributed in the hope that it will be useful, but WITHOUT #
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
+# more details. #
+# #
+# You should have received a copy of the GNU General Public License along #
+# with this program; if not, write to the Free Software Foundation, Inc., 59 #
+# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
+###############################################################################
+"""
+Provide Registry values for adding to classes
+"""
+import os
+
+from openlp.core.common import Registry
+
+
+class RegistryProperties(object):
+ """
+ This adds registry components to classes to use at run time.
+ """
+
+ @property
+ def application(self):
+ """
+ Adds the openlp to the class dynamically.
+ Windows needs to access the application in a dynamic manner.
+ """
+ if os.name == 'nt':
+ return Registry().get('application')
+ else:
+ if not hasattr(self, '_application') or not self._application:
+ self._application = Registry().get('application')
+ return self._application
+
+ @property
+ def plugin_manager(self):
+ """
+ Adds the plugin manager to the class dynamically
+ """
+ if not hasattr(self, '_plugin_manager') or not self._plugin_manager:
+ self._plugin_manager = Registry().get('plugin_manager')
+ return self._plugin_manager
+
+ @property
+ def image_manager(self):
+ """
+ Adds the image manager to the class dynamically
+ """
+ if not hasattr(self, '_image_manager') or not self._image_manager:
+ self._image_manager = Registry().get('image_manager')
+ return self._image_manager
+
+ @property
+ def media_controller(self):
+ """
+ Adds the media controller to the class dynamically
+ """
+ if not hasattr(self, '_media_controller') or not self._media_controller:
+ self._media_controller = Registry().get('media_controller')
+ return self._media_controller
+
+ @property
+ def service_manager(self):
+ """
+ Adds the service manager to the class dynamically
+ """
+ if not hasattr(self, '_service_manager') or not self._service_manager:
+ self._service_manager = Registry().get('service_manager')
+ return self._service_manager
+
+ @property
+ def preview_controller(self):
+ """
+ Adds the preview controller to the class dynamically
+ """
+ if not hasattr(self, '_preview_controller') or not self._preview_controller:
+ self._preview_controller = Registry().get('preview_controller')
+ return self._preview_controller
+
+ @property
+ def live_controller(self):
+ """
+ Adds the live controller to the class dynamically
+ """
+ if not hasattr(self, '_live_controller') or not self._live_controller:
+ self._live_controller = Registry().get('live_controller')
+ return self._live_controller
+
+ @property
+ def main_window(self):
+ """
+ Adds the main window to the class dynamically
+ """
+ if not hasattr(self, '_main_window') or not self._main_window:
+ self._main_window = Registry().get('main_window')
+ return self._main_window
+
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2014-02-27 21:39:44 +0000
+++ openlp/core/ui/mainwindow.py 2014-03-14 17:39:27 +0000
@@ -41,7 +41,7 @@
from PyQt4 import QtCore, QtGui
-from openlp.core.common import Registry, AppLocation, Settings, check_directory_exists, translate
+from openlp.core.common import Registry, RegistryProperties, AppLocation, Settings, check_directory_exists, translate
from openlp.core.lib import Renderer, OpenLPDockWidget, PluginManager, ImageManager, PluginStatus, ScreenList, \
build_icon
from openlp.core.lib.ui import UiStrings, create_action
@@ -106,8 +106,8 @@
self.control_splitter.setObjectName('control_splitter')
self.main_content_layout.addWidget(self.control_splitter)
# Create slide controllers
- self.preview_controller = PreviewController(self)
- self.live_controller = LiveController(self)
+ PreviewController(self)
+ LiveController(self)
preview_visible = Settings().value('user interface/preview panel')
live_visible = Settings().value('user interface/live panel')
panel_locked = Settings().value('user interface/lock panel')
@@ -460,7 +460,7 @@
self.mode_live_item.setStatusTip(translate('OpenLP.MainWindow', 'Set the view mode to Live.'))
-class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
+class MainWindow(QtGui.QMainWindow, Ui_MainWindow, RegistryProperties):
"""
The main window.
"""
@@ -492,13 +492,13 @@
self.copy_data = False
Settings().set_up_default_values()
self.about_form = AboutForm(self)
- self.media_controller = MediaController()
+ MediaController()
self.settings_form = SettingsForm(self)
self.formatting_tag_form = FormattingTagForm(self)
self.shortcut_form = ShortcutListForm(self)
# Set up the path with plugins
- self.plugin_manager = PluginManager(self)
- self.image_manager = ImageManager()
+ PluginManager(self)
+ ImageManager()
self.renderer = Renderer()
# Set up the interface
self.setupUi(self)
@@ -1380,16 +1380,4 @@
settings.remove('advanced/data path')
self.application.set_normal_cursor()
- def _get_application(self):
- """
- Adds the openlp to the class dynamically.
- Windows needs to access the application in a dynamic manner.
- """
- if os.name == 'nt':
- return Registry().get('application')
- else:
- if not hasattr(self, '_application'):
- self._application = Registry().get('application')
- return self._application
- application = property(_get_application)
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2014-02-25 20:11:48 +0000
+++ openlp/core/ui/slidecontroller.py 2014-03-14 17:39:27 +0000
@@ -36,7 +36,8 @@
from PyQt4 import QtCore, QtGui
-from openlp.core.common import Registry, Settings, SlideLimits, UiStrings, translate, RegistryMixin, OpenLPMixin
+from openlp.core.common import Registry, RegistryProperties, Settings, SlideLimits, UiStrings, translate, \
+ RegistryMixin, OpenLPMixin
from openlp.core.lib import OpenLPToolbar, ItemCapabilities, ServiceItem, ImageSource, ServiceItemAction, \
ScreenList, build_icon, build_html
from openlp.core.ui import HideMode, MainDisplay, Display, DisplayControllerType
@@ -101,7 +102,7 @@
Registry().execute('%s' % sender, [controller, args])
-class SlideController(DisplayController):
+class SlideController(DisplayController, RegistryProperties):
"""
SlideController is the slide controller widget. This widget is what the
user uses to control the displaying of verses/slides/etc on the screen.
@@ -1338,66 +1339,6 @@
action = self.sender()
self.display.audio_player.go_to(action.data())
- def _get_plugin_manager(self):
- """
- Adds the plugin manager to the class dynamically
- """
- if not hasattr(self, '_plugin_manager'):
- self._plugin_manager = Registry().get('plugin_manager')
- return self._plugin_manager
-
- plugin_manager = property(_get_plugin_manager)
-
- def _get_image_manager(self):
- """
- Adds the image manager to the class dynamically
- """
- if not hasattr(self, '_image_manager'):
- self._image_manager = Registry().get('image_manager')
- return self._image_manager
-
- image_manager = property(_get_image_manager)
-
- def _get_media_controller(self):
- """
- Adds the media controller to the class dynamically
- """
- if not hasattr(self, '_media_controller'):
- self._media_controller = Registry().get('media_controller')
- return self._media_controller
-
- media_controller = property(_get_media_controller)
-
- def _get_service_manager(self):
- """
- Adds the service manager to the class dynamically
- """
- if not hasattr(self, '_service_manager') or not self._service_manager:
- self._service_manager = Registry().get('service_manager')
- return self._service_manager
-
- service_manager = property(_get_service_manager)
-
- def _get_live_controller(self):
- """
- Adds the live controller to the class dynamically
- """
- if not hasattr(self, '_live_controller'):
- self._live_controller = Registry().get('live_controller')
- return self._live_controller
-
- live_controller = property(_get_live_controller)
-
- def _get_main_window(self):
- """
- Adds the main window to the class dynamically
- """
- if not hasattr(self, '_main_window'):
- self._main_window = Registry().get('main_window')
- return self._main_window
-
- main_window = property(_get_main_window)
-
class PreviewController(RegistryMixin, OpenLPMixin, SlideController):
"""
=== added file 'tests/helpers/testmixin.py'
--- tests/helpers/testmixin.py 1970-01-01 00:00:00 +0000
+++ tests/helpers/testmixin.py 2014-03-14 17:39:27 +0000
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
+
+###############################################################################
+# OpenLP - Open Source Lyrics Projection #
+# --------------------------------------------------------------------------- #
+# Copyright (c) 2008-2014 Raoul Snyman #
+# Portions copyright (c) 2008-2014 Tim Bentley, Gerald Britton, Jonathan #
+# Corwin, Samuel Findlay, Michael Gorven, Scott Guerrieri, Matthias Hub, #
+# Meinert Jordan, Armin Köhler, Erik Lundin, Edwin Lunando, Brian T. Meyer. #
+# Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias Põldaru, #
+# Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, #
+# Maikel Stuivenberg, Martin Thompson, Jon Tibble, Dave Warnock, #
+# Frode Woldsund, Martin Zibricky, Patrick Zimmermann #
+# --------------------------------------------------------------------------- #
+# This program is free software; you can redistribute it and/or modify it #
+# under the terms of the GNU General Public License as published by the Free #
+# Software Foundation; version 2 of the License. #
+# #
+# This program is distributed in the hope that it will be useful, but WITHOUT #
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
+# more details. #
+# #
+# You should have received a copy of the GNU General Public License along #
+# with this program; if not, write to the Free Software Foundation, Inc., 59 #
+# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
+###############################################################################
+"""
+Mixin class with helpers
+"""
+import os
+from tempfile import mkstemp
+
+from PyQt4 import QtCore, QtGui
+from openlp.core.common import Settings
+
+
+class TestMixin(object):
+
+ def get_application(self):
+ old_app_instance = QtCore.QCoreApplication.instance()
+ if old_app_instance is None:
+ self.app = QtGui.QApplication([])
+ else:
+ self.app = old_app_instance
+
+ def build_settings(self):
+ Settings.setDefaultFormat(Settings.IniFormat)
+ fd, self.ini_file = mkstemp('.ini')
+ Settings().set_filename(self.ini_file)
+
+ def destroy_settings(self):
+ if hasattr(self, 'fd'):
+ os.close(self.fd)
+ os.unlink(Settings().fileName())
=== modified file 'tests/interfaces/openlp_core_ui/test_filerenamedialog.py'
--- tests/interfaces/openlp_core_ui/test_filerenamedialog.py 2014-03-10 19:56:36 +0000
+++ tests/interfaces/openlp_core_ui/test_filerenamedialog.py 2014-03-14 17:39:27 +0000
@@ -8,20 +8,17 @@
from openlp.core.common import Registry
from openlp.core.ui import filerenameform
from tests.interfaces import MagicMock, patch
-
-
-class TestStartFileRenameForm(TestCase):
+from tests.helpers.testmixin import TestMixin
+
+
+class TestStartFileRenameForm(TestCase, TestMixin):
def setUp(self):
"""
Create the UI
"""
Registry.create()
- old_app_instance = QtCore.QCoreApplication.instance()
- if old_app_instance is None:
- self.app = QtGui.QApplication([])
- else:
- self.app = old_app_instance
+ self.get_application()
self.main_window = QtGui.QMainWindow()
Registry().register('main_window', self.main_window)
self.form = filerenameform.FileRenameForm()
=== modified file 'tests/interfaces/openlp_core_ui/test_thememanager.py'
--- tests/interfaces/openlp_core_ui/test_thememanager.py 2014-03-13 20:59:10 +0000
+++ tests/interfaces/openlp_core_ui/test_thememanager.py 2014-03-14 17:39:27 +0000
@@ -29,18 +29,15 @@
"""
Interface tests to test the themeManager class and related methods.
"""
-import os
from unittest import TestCase
-from tempfile import mkstemp
-
-from PyQt4 import QtGui, QtCore
from openlp.core.common import Registry, Settings
from openlp.core.ui import ThemeManager
from tests.functional import patch, MagicMock
-
-
-class TestThemeManager(TestCase):
+from tests.helpers.testmixin import TestMixin
+
+
+class TestThemeManager(TestCase, TestMixin):
"""
Test the functions in the ThemeManager module
"""
@@ -48,14 +45,8 @@
"""
Create the UI
"""
- Settings.setDefaultFormat(Settings.IniFormat)
- self.fd, self.ini_file = mkstemp('.ini')
- Settings().set_filename(self.ini_file)
- old_app_instance = QtCore.QCoreApplication.instance()
- if old_app_instance is None:
- self.app = QtGui.QApplication([])
- else:
- self.app = old_app_instance
+ self.build_settings()
+ self.get_application()
Registry.create()
self.theme_manager = ThemeManager()
@@ -63,8 +54,8 @@
"""
Delete all the C++ objects at the end so that we don't have a segfault
"""
- os.close(self.fd)
- os.unlink(Settings().fileName())
+
+ self.destroy_settings()
def initialise_test(self):
"""
@@ -75,7 +66,7 @@
self.theme_manager.load_first_time_themes = MagicMock()
Settings().setValue('themes/global theme', 'my_theme')
- # WHEN: the initialistion is run
+ # WHEN: the initialisation is run
self.theme_manager.bootstrap_initialise()
# THEN:
Follow ups