← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~raoul-snyman/openlp/better-tabs into lp:openlp

 

Raoul Snyman has proposed merging lp:~raoul-snyman/openlp/better-tabs into lp:openlp.

Requested reviews:
  Tim Bentley (trb143)

For more details, see:
https://code.launchpad.net/~raoul-snyman/openlp/better-tabs/+merge/215555

Playing with the tabs on the "Library" toolbox. Added a test. Fixed up PEP8 so that code analysis passes.

--------------------------------
[SUCCESS] http://ci.openlp.org/job/Branch-01-Pull/291/
[SUCCESS] http://ci.openlp.org/job/Branch-02-Functional-Tests/251/
[SUCCESS] http://ci.openlp.org/job/Branch-03-Interface-Tests/199/
[SUCCESS] http://ci.openlp.org/job/Branch-04-Windows_Tests/160/
[SUCCESS] http://ci.openlp.org/job/Branch-05-Code-Analysis/117/
-- 
https://code.launchpad.net/~raoul-snyman/openlp/better-tabs/+merge/215555
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/__init__.py'
--- openlp/__init__.py	2013-12-24 08:56:50 +0000
+++ openlp/__init__.py	2014-04-12 20:30:00 +0000
@@ -30,7 +30,6 @@
 The :mod:`openlp` module contains all the project produced OpenLP functionality
 """
 
-import openlp.core
-import openlp.plugins
+from openlp import core, plugins
 
 __all__ = ['core', 'plugins']

=== modified file 'openlp/core/common/__init__.py'
--- openlp/core/common/__init__.py	2014-04-04 20:20:00 +0000
+++ openlp/core/common/__init__.py	2014-04-12 20:30:00 +0000
@@ -38,7 +38,7 @@
 
 from PyQt4 import QtCore
 
-log = logging.getLogger(__name__+'.__init__')
+log = logging.getLogger(__name__ + '.__init__')
 
 
 FIRST_CAMEL_REGEX = re.compile('(.)([A-Z][a-z]+)')
@@ -76,6 +76,9 @@
 def get_frozen_path(frozen_option, non_frozen_option):
     """
     Return a path based on the system status.
+
+    :param frozen_option:
+    :param non_frozen_option:
     """
     if hasattr(sys, 'frozen') and sys.frozen == 1:
         return frozen_option

=== modified file 'openlp/core/lib/__init__.py'
--- openlp/core/lib/__init__.py	2014-03-11 18:58:49 +0000
+++ openlp/core/lib/__init__.py	2014-04-12 20:30:00 +0000
@@ -39,7 +39,7 @@
 
 from openlp.core.common import translate
 
-log = logging.getLogger(__name__+'.__init__')
+log = logging.getLogger(__name__ + '.__init__')
 
 
 class ServiceItemContext(object):

=== modified file 'openlp/core/lib/mediamanageritem.py'
--- openlp/core/lib/mediamanageritem.py	2014-03-16 21:25:23 +0000
+++ openlp/core/lib/mediamanageritem.py	2014-04-12 20:30:00 +0000
@@ -168,29 +168,29 @@
         Create buttons for the media item toolbar
         """
         toolbar_actions = []
-        ## Import Button ##
+        # Import Button
         if self.has_import_icon:
             toolbar_actions.append(['Import', StringContent.Import,
                                     ':/general/general_import.png', self.on_import_click])
-        ## Load Button ##
+        # Load Button
         if self.has_file_icon:
             toolbar_actions.append(['Load', StringContent.Load, ':/general/general_open.png', self.on_file_click])
-        ## New Button ##
+        # New Button
         if self.has_new_icon:
             toolbar_actions.append(['New', StringContent.New, ':/general/general_new.png', self.on_new_click])
-        ## Edit Button ##
+        # Edit Button
         if self.has_edit_icon:
             toolbar_actions.append(['Edit', StringContent.Edit, ':/general/general_edit.png', self.on_edit_click])
-        ## Delete Button ##
+        # Delete Button
         if self.has_delete_icon:
             toolbar_actions.append(['Delete', StringContent.Delete,
                                     ':/general/general_delete.png', self.on_delete_click])
-        ## Preview ##
+        # Preview
         toolbar_actions.append(['Preview', StringContent.Preview,
                                 ':/general/general_preview.png', self.on_preview_click])
-        ## Live Button ##
+        # Live Button
         toolbar_actions.append(['Live', StringContent.Live, ':/general/general_live.png', self.on_live_click])
-        ## Add to service Button ##
+        # Add to service Button
         toolbar_actions.append(['Service', StringContent.Service, ':/general/general_add.png', self.on_add_click])
         for action in toolbar_actions:
             if action[0] == StringContent.Preview:

=== modified file 'openlp/core/lib/plugin.py'
--- openlp/core/lib/plugin.py	2014-03-20 19:10:31 +0000
+++ openlp/core/lib/plugin.py	2014-04-12 20:30:00 +0000
@@ -101,7 +101,7 @@
     ``add_import_menu_item(import_menu)``
         Add an item to the Import menu.
 
-    ``add_export_menu_Item(export_menu)``
+    ``add_export_menu_item(export_menu)``
         Add an item to the Export menu.
 
     ``create_settings_tab()``
@@ -226,7 +226,7 @@
         """
         pass
 
-    def add_export_menu_Item(self, export_menu):
+    def add_export_menu_item(self, export_menu):
         """
         Create a menu item and add it to the "Export" menu.
 
@@ -329,22 +329,24 @@
     def set_plugin_ui_text_strings(self, tooltips):
         """
         Called to define all translatable texts of the plugin
+
+        :param tooltips:
         """
-        ## Load Action ##
+        # Load Action
         self.__set_name_text_string(StringContent.Load, UiStrings().Load, tooltips['load'])
-        ## Import Action ##
+        # Import Action
         self.__set_name_text_string(StringContent.Import, UiStrings().Import, tooltips['import'])
-        ## New Action ##
+        # New Action
         self.__set_name_text_string(StringContent.New, UiStrings().Add, tooltips['new'])
-        ## Edit Action ##
+        # Edit Action
         self.__set_name_text_string(StringContent.Edit, UiStrings().Edit, tooltips['edit'])
-        ## Delete Action ##
+        # Delete Action
         self.__set_name_text_string(StringContent.Delete, UiStrings().Delete, tooltips['delete'])
-        ## Preview Action ##
+        # Preview Action
         self.__set_name_text_string(StringContent.Preview, UiStrings().Preview, tooltips['preview'])
-        ## Send Live Action ##
+        # Send Live Action
         self.__set_name_text_string(StringContent.Live, UiStrings().Live, tooltips['live'])
-        ## Add to Service Action ##
+        # Add to Service Action
         self.__set_name_text_string(StringContent.Service, UiStrings().Service, tooltips['service'])
 
     def __set_name_text_string(self, name, title, tooltip):

=== modified file 'openlp/core/lib/pluginmanager.py'
--- openlp/core/lib/pluginmanager.py	2014-03-18 20:36:02 +0000
+++ openlp/core/lib/pluginmanager.py	2014-04-12 20:30:00 +0000
@@ -161,7 +161,7 @@
         """
         for plugin in self.plugins:
             if plugin.status is not PluginStatus.Disabled:
-                plugin.add_export_menu_Item(self.main_window.file_export_menu)
+                plugin.add_export_menu_item(self.main_window.file_export_menu)
 
     def hook_tools_menu(self):
         """

=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py	2014-03-18 20:36:02 +0000
+++ openlp/core/lib/serviceitem.py	2014-04-12 20:30:00 +0000
@@ -383,7 +383,7 @@
         self.will_auto_start = header.get('will_auto_start', False)
         self.processor = header.get('processor', None)
         self.has_original_files = True
-        #TODO Remove me in 2,3 build phase
+        # TODO: Remove me in 2,3 build phase
         if self.is_capable(ItemCapabilities.HasDetailedTitleDisplay):
             self.capabilities.remove(ItemCapabilities.HasDetailedTitleDisplay)
             self.processor = self.title

=== modified file 'openlp/core/ui/exceptiondialog.py'
--- openlp/core/ui/exceptiondialog.py	2014-03-20 19:10:31 +0000
+++ openlp/core/ui/exceptiondialog.py	2014-04-12 20:30:00 +0000
@@ -95,15 +95,15 @@
         Translate the widgets on the fly.
         """
         exception_dialog.setWindowTitle(translate('OpenLP.ExceptionDialog', 'Error Occurred'))
-        self.description_explanation.setText(translate('OpenLP.ExceptionDialog',
-                                             'Please enter a description of what you were doing to cause this error '
-                                             '\n(Minimum 20 characters)'))
-        self.message_label.setText(translate('OpenLP.ExceptionDialog', 'Oops! '
-                                             'OpenLP hit a problem, and couldn\'t recover. The text in the box '
-                                             'below contains information that might be helpful to the OpenLP '
-                                             'developers, so please e-mail it to bugs@xxxxxxxxxx, along with a '
-                                             'detailed description of what you were doing when the problem '
-                                             'occurred.'))
+        self.description_explanation.setText(
+            translate('OpenLP.ExceptionDialog', 'Please enter a description of what you were doing to cause this error '
+                                                '\n(Minimum 20 characters)'))
+        self.message_label.setText(
+            translate('OpenLP.ExceptionDialog', 'Oops! OpenLP hit a problem, and couldn\'t recover. The text in the '
+                                                'box below contains information that might be helpful to the OpenLP '
+                                                'developers, so please e-mail it to bugs@xxxxxxxxxx, along with a '
+                                                'detailed description of what you were doing when the problem '
+                                                'occurred.'))
         self.send_report_button.setText(translate('OpenLP.ExceptionDialog', 'Send E-Mail'))
         self.save_report_button.setText(translate('OpenLP.ExceptionDialog', 'Save to File'))
         self.attach_tile_button.setText(translate('OpenLP.ExceptionDialog', 'Attach File'))

=== modified file 'openlp/core/ui/firsttimewizard.py'
--- openlp/core/ui/firsttimewizard.py	2013-12-24 15:55:01 +0000
+++ openlp/core/ui/firsttimewizard.py	2014-04-12 20:30:00 +0000
@@ -211,9 +211,9 @@
         first_time_wizard.setWindowTitle(translate('OpenLP.FirstTimeWizard', 'First Time Wizard'))
         self.title_label.setText('<span style="font-size:14pt; font-weight:600;">%s</span>' %
                                  translate('OpenLP.FirstTimeWizard', 'Welcome to the First Time Wizard'))
-        self.information_label.setText(translate('OpenLP.FirstTimeWizard',
-                                       'This wizard will help you to configure OpenLP for initial use. '
-                                       'Click the next button below to start.'))
+        self.information_label.setText(
+            translate('OpenLP.FirstTimeWizard', 'This wizard will help you to configure OpenLP for initial use. '
+                                                'Click the next button below to start.'))
         self.plugin_page.setTitle(translate('OpenLP.FirstTimeWizard', 'Activate required Plugins'))
         self.plugin_page.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select the Plugins you wish to use. '))
         self.songs_check_box.setText(translate('OpenLP.FirstTimeWizard', 'Songs'))

=== modified file 'openlp/core/ui/formattingtagform.py'
--- openlp/core/ui/formattingtagform.py	2014-03-20 19:10:31 +0000
+++ openlp/core/ui/formattingtagform.py	2014-04-12 20:30:00 +0000
@@ -63,7 +63,6 @@
         self.services = FormattingTagController()
         self.tag_table_widget.itemSelectionChanged.connect(self.on_row_selected)
         self.new_button.clicked.connect(self.on_new_clicked)
-        #self.save_button.clicked.connect(self.on_saved_clicked)
         self.delete_button.clicked.connect(self.on_delete_clicked)
         self.tag_table_widget.currentCellChanged.connect(self.on_current_cell_changed)
         self.button_box.rejected.connect(self.close)
@@ -202,5 +201,4 @@
             if errors:
                 QtGui.QMessageBox.warning(self, translate('OpenLP.FormattingTagForm', 'Validation Error'), errors,
                                           QtGui.QMessageBox.Ok)
-            #self.tag_table_widget.selectRow(pre_row - 1)
             self.tag_table_widget.resizeRowsToContents()

=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py	2014-04-11 00:29:22 +0000
+++ openlp/core/ui/mainwindow.py	2014-04-12 20:30:00 +0000
@@ -56,29 +56,27 @@
 log = logging.getLogger(__name__)
 
 MEDIA_MANAGER_STYLE = """
-  QToolBox {
+QToolBox {
     padding-bottom: 2px;
-  }
-  QToolBox::tab {
-    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
-        stop: 0 palette(button), stop: 0.5 palette(button),
-        stop: 1.0 palette(mid));
-    border: 1px groove palette(mid);
-    border-radius: 5px;
-  }
-  QToolBox::tab:selected {
-    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
-        stop: 0 palette(light), stop: 0.5 palette(midlight),
-        stop: 1.0 palette(dark));
-    border: 1px groove palette(dark);
+}
+QToolBox::tab {
+    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+        stop: 0 palette(button), stop: 1.0 palette(mid));
+    border: 1px solid palette(mid);
+    border-radius: 3px;
+}
+QToolBox::tab:selected {
+    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+        stop: 0 palette(light), stop: 1.0 palette(button));
+    border: 1px solid palette(mid);
     font-weight: bold;
-  }
+}
 """
 
 PROGRESSBAR_STYLE = """
-    QProgressBar{
-       height: 10px;
-    }
+QProgressBar{
+    height: 10px;
+}
 """
 
 
@@ -369,7 +367,7 @@
         self.settings_menu.setTitle(translate('OpenLP.MainWindow', '&Settings'))
         self.settings_language_menu.setTitle(translate('OpenLP.MainWindow', '&Language'))
         self.help_menu.setTitle(translate('OpenLP.MainWindow', '&Help'))
-        self.media_manager_dock.setWindowTitle(translate('OpenLP.MainWindow', 'Media Manager'))
+        self.media_manager_dock.setWindowTitle(translate('OpenLP.MainWindow', 'Library'))
         self.service_manager_dock.setWindowTitle(translate('OpenLP.MainWindow', 'Service Manager'))
         self.theme_manager_dock.setWindowTitle(translate('OpenLP.MainWindow', 'Theme Manager'))
         self.file_new_item.setText(translate('OpenLP.MainWindow', '&New'))
@@ -396,12 +394,12 @@
         self.settings_shortcuts_item.setText(translate('OpenLP.MainWindow', 'Configure &Shortcuts...'))
         self.formatting_tag_item.setText(translate('OpenLP.MainWindow', 'Configure &Formatting Tags...'))
         self.settings_configure_item.setText(translate('OpenLP.MainWindow', '&Configure OpenLP...'))
-        self.settings_export_item.setStatusTip(translate('OpenLP.MainWindow',
-                                               'Export OpenLP settings to a specified *.config file'))
+        self.settings_export_item.setStatusTip(
+            translate('OpenLP.MainWindow', 'Export OpenLP settings to a specified *.config file'))
         self.settings_export_item.setText(translate('OpenLP.MainWindow', 'Settings'))
-        self.settings_import_item.setStatusTip(translate('OpenLP.MainWindow',
-                                               'Import OpenLP settings from a specified *.config file previously '
-                                               'exported on this or another machine'))
+        self.settings_import_item.setStatusTip(
+            translate('OpenLP.MainWindow', 'Import OpenLP settings from a specified *.config file previously '
+                                           'exported on this or another machine'))
         self.settings_import_item.setText(translate('OpenLP.MainWindow', 'Settings'))
         self.view_media_manager_item.setText(translate('OpenLP.MainWindow', '&Media Manager'))
         self.view_media_manager_item.setToolTip(translate('OpenLP.MainWindow', 'Toggle Media Manager'))
@@ -862,7 +860,7 @@
                 section = 'general'
                 section_key = section + "/" + key
             # Make sure it's a valid section for us.
-            if not section in setting_sections:
+            if section not in setting_sections:
                 continue
         # We have a good file, import it.
         for section_key in import_keys:

=== modified file 'openlp/core/ui/media/__init__.py'
--- openlp/core/ui/media/__init__.py	2014-03-17 19:05:55 +0000
+++ openlp/core/ui/media/__init__.py	2014-04-12 20:30:00 +0000
@@ -35,7 +35,7 @@
 
 from PyQt4 import QtCore
 
-log = logging.getLogger(__name__+'.__init__')
+log = logging.getLogger(__name__ + '.__init__')
 
 
 class MediaState(object):

=== modified file 'openlp/core/ui/media/mediacontroller.py'
--- openlp/core/ui/media/mediacontroller.py	2014-03-20 19:10:31 +0000
+++ openlp/core/ui/media/mediacontroller.py	2014-04-12 20:30:00 +0000
@@ -137,7 +137,7 @@
         for player in list(self.media_players.values()):
             if player.is_active:
                 for item in player.audio_extensions_list:
-                    if not item in self.audio_extensions_list:
+                    if item not in self.audio_extensions_list:
                         self.audio_extensions_list.append(item)
                         suffix_list.append(item[2:])
         self.video_extensions_list = []
@@ -184,8 +184,8 @@
             return False
         saved_players, overridden_player = get_media_players()
         invalid_media_players = \
-            [mediaPlayer for mediaPlayer in saved_players if not mediaPlayer in self.media_players or
-                not self.media_players[mediaPlayer].check_available()]
+            [media_player for media_player in saved_players if media_player not in self.media_players or
+                not self.media_players[media_player].check_available()]
         if invalid_media_players:
             for invalidPlayer in invalid_media_players:
                 saved_players.remove(invalidPlayer)

=== modified file 'openlp/core/ui/media/webkitplayer.py'
--- openlp/core/ui/media/webkitplayer.py	2013-12-31 20:29:03 +0000
+++ openlp/core/ui/media/webkitplayer.py	2014-04-12 20:30:00 +0000
@@ -174,34 +174,11 @@
 <div id="flash" class="size" style="visibility:hidden"></div>
 """
 
-VIDEO_EXT = [
-    '*.3gp',
-    '*.3gpp',
-    '*.3g2',
-    '*.3gpp2',
-    '*.aac',
-    '*.flv',
-    '*.f4a',
-    '*.f4b',
-    '*.f4p',
-    '*.f4v',
-    '*.mov',
-    '*.m4a',
-    '*.m4b',
-    '*.m4p',
-    '*.m4v',
-    '*.mkv',
-    '*.mp4',
-    '*.ogv',
-    '*.webm',
-    '*.mpg', '*.wmv', '*.mpeg', '*.avi',
-    '*.swf'
-]
+VIDEO_EXT = ['*.3gp', '*.3gpp', '*.3g2', '*.3gpp2', '*.aac', '*.flv', '*.f4a', '*.f4b', '*.f4p', '*.f4v', '*.mov',
+             '*.m4a', '*.m4b', '*.m4p', '*.m4v', '*.mkv', '*.mp4', '*.ogv', '*.webm', '*.mpg', '*.wmv', '*.mpeg',
+             '*.avi', '*.swf']
 
-AUDIO_EXT = [
-    '*.mp3',
-    '*.ogg'
-]
+AUDIO_EXT = ['*.mp3', '*.ogg']
 
 
 class WebkitPlayer(MediaPlayer):
@@ -411,10 +388,9 @@
         """
         Return some information about this player
         """
-        return(translate('Media.player', 'Webkit is a media player which runs '
-               'inside a web browser. This player allows text over video to be '
-               'rendered.') +
-               '<br/> <strong>' + translate('Media.player', 'Audio') +
-               '</strong><br/>' + str(AUDIO_EXT) + '<br/><strong>' +
-               translate('Media.player', 'Video') + '</strong><br/>' +
-               str(VIDEO_EXT) + '<br/>')
+        part1 = translate('Media.player', 'Webkit is a media player which runs inside a web browser. This player '
+                                          'allows text over video to be rendered.')
+        part2 = translate('Media.player', 'Audio')
+        part3 = translate('Media.player', 'Video')
+        return part1 + '<br/> <strong>' + part2 + '</strong><br/>' + str(AUDIO_EXT) + '<br/><strong>' + part3 + \
+            '</strong><br/>' + str(VIDEO_EXT) + '<br/>'

=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py	2014-03-20 19:10:31 +0000
+++ openlp/core/ui/servicemanager.py	2014-04-12 20:30:00 +0000
@@ -399,7 +399,7 @@
         :param suffix_list: New Suffix's to be supported
         """
         for suffix in suffix_list:
-            if not suffix in self.suffixes:
+            if suffix not in self.suffixes:
                 self.suffixes.append(suffix)
 
     def on_new_service_clicked(self, field=None):
@@ -629,7 +629,7 @@
         for item in self.service_items:
             self.main_window.increment_progress_bar()
             service_item = item['service_item'].get_service_repr(self._save_lite)
-            #TODO: check for file item on save.
+            # TODO: check for file item on save.
             service.append({'serviceitem': service_item})
             self.main_window.increment_progress_bar()
         service_content = json.dumps(service)
@@ -754,8 +754,9 @@
                     items = json.load(file_to)
                 else:
                     critical_error_message_box(message=translate('OpenLP.ServiceManager',
-                                               'The service file you are trying to open is in an old format.\n '
-                                               'Please save it using OpenLP 2.0.2 or greater.'))
+                                                                 'The service file you are trying to open is in an old '
+                                                                 'format.\n Please save it using OpenLP 2.0.2 or '
+                                                                 'greater.'))
                     return
                 file_to.close()
                 self.new_file()

=== modified file 'openlp/core/ui/settingsform.py'
--- openlp/core/ui/settingsform.py	2014-03-20 19:10:31 +0000
+++ openlp/core/ui/settingsform.py	2014-04-12 20:30:00 +0000
@@ -150,5 +150,5 @@
 
         :param function:  The function to be called
         """
-        if not function in self.processes:
+        if function not in self.processes:
             self.processes.append(function)

=== modified file 'openlp/core/ui/themelayoutdialog.py'
--- openlp/core/ui/themelayoutdialog.py	2013-12-26 17:36:00 +0000
+++ openlp/core/ui/themelayoutdialog.py	2014-04-12 20:30:00 +0000
@@ -44,7 +44,6 @@
         Set up the UI
         """
         themeLayoutDialog.setObjectName('themeLayoutDialogDialog')
-        #themeLayoutDialog.resize(300, 200)
         self.preview_layout = QtGui.QVBoxLayout(themeLayoutDialog)
         self.preview_layout.setObjectName('preview_layout')
         self.preview_area = QtGui.QWidget(themeLayoutDialog)

=== modified file 'openlp/core/ui/themestab.py'
--- openlp/core/ui/themestab.py	2014-03-17 19:05:55 +0000
+++ openlp/core/ui/themestab.py	2014-04-12 20:30:00 +0000
@@ -114,17 +114,19 @@
         self.global_group_box.setTitle(translate('OpenLP.ThemesTab', 'Global Theme'))
         self.level_group_box.setTitle(translate('OpenLP.ThemesTab', 'Theme Level'))
         self.song_level_radio_button.setText(translate('OpenLP.ThemesTab', 'S&ong Level'))
-        self.song_level_label.setText(translate('OpenLP.ThemesTab', 'Use the theme from each song '
-                                      'in the database. If a song doesn\'t have a theme associated with '
-                                      'it, then use the service\'s theme. If the service doesn\'t have '
-                                      'a theme, then use the global theme.'))
+        self.song_level_label.setText(
+            translate('OpenLP.ThemesTab', 'Use the theme from each song in the database. If a song doesn\'t have a '
+                                          'theme associated with it, then use the service\'s theme. If the service '
+                                          'doesn\'t have a theme, then use the global theme.'))
         self.service_level_radio_button.setText(translate('OpenLP.ThemesTab', '&Service Level'))
-        self.service_level_label.setText(translate('OpenLP.ThemesTab', 'Use the theme from the service, '
-                                         'overriding any of the individual songs\' themes. If the '
-                                         'service doesn\'t have a theme, then use the global theme.'))
+        self.service_level_label.setText(
+            translate('OpenLP.ThemesTab', 'Use the theme from the service, overriding any of the individual '
+                                          'songs\' themes. If the service doesn\'t have a theme, then use the global '
+                                          'theme.'))
         self.global_level_radio_button.setText(translate('OpenLP.ThemesTab', '&Global Level'))
-        self.global_level_label.setText(translate('OpenLP.ThemesTab', 'Use the global theme, overriding '
-                                        'any themes associated with either the service or the songs.'))
+        self.global_level_label.setText(translate('OpenLP.ThemesTab', 'Use the global theme, overriding any themes '
+                                                                      'associated with either the service or the '
+                                                                      'songs.'))
 
     def load(self):
         """

=== modified file 'openlp/core/utils/__init__.py'
--- openlp/core/utils/__init__.py	2014-03-20 19:10:31 +0000
+++ openlp/core/utils/__init__.py	2014-04-12 20:30:00 +0000
@@ -56,7 +56,7 @@
 
 from openlp.core.common import translate
 
-log = logging.getLogger(__name__+'.__init__')
+log = logging.getLogger(__name__ + '.__init__')
 
 APPLICATION_VERSION = {}
 IMAGES_FILTER = None

=== modified file 'openlp/plugins/alerts/alertsplugin.py'
--- openlp/plugins/alerts/alertsplugin.py	2014-03-21 18:23:35 +0000
+++ openlp/plugins/alerts/alertsplugin.py	2014-04-12 20:30:00 +0000
@@ -207,12 +207,12 @@
         """
         Called to define all translatable texts of the plugin
         """
-        ## Name PluginList ##
+        # Name PluginList
         self.text_strings[StringContent.Name] = {
             'singular': translate('AlertsPlugin', 'Alert', 'name singular'),
             'plural': translate('AlertsPlugin', 'Alerts', 'name plural')
         }
-        ## Name for MediaDockManager, SettingsManager ##
+        # Name for MediaDockManager, SettingsManager
         self.text_strings[StringContent.VisibleName] = {
             'title': translate('AlertsPlugin', 'Alerts', 'container title')
         }

=== modified file 'openlp/plugins/bibles/bibleplugin.py'
--- openlp/plugins/bibles/bibleplugin.py	2014-03-21 18:23:35 +0000
+++ openlp/plugins/bibles/bibleplugin.py	2014-04-12 20:30:00 +0000
@@ -88,8 +88,6 @@
         self.import_bible_item.setVisible(True)
         action_list = ActionList.get_instance()
         action_list.add_action(self.import_bible_item, UiStrings().Import)
-        # Do not add the action to the list yet.
-        #action_list.add_action(self.export_bible_item, UiStrings().Export)
         # Set to invisible until we can export bibles
         self.export_bible_item.setVisible(False)
         self.tools_upgrade_item.setVisible(bool(self.manager.old_bible_databases))
@@ -104,7 +102,6 @@
         action_list = ActionList.get_instance()
         action_list.remove_action(self.import_bible_item, UiStrings().Import)
         self.import_bible_item.setVisible(False)
-        #action_list.remove_action(self.export_bible_item, UiStrings().Export)
         self.export_bible_item.setVisible(False)
 
     def app_startup(self):
@@ -115,19 +112,27 @@
         if self.manager.old_bible_databases:
             if QtGui.QMessageBox.information(
                     self.main_window, translate('OpenLP', 'Information'),
-                translate('OpenLP', 'Bible format has changed.\nYou have to upgrade your existing Bibles.\n'
-                          'Should OpenLP upgrade now?'),
-                QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) == \
+                    translate('OpenLP', 'Bible format has changed.\nYou have to upgrade your '
+                                        'existing Bibles.\nShould OpenLP upgrade now?'),
+                    QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) == \
                     QtGui.QMessageBox.Yes:
                 self.on_tools_upgrade_Item_triggered()
 
     def add_import_menu_item(self, import_menu):
+        """
+
+        :param import_menu:
+        """
         self.import_bible_item = create_action(import_menu, 'importBibleItem',
                                                text=translate('BiblesPlugin', '&Bible'), visible=False,
                                                triggers=self.on_bible_import_click)
         import_menu.addAction(self.import_bible_item)
 
-    def add_export_menu_Item(self, export_menu):
+    def add_export_menu_item(self, export_menu):
+        """
+
+        :param export_menu:
+        """
         self.export_bible_item = create_action(export_menu, 'exportBibleItem',
                                                text=translate('BiblesPlugin', '&Bible'), visible=False)
         export_menu.addAction(self.export_bible_item)
@@ -190,12 +195,12 @@
         """
         Called to define all translatable texts of the plugin
         """
-        ## Name PluginList ##
+        # Name PluginList
         self.text_strings[StringContent.Name] = {
             'singular': translate('BiblesPlugin', 'Bible', 'name singular'),
             'plural': translate('BiblesPlugin', 'Bibles', 'name plural')
         }
-        ## Name for MediaDockManager, SettingsManager ##
+        # Name for MediaDockManager, SettingsManager
         self.text_strings[StringContent.VisibleName] = {
             'title': translate('BiblesPlugin', 'Bibles', 'container title')
         }

=== modified file 'openlp/plugins/bibles/lib/db.py'
--- openlp/plugins/bibles/lib/db.py	2014-04-12 14:43:08 +0000
+++ openlp/plugins/bibles/lib/db.py	2014-04-12 20:30:00 +0000
@@ -649,10 +649,10 @@
             'chapter, verse_count FROM chapters WHERE book_reference_id = ?', (book_ref_id,))
         try:
             return {
-                'id': chapters[chapter-1][0],
-                'book_reference_id': chapters[chapter-1][1],
-                'chapter': chapters[chapter-1][2],
-                'verse_count': chapters[chapter-1][3]
+                'id': chapters[chapter - 1][0],
+                'book_reference_id': chapters[chapter - 1][1],
+                'chapter': chapters[chapter - 1][2],
+                'verse_count': chapters[chapter - 1][3]
             }
         except (IndexError, TypeError):
             return None
@@ -846,13 +846,13 @@
             file_path = os.path.join(
                 AppLocation.get_directory(AppLocation.DataDir), 'bibles', 'alternative_book_names.sqlite')
             if not os.path.exists(file_path):
-                #create new DB, create table alternative_book_names
+                # create new DB, create table alternative_book_names
                 AlternativeBookNamesDB.conn = sqlite3.connect(file_path)
                 AlternativeBookNamesDB.conn.execute(
                     'CREATE TABLE alternative_book_names(id INTEGER NOT NULL, '
                     'book_reference_id INTEGER, language_id INTEGER, name VARCHAR(50), PRIMARY KEY (id))')
             else:
-                #use existing DB
+                # use existing DB
                 AlternativeBookNamesDB.conn = sqlite3.connect(file_path)
             AlternativeBookNamesDB.cursor = AlternativeBookNamesDB.conn.cursor()
         return AlternativeBookNamesDB.cursor

=== modified file 'openlp/plugins/bibles/lib/http.py'
--- openlp/plugins/bibles/lib/http.py	2014-03-21 18:23:35 +0000
+++ openlp/plugins/bibles/lib/http.py	2014-04-12 20:30:00 +0000
@@ -552,10 +552,10 @@
                 self.application.set_busy_cursor()
                 search_results = self.get_chapter(book, reference[1])
                 if search_results and search_results.has_verse_list():
-                    ## We have found a book of the bible lets check to see
-                    ## if it was there. By reusing the returned book name
-                    ## we get a correct book. For example it is possible
-                    ## to request ac and get Acts back.
+                    # We have found a book of the bible lets check to see
+                    # if it was there. By reusing the returned book name
+                    # we get a correct book. For example it is possible
+                    # to request ac and get Acts back.
                     book_name = search_results.book
                     self.application.process_events()
                     # Check to see if book/chapter exists.

=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py	2014-03-21 18:23:35 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py	2014-04-12 20:30:00 +0000
@@ -480,6 +480,10 @@
                 self.reload_bibles()
 
     def on_delete_click(self):
+        """
+        When the delete button is pressed
+        """
+        bible = None
         if self.quickTab.isVisible():
             bible = self.quickVersionComboBox.currentText()
         elif self.advancedTab.isVisible():
@@ -488,8 +492,9 @@
             if QtGui.QMessageBox.question(
                     self, UiStrings().ConfirmDelete,
                     translate('BiblesPlugin.MediaItem', 'Are you sure you want to completely delete "%s" Bible from '
-                              'OpenLP?\n\nYou will need to re-import this Bible to use it again.') % bible,
-                QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No),
+                                                        'OpenLP?\n\nYou will need to re-import this Bible to use it '
+                                                        'again.') % bible,
+                    QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No),
                     QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No:
                 return
             self.plugin.manager.delete_bible(bible)
@@ -752,7 +757,7 @@
                     log.exception('The second_search_results does not have as many verses as the search_results.')
                     break
                 bible_text = '%s %d%s%d (%s, %s)' % (book, verse.chapter, verse_separator, verse.verse, version,
-                             second_version)
+                                                     second_version)
             else:
                 bible_text = '%s %d%s%d (%s)' % (book, verse.chapter, verse_separator, verse.verse, version)
             bible_verse = QtGui.QListWidgetItem(bible_text)

=== modified file 'openlp/plugins/bibles/lib/versereferencelist.py'
--- openlp/plugins/bibles/lib/versereferencelist.py	2014-03-09 10:26:28 +0000
+++ openlp/plugins/bibles/lib/versereferencelist.py	2014-04-12 20:30:00 +0000
@@ -94,5 +94,5 @@
                 result = result + ', ' + version['permission']
         result = result.rstrip()
         if result.endswith(','):
-            return result[:len(result)-1]
+            return result[:len(result) - 1]
         return result

=== modified file 'openlp/plugins/custom/customplugin.py'
--- openlp/plugins/custom/customplugin.py	2014-03-17 19:05:55 +0000
+++ openlp/plugins/custom/customplugin.py	2014-04-12 20:30:00 +0000
@@ -43,7 +43,7 @@
 
 __default_settings__ = {
     'custom/db type': 'sqlite',
-    'custom/last search type':  CustomSearch.Titles,
+    'custom/last search type': CustomSearch.Titles,
     'custom/display footer': True,
     'custom/add custom from service': True
 }
@@ -97,12 +97,12 @@
         """
         Called to define all translatable texts of the plugin
         """
-        ## Name PluginList ##
+        # Name PluginList
         self.text_strings[StringContent.Name] = {
             'singular': translate('CustomPlugin', 'Custom Slide', 'name singular'),
             'plural': translate('CustomPlugin', 'Custom Slides', 'name plural')
         }
-        ## Name for MediaDockManager, SettingsManager ##
+        # Name for MediaDockManager, SettingsManager
         self.text_strings[StringContent.VisibleName] = {
             'title': translate('CustomPlugin', 'Custom Slides', 'container title')
         }

=== modified file 'openlp/plugins/custom/forms/editcustomslideform.py'
--- openlp/plugins/custom/forms/editcustomslideform.py	2014-01-01 10:56:23 +0000
+++ openlp/plugins/custom/forms/editcustomslideform.py	2014-04-12 20:30:00 +0000
@@ -1,4 +1,3 @@
-#lint:disable
 # -*- coding: utf-8 -*-
 # vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
 

=== modified file 'openlp/plugins/custom/lib/customxmlhandler.py'
--- openlp/plugins/custom/lib/customxmlhandler.py	2014-03-17 19:05:55 +0000
+++ openlp/plugins/custom/lib/customxmlhandler.py	2014-04-12 20:30:00 +0000
@@ -51,7 +51,7 @@
 log = logging.getLogger(__name__)
 
 
-#TODO: These classes need to be refactored into a single class.
+# TODO: These classes need to be refactored into a single class.
 class CustomXMLBuilder(object):
     """
     This class builds the XML used to describe songs.

=== modified file 'openlp/plugins/images/imageplugin.py'
--- openlp/plugins/images/imageplugin.py	2014-03-18 20:36:02 +0000
+++ openlp/plugins/images/imageplugin.py	2014-04-12 20:30:00 +0000
@@ -95,12 +95,12 @@
         """
         Called to define all translatable texts of the plugin.
         """
-        ## Name PluginList ##
+        # Name PluginList
         self.text_strings[StringContent.Name] = {
             'singular': translate('ImagePlugin', 'Image', 'name singular'),
             'plural': translate('ImagePlugin', 'Images', 'name plural')
         }
-        ## Name for MediaDockManager, SettingsManager ##
+        # Name for MediaDockManager, SettingsManager
         self.text_strings[StringContent.VisibleName] = {'title': translate('ImagePlugin', 'Images', 'container title')}
         # Middle Header Bar
         tooltips = {

=== modified file 'openlp/plugins/media/lib/mediaitem.py'
--- openlp/plugins/media/lib/mediaitem.py	2014-03-21 18:23:35 +0000
+++ openlp/plugins/media/lib/mediaitem.py	2014-04-12 20:30:00 +0000
@@ -95,7 +95,6 @@
         self.reset_action.setToolTip(UiStrings().ResetLiveBG)
         self.automatic = UiStrings().Automatic
         self.display_type_label.setText(translate('MediaPlugin.MediaItem', 'Use Player:'))
-        #self.rebuild_players()
 
     def required_icons(self):
         """
@@ -141,7 +140,7 @@
         if index == 0:
             set_media_players(player)
         else:
-            set_media_players(player, player[index-1])
+            set_media_players(player, player[index - 1])
 
     def on_reset_click(self):
         """

=== modified file 'openlp/plugins/media/mediaplugin.py'
--- openlp/plugins/media/mediaplugin.py	2014-03-17 07:14:51 +0000
+++ openlp/plugins/media/mediaplugin.py	2014-04-12 20:30:00 +0000
@@ -73,12 +73,12 @@
         """
         Called to define all translatable texts of the plugin
         """
-        ## Name PluginList ##
+        # Name PluginList
         self.text_strings[StringContent.Name] = {
             'singular': translate('MediaPlugin', 'Media', 'name singular'),
             'plural': translate('MediaPlugin', 'Media', 'name plural')
         }
-        ## Name for MediaDockManager, SettingsManager ##
+        # Name for MediaDockManager, SettingsManager
         self.text_strings[StringContent.VisibleName] = {
             'title': translate('MediaPlugin', 'Media', 'container title')
         }

=== modified file 'openlp/plugins/presentations/lib/impresscontroller.py'
--- openlp/plugins/presentations/lib/impresscontroller.py	2014-03-21 21:38:08 +0000
+++ openlp/plugins/presentations/lib/impresscontroller.py	2014-04-12 20:30:00 +0000
@@ -377,8 +377,6 @@
         Stop the presentation, remove from screen.
         """
         log.debug('stop presentation OpenOffice')
-        # deactivate should hide the screen according to docs, but doesn't
-        #self.control.deactivate()
         self.presentation.end()
         self.control = None
 

=== modified file 'openlp/plugins/presentations/lib/pdfcontroller.py'
--- openlp/plugins/presentations/lib/pdfcontroller.py	2014-03-21 21:38:08 +0000
+++ openlp/plugins/presentations/lib/pdfcontroller.py	2014-04-12 20:30:00 +0000
@@ -74,7 +74,7 @@
         runlog = ''
         log.debug('testing program_path: %s', program_path)
         try:
-            runlog = check_output([program_path,  '--help'], stderr=STDOUT)
+            runlog = check_output([program_path, '--help'], stderr=STDOUT)
         except CalledProcessError as e:
             runlog = e.output
         except Exception:
@@ -183,7 +183,7 @@
         self.image_files = []
         self.num_pages = -1
 
-    def gs_get_resolution(self,  size):
+    def gs_get_resolution(self, size):
         """
         Only used when using ghostscript
         Ghostscript can't scale automatically while keeping aspect like mupdf, so we need
@@ -236,7 +236,7 @@
         if os.path.isfile(os.path.join(self.get_temp_folder(), 'mainslide001.png')):
             created_files = sorted(os.listdir(self.get_temp_folder()))
             for fn in created_files:
-                if os.path.isfile(os.path.join(self.get_temp_folder(),  fn)):
+                if os.path.isfile(os.path.join(self.get_temp_folder(), fn)):
                     self.image_files.append(os.path.join(self.get_temp_folder(), fn))
             self.num_pages = len(self.image_files)
             return True

=== modified file 'openlp/plugins/presentations/lib/powerpointcontroller.py'
--- openlp/plugins/presentations/lib/powerpointcontroller.py	2014-03-08 21:23:47 +0000
+++ openlp/plugins/presentations/lib/powerpointcontroller.py	2014-04-12 20:30:00 +0000
@@ -247,7 +247,7 @@
             Starts a presentation from the beginning.
             """
             log.debug('start_presentation')
-            #SlideShowWindow measures its size/position by points, not pixels
+            # SlideShowWindow measures its size/position by points, not pixels
             try:
                 dpi = win32ui.GetActiveWindow().GetDC().GetDeviceCaps(88)
             except win32ui.error:

=== modified file 'openlp/plugins/presentations/lib/presentationtab.py'
--- openlp/plugins/presentations/lib/presentationtab.py	2014-01-14 21:57:43 +0000
+++ openlp/plugins/presentations/lib/presentationtab.py	2014-04-12 20:30:00 +0000
@@ -175,10 +175,10 @@
         if pdf_program == '':
             enable_pdf_program = 0
         if pdf_program != Settings().value(self.settings_section + '/pdf_program'):
-            Settings().setValue(self.settings_section + '/pdf_program',  pdf_program)
+            Settings().setValue(self.settings_section + '/pdf_program', pdf_program)
             changed = True
         if enable_pdf_program != Settings().value(self.settings_section + '/enable_pdf_program'):
-            Settings().setValue(self.settings_section + '/enable_pdf_program',  enable_pdf_program)
+            Settings().setValue(self.settings_section + '/enable_pdf_program', enable_pdf_program)
             changed = True
         if changed:
             self.settings_form.register_post_process('mediaitem_suffix_reset')

=== modified file 'openlp/plugins/presentations/presentationplugin.py'
--- openlp/plugins/presentations/presentationplugin.py	2014-03-04 18:49:30 +0000
+++ openlp/plugins/presentations/presentationplugin.py	2014-04-12 20:30:00 +0000
@@ -156,12 +156,12 @@
         """
         Called to define all translatable texts of the plugin.
         """
-        ## Name PluginList ##
+        # Name PluginList
         self.text_strings[StringContent.Name] = {
             'singular': translate('PresentationPlugin', 'Presentation', 'name singular'),
             'plural': translate('PresentationPlugin', 'Presentations', 'name plural')
         }
-        ## Name for MediaDockManager, SettingsManager ##
+        # Name for MediaDockManager, SettingsManager
         self.text_strings[StringContent.VisibleName] = {
             'title': translate('PresentationPlugin', 'Presentations', 'container title')
         }

=== modified file 'openlp/plugins/remotes/remoteplugin.py'
--- openlp/plugins/remotes/remoteplugin.py	2014-03-21 21:38:08 +0000
+++ openlp/plugins/remotes/remoteplugin.py	2014-04-12 20:30:00 +0000
@@ -92,12 +92,12 @@
         """
         Called to define all translatable texts of the plugin
         """
-        ## Name PluginList ##
+        # Name PluginList
         self.text_strings[StringContent.Name] = {
             'singular': translate('RemotePlugin', 'Remote', 'name singular'),
             'plural': translate('RemotePlugin', 'Remotes', 'name plural')
         }
-        ## Name for MediaDockManager, SettingsManager ##
+        # Name for MediaDockManager, SettingsManager
         self.text_strings[StringContent.VisibleName] = {
             'title': translate('RemotePlugin', 'Remote', 'container title')
         }

=== modified file 'openlp/plugins/songs/forms/duplicatesongremovalform.py'
--- openlp/plugins/songs/forms/duplicatesongremovalform.py	2014-03-21 21:38:08 +0000
+++ openlp/plugins/songs/forms/duplicatesongremovalform.py	2014-04-12 20:30:00 +0000
@@ -114,7 +114,7 @@
         self.review_layout.addWidget(self.review_scroll_area)
         self.review_page_id = self.addPage(self.review_page)
         # Add a dummy page to the end, to prevent the finish button to appear and the next button do disappear on the
-        #review page.
+        # review page.
         self.dummy_page = QtGui.QWizardPage()
         self.dummy_page_id = self.addPage(self.dummy_page)
 
@@ -217,12 +217,12 @@
         duplicate_added = False
         for duplicate_group in self.duplicate_song_list:
             # Skip the first song in the duplicate lists, since the first one has to be an earlier song.
-            if search_song in duplicate_group and not duplicate_song in duplicate_group:
+            if search_song in duplicate_group and duplicate_song not in duplicate_group:
                 duplicate_group.append(duplicate_song)
                 duplicate_group_found = True
                 duplicate_added = True
                 break
-            elif not search_song in duplicate_group and duplicate_song in duplicate_group:
+            elif search_song not in duplicate_group and duplicate_song in duplicate_group:
                 duplicate_group.append(search_song)
                 duplicate_group_found = True
                 duplicate_added = True

=== modified file 'openlp/plugins/songs/forms/editsongform.py'
--- openlp/plugins/songs/forms/editsongform.py	2014-03-23 22:27:07 +0000
+++ openlp/plugins/songs/forms/editsongform.py	2014-04-12 20:30:00 +0000
@@ -675,14 +675,13 @@
                         separator = parts.find(':')
                         if separator >= 0:
                             verse_name = parts[0:separator].strip()
-                            verse_num = parts[separator+1:].strip()
+                            verse_num = parts[separator + 1:].strip()
                         else:
                             verse_name = parts
                             verse_num = '1'
                         verse_index = VerseType.from_loose_input(verse_name)
                         verse_tag = VerseType.tags[verse_index]
                         # Later we need to handle v1a as well.
-                        #regex = re.compile(r'(\d+\w.)')
                         regex = re.compile(r'\D*(\d+)\D*')
                         match = regex.match(verse_num)
                         if match:

=== modified file 'openlp/plugins/songs/forms/editverseform.py'
--- openlp/plugins/songs/forms/editverseform.py	2014-03-04 18:49:30 +0000
+++ openlp/plugins/songs/forms/editverseform.py	2014-04-12 20:30:00 +0000
@@ -75,7 +75,7 @@
         text = self.verse_text_edit.toPlainText()
         position = self.verse_text_edit.textCursor().position()
         insert_string = '[---]'
-        if position and text[position-1] != '\n':
+        if position and text[position - 1] != '\n':
             insert_string = '\n' + insert_string
         if position == len(text) or text[position] != '\n':
             insert_string += '\n'

=== modified file 'openlp/plugins/songs/forms/mediafilesdialog.py'
--- openlp/plugins/songs/forms/mediafilesdialog.py	2014-03-21 21:38:08 +0000
+++ openlp/plugins/songs/forms/mediafilesdialog.py	2014-04-12 20:30:00 +0000
@@ -66,8 +66,10 @@
     def retranslateUi(self, media_files_dialog):
         """
         Translate the UI on the fly.
+
+        :param media_files_dialog:
         """
         media_files_dialog.setWindowTitle(translate('SongsPlugin.MediaFilesForm', 'Select Media File(s)'))
-        self.select_label.setText(translate('SongsPlugin.MediaFilesForm',
-                                  'Select one or more audio files from the list below, and click OK to import them '
-                                  'into this song.'))
+        self.select_label.setText(translate('SongsPlugin.MediaFilesForm', 'Select one or more audio files from the '
+                                                                          'list below, and click OK to import them '
+                                                                          'into this song.'))

=== modified file 'openlp/plugins/songs/forms/songexportform.py'
--- openlp/plugins/songs/forms/songexportform.py	2014-03-04 18:49:30 +0000
+++ openlp/plugins/songs/forms/songexportform.py	2014-04-12 20:30:00 +0000
@@ -152,9 +152,9 @@
         self.setWindowTitle(translate('SongsPlugin.ExportWizardForm', 'Song Export Wizard'))
         self.title_label.setText(WizardStrings.HeaderStyle %
                                  translate('OpenLP.Ui', 'Welcome to the Song Export Wizard'))
-        self.information_label.setText(translate('SongsPlugin.ExportWizardForm', 'This wizard will help to'
-                                       ' export your songs to the open and free <strong>OpenLyrics </strong> worship '
-                                       'song format.'))
+        self.information_label.setText(
+            translate('SongsPlugin.ExportWizardForm', 'This wizard will help to export your songs to the open and free '
+                                                      '<strong>OpenLyrics </strong> worship song format.'))
         self.available_songs_page.setTitle(translate('SongsPlugin.ExportWizardForm', 'Select Songs'))
         self.available_songs_page.setSubTitle(translate('SongsPlugin.ExportWizardForm',
                                               'Check the songs you want to export.'))

=== modified file 'openlp/plugins/songs/lib/cclifileimport.py'
--- openlp/plugins/songs/lib/cclifileimport.py	2014-03-21 21:38:08 +0000
+++ openlp/plugins/songs/lib/cclifileimport.py	2014-04-12 20:30:00 +0000
@@ -270,13 +270,13 @@
                         verse_text = ''
                         verse_start = False
             else:
-                #line_number=0, song title
+                # line_number=0, song title
                 if line_number == 0:
                     self.title = clean_line
                     line_number += 1
-                #line_number=1, verses
+                # line_number=1, verses
                 elif line_number == 1:
-                    #line_number=1, ccli number, first line after verses
+                    # line_number=1, ccli number, first line after verses
                     if clean_line.startswith('CCLI'):
                         line_number += 1
                         ccli_parts = clean_line.split(' ')
@@ -319,21 +319,21 @@
                             # last part. Add l so as to keep the CRLF
                             verse_text = verse_text + line
                 else:
-                    #line_number=2, copyright
+                    # line_number=2, copyright
                     if line_number == 2:
                         line_number += 1
                         if clean_line.startswith('©'):
                             self.copyright = clean_line
                         else:
                             song_author = clean_line
-                    #n=3, authors
+                    # n=3, authors
                     elif line_number == 3:
                         line_number += 1
                         if song_author:
                             self.copyright = clean_line
                         else:
                             song_author = clean_line
-                    #line_number=4, comments lines before last line
+                    # line_number=4, comments lines before last line
                     elif line_number == 4 and not clean_line.startswith('CCL'):
                         self.comments += clean_line
         # split on known separators

=== modified file 'openlp/plugins/songs/lib/ewimport.py'
--- openlp/plugins/songs/lib/ewimport.py	2014-03-29 13:31:28 +0000
+++ openlp/plugins/songs/lib/ewimport.py	2014-04-12 20:30:00 +0000
@@ -305,7 +305,7 @@
         elif field_desc.field_type == FieldType.Logical:
             return field ^ 0x80 == 1
         elif field_desc.field_type == FieldType.Memo or field_desc.field_type == FieldType.Blob:
-            block_start, blob_size = struct.unpack_from('<II', field, len(field)-10)
+            block_start, blob_size = struct.unpack_from('<II', field, len(field) - 10)
             sub_block = block_start & 0xff
             block_start &= ~0xff
             self.memo_file.seek(block_start)

=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py	2014-03-21 21:38:08 +0000
+++ openlp/plugins/songs/lib/mediaitem.py	2014-04-12 20:30:00 +0000
@@ -96,7 +96,7 @@
 
     def add_end_header_bar(self):
         self.toolbar.addSeparator()
-        ## Song Maintenance Button ##
+        # Song Maintenance Button
         self.maintenance_action = self.toolbar.add_toolbar_action('maintenance_action',
                                                                   icon=':/songs/song_maintenance.png',
                                                                   triggers=self.on_song_maintenance_click)
@@ -266,7 +266,7 @@
                 # Do not display temporary songs
                 if song.temporary:
                     continue
-                if song_number and not song_number in song.song_number:
+                if song_number and song_number not in song.song_number:
                     continue
                 song_detail = '%s - %s (%s)' % (book.name, song.song_number, song.title)
                 song_name = QtGui.QListWidgetItem(song_detail)

=== modified file 'openlp/plugins/songs/songsplugin.py'
--- openlp/plugins/songs/songsplugin.py	2014-03-21 21:38:08 +0000
+++ openlp/plugins/songs/songsplugin.py	2014-04-12 20:30:00 +0000
@@ -132,7 +132,7 @@
         )
         import_menu.addAction(self.import_songselect_item)
 
-    def add_export_menu_Item(self, export_menu):
+    def add_export_menu_item(self, export_menu):
         """
         Give the Songs plugin the opportunity to add items to the **Export** menu.
 
@@ -261,12 +261,12 @@
         """
         Called to define all translatable texts of the plugin
         """
-        ## Name PluginList ##
+        # Name PluginList
         self.text_strings[StringContent.Name] = {
             'singular': translate('SongsPlugin', 'Song', 'name singular'),
             'plural': translate('SongsPlugin', 'Songs', 'name plural')
         }
-        ## Name for MediaDockManager, SettingsManager ##
+        # Name for MediaDockManager, SettingsManager
         self.text_strings[StringContent.VisibleName] = {
             'title': translate('SongsPlugin', 'Songs', 'container title')
         }

=== modified file 'openlp/plugins/songusage/songusageplugin.py'
--- openlp/plugins/songusage/songusageplugin.py	2014-01-11 22:01:41 +0000
+++ openlp/plugins/songusage/songusageplugin.py	2014-04-12 20:30:00 +0000
@@ -246,12 +246,12 @@
         """
         Called to define all translatable texts of the plugin
         """
-        ## Name PluginList ##
+        # Name PluginList
         self.text_strings[StringContent.Name] = {
             'singular': translate('SongUsagePlugin', 'SongUsage', 'name singular'),
             'plural': translate('SongUsagePlugin', 'SongUsage', 'name plural')
         }
-        ## Name for MediaDockManager, SettingsManager ##
+        # Name for MediaDockManager, SettingsManager
         self.text_strings[StringContent.VisibleName] = {
             'title': translate('SongUsagePlugin', 'SongUsage', 'container title')
         }

=== added file 'tests/functional/openlp_core_common/test_common.py'
--- tests/functional/openlp_core_common/test_common.py	1970-01-01 00:00:00 +0000
+++ tests/functional/openlp_core_common/test_common.py	2014-04-12 20:30:00 +0000
@@ -0,0 +1,83 @@
+# -*- 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                          #
+###############################################################################
+"""
+Functional tests to test the AppLocation class and related methods.
+"""
+
+from unittest import TestCase
+
+from openlp.core.common import de_hump, trace_error_handler
+from tests.functional import MagicMock, patch
+
+
+class TestCommonFunctions(TestCase):
+    """
+    A test suite to test out various functions in the openlp.core.common module.
+    """
+    def de_hump_conversion_test(self):
+        """
+        Test the de_hump function with a class name
+        """
+        # GIVEN: a Class name in Camel Case
+        string = "MyClass"
+
+        # WHEN: we call de_hump
+        new_string = de_hump(string)
+
+        # THEN: the new string should be converted to python format
+        self.assertTrue(new_string == "my_class", 'The class name should have been converted')
+
+    def de_hump_static_test(self):
+        """
+        Test the de_hump function with a python string
+        """
+        # GIVEN: a Class name in Camel Case
+        string = "my_class"
+
+        # WHEN: we call de_hump
+        new_string = de_hump(string)
+
+        # THEN: the new string should be converted to python format
+        self.assertTrue(new_string == "my_class", 'The class name should have been preserved')
+
+    def trace_error_handler_test(self):
+        """
+        Test the trace_error_handler() method
+        """
+        # GIVEN: Mocked out objects
+        with patch('openlp.core.common.traceback') as mocked_traceback:
+            mocked_traceback.extract_stack.return_value = [('openlp.fake', 56, None, 'trace_error_handler_test')]
+            mocked_logger = MagicMock()
+
+            # WHEN: trace_error_handler() is called
+            trace_error_handler(mocked_logger)
+
+            # THEN: The mocked_logger.error() method should have been called with the correct parameters
+            mocked_logger.error.assert_called_with('OpenLP Error trace\n   File openlp.fake at line 56 \n\t called trace_error_handler_test')
+

=== removed file 'tests/functional/openlp_core_common/test_init.py'
--- tests/functional/openlp_core_common/test_init.py	2013-12-30 19:50:34 +0000
+++ tests/functional/openlp_core_common/test_init.py	1970-01-01 00:00:00 +0000
@@ -1,66 +0,0 @@
-# -*- 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                          #
-###############################################################################
-"""
-Functional tests to test the AppLocation class and related methods.
-"""
-
-from unittest import TestCase
-
-from openlp.core.common import de_hump
-
-
-class TestInitFunctions(TestCase):
-    """
-    A test suite to test out various functions in the __init__ class.
-    """
-    def de_hump_conversion_test(self):
-        """
-        Test the de_hump function with a class name
-        """
-        # GIVEN: a Class name in Camel Case
-        string = "MyClass"
-
-        # WHEN: we call de_hump
-        new_string = de_hump(string)
-
-        # THEN: the new string should be converted to python format
-        self.assertTrue(new_string == "my_class", 'The class name should have been converted')
-
-    def de_hump_static_test(self):
-        """
-        Test the de_hump function with a python string
-        """
-        # GIVEN: a Class name in Camel Case
-        string = "my_class"
-
-        # WHEN: we call de_hump
-        new_string = de_hump(string)
-
-        # THEN: the new string should be converted to python format
-        self.assertTrue(new_string == "my_class", 'The class name should have been preserved')

=== modified file 'tests/functional/openlp_core_lib/test_db.py'
--- tests/functional/openlp_core_lib/test_db.py	2014-04-02 18:51:21 +0000
+++ tests/functional/openlp_core_lib/test_db.py	2014-04-12 20:30:00 +0000
@@ -50,8 +50,8 @@
         """
         # GIVEN: Mocked out SQLAlchemy calls and return objects, and an in-memory SQLite database URL
         with patch('openlp.core.lib.db.create_engine') as mocked_create_engine, \
-            patch('openlp.core.lib.db.MetaData') as MockedMetaData, \
-            patch('openlp.core.lib.db.sessionmaker') as mocked_sessionmaker, \
+                patch('openlp.core.lib.db.MetaData') as MockedMetaData, \
+                patch('openlp.core.lib.db.sessionmaker') as mocked_sessionmaker, \
                 patch('openlp.core.lib.db.scoped_session') as mocked_scoped_session:
             mocked_engine = MagicMock()
             mocked_metadata = MagicMock()

=== modified file 'tests/functional/openlp_core_lib/test_pluginmanager.py'
--- tests/functional/openlp_core_lib/test_pluginmanager.py	2013-12-31 07:27:07 +0000
+++ tests/functional/openlp_core_lib/test_pluginmanager.py	2014-04-12 20:30:00 +0000
@@ -212,9 +212,9 @@
         # WHEN: We run hook_export_menu()
         plugin_manager.hook_export_menu()
 
-        # THEN: The add_export_menu_Item() method should not have been called
-        self.assertEqual(0, mocked_plugin.add_export_menu_Item.call_count,
-                         'The add_export_menu_Item() method should not have been called.')
+        # THEN: The add_export_menu_item() method should not have been called
+        self.assertEqual(0, mocked_plugin.add_export_menu_item.call_count,
+                         'The add_export_menu_item() method should not have been called.')
 
     def hook_export_menu_with_active_plugin_test(self):
         """
@@ -229,8 +229,8 @@
         # WHEN: We run hook_export_menu()
         plugin_manager.hook_export_menu()
 
-        # THEN: The add_export_menu_Item() method should have been called
-        mocked_plugin.add_export_menu_Item.assert_called_with(self.mocked_main_window.file_export_menu)
+        # THEN: The add_export_menu_item() method should have been called
+        mocked_plugin.add_export_menu_item.assert_called_with(self.mocked_main_window.file_export_menu)
 
     def hook_upgrade_plugin_settings_with_disabled_plugin_test(self):
         """
@@ -264,7 +264,7 @@
         # WHEN: We run hook_upgrade_plugin_settings()
         plugin_manager.hook_upgrade_plugin_settings(settings)
 
-        # THEN: The add_export_menu_Item() method should have been called
+        # THEN: The add_export_menu_item() method should have been called
         mocked_plugin.upgrade_settings.assert_called_with(settings)
 
     def hook_tools_menu_with_disabled_plugin_test(self):


Follow ups