From a24d5f8f1556270dd221a8e7aaa539e9389c396d Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Tue, 30 May 2017 19:42:35 +0100 Subject: [PATCH] TODO's TODOne, and a few other cleanups --- openlp/core/__init__.py | 3 +- openlp/core/common/languagemanager.py | 4 +- openlp/core/common/uistrings.py | 2 - openlp/core/lib/exceptions.py | 1 - openlp/core/lib/imagemanager.py | 6 +-- openlp/core/ui/advancedtab.py | 8 +--- openlp/core/ui/firsttimeform.py | 4 -- openlp/core/ui/formattingtagcontroller.py | 3 +- openlp/core/ui/formattingtagform.py | 6 +-- openlp/core/ui/lib/wizard.py | 8 ++-- openlp/core/ui/mainwindow.py | 4 +- openlp/core/ui/media/mediacontroller.py | 7 ++-- openlp/core/ui/pluginform.py | 2 - openlp/core/ui/shortcutlistform.py | 4 +- openlp/core/ui/themeform.py | 1 - openlp/core/ui/thememanager.py | 15 +++---- openlp/plugins/alerts/alertsplugin.py | 24 ++++++------ openlp/plugins/alerts/forms/alertform.py | 8 +--- .../plugins/bibles/forms/bibleimportform.py | 4 +- openlp/plugins/bibles/lib/__init__.py | 16 ++++---- openlp/plugins/bibles/lib/db.py | 5 +-- openlp/plugins/bibles/lib/importers/http.py | 6 +++ openlp/plugins/custom/lib/mediaitem.py | 4 +- openlp/plugins/images/lib/mediaitem.py | 7 +--- .../presentations/lib/pdfcontroller.py | 4 +- .../presentations/lib/powerpointcontroller.py | 2 +- openlp/plugins/remotes/remoteplugin.py | 3 +- .../songs/forms/duplicatesongremovalform.py | 9 ++--- openlp/plugins/songs/forms/editsongform.py | 12 ++---- openlp/plugins/songs/forms/songexportform.py | 7 ++-- openlp/plugins/songs/forms/songimportform.py | 17 ++++---- openlp/plugins/songs/forms/songselectform.py | 6 +-- openlp/plugins/songs/lib/importer.py | 2 +- .../songs/lib/importers/foilpresenter.py | 4 +- openlp/plugins/songs/lib/importers/openlp.py | 6 +-- .../plugins/songs/lib/importers/openlyrics.py | 4 +- .../songs/lib/importers/powerpraise.py | 4 +- .../lib/importers/presentationmanager.py | 4 +- .../songs/lib/importers/propresenter.py | 4 +- .../plugins/songs/lib/importers/songimport.py | 3 +- .../songs/lib/importers/songshowplus.py | 3 +- openlp/plugins/songs/lib/mediaitem.py | 3 +- openlp/plugins/songs/lib/openlyricsxml.py | 21 ++++------ .../songusage/forms/songusagedeleteform.py | 4 +- .../openlp_core_ui/test_formattingtagsform.py | 6 --- .../openlp_plugins/bibles/test_bibleserver.py | 34 ---------------- .../openlp_plugins/bibles/test_mediaitem.py | 5 --- .../presentations/test_pptviewcontroller.py | 23 ----------- .../test_presentationcontroller.py | 39 ------------------- .../songs/test_foilpresenterimport.py | 12 ------ 50 files changed, 108 insertions(+), 285 deletions(-) diff --git a/openlp/core/__init__.py b/openlp/core/__init__.py index 50375ca57..49553513c 100644 --- a/openlp/core/__init__.py +++ b/openlp/core/__init__.py @@ -251,8 +251,7 @@ class OpenLP(OpenLPMixin, QtWidgets.QApplication): if QtWidgets.QMessageBox.question(None, translate('OpenLP', 'Backup'), translate('OpenLP', 'OpenLP has been upgraded, do you want to create\n' 'a backup of the old data folder?'), - QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, - QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.Yes: + defaultButton=QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.Yes: # Create copy of data folder data_folder_path = AppLocation.get_data_path() timestamp = time.strftime("%Y%m%d-%H%M%S") diff --git a/openlp/core/common/languagemanager.py b/openlp/core/common/languagemanager.py index 5023f7383..026a6ddda 100644 --- a/openlp/core/common/languagemanager.py +++ b/openlp/core/common/languagemanager.py @@ -140,8 +140,8 @@ class LanguageManager(object): reg_ex = QtCore.QRegExp("^.*i18n/(.*).qm") if reg_ex.exactMatch(qmf): name = '{regex}'.format(regex=reg_ex.cap(1)) - # TODO: Test before converting to python3 string format - LanguageManager.__qm_list__['%#2i %s' % (counter + 1, LanguageManager.language_name(qmf))] = name + LanguageManager.__qm_list__[ + '{count:>2i} {name}'.format(count=counter + 1, name=LanguageManager.language_name(qmf))] = name @staticmethod def get_qm_list(): diff --git a/openlp/core/common/uistrings.py b/openlp/core/common/uistrings.py index 1356f32e8..243e6016a 100644 --- a/openlp/core/common/uistrings.py +++ b/openlp/core/common/uistrings.py @@ -154,8 +154,6 @@ class UiStrings(object): self.Split = translate('OpenLP.Ui', 'Optional &Split') self.SplitToolTip = translate('OpenLP.Ui', 'Split a slide into two only if it does not fit on the screen as one slide.') - # TODO: WHERE is this used at? cannot find where it's used at in code. - self.StartTimeCode = translate('OpenLP.Ui', 'Start {code}') self.StopPlaySlidesInLoop = translate('OpenLP.Ui', 'Stop Play Slides in Loop') self.StopPlaySlidesToEnd = translate('OpenLP.Ui', 'Stop Play Slides to End') self.Theme = translate('OpenLP.Ui', 'Theme', 'Singular') diff --git a/openlp/core/lib/exceptions.py b/openlp/core/lib/exceptions.py index 8e1645fae..26ff56a79 100644 --- a/openlp/core/lib/exceptions.py +++ b/openlp/core/lib/exceptions.py @@ -24,7 +24,6 @@ The :mod:`~openlp.core.lib.exceptions` module contains custom exceptions """ -# TODO: Test __init__ & __str__ class ValidationError(Exception): """ The :class:`~openlp.core.lib.exceptions.ValidationError` exception provides a custom exception for validating diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index c0b4e58de..c6f18cc1f 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -110,6 +110,8 @@ class Image(object): :param width: The width of the image, defaults to -1 meaning that the screen width will be used. :param height: The height of the image, defaults to -1 meaning that the screen height will be used. """ + if not os.path.exists(path): + raise FileNotFoundError('{path} not found'.format(path=path)) self.path = path self.image = None self.image_bytes = None @@ -119,9 +121,7 @@ class Image(object): self.timestamp = 0 self.width = width self.height = height - # FIXME: We assume that the path exist. The caller has to take care that it exists! - if os.path.exists(path): - self.timestamp = os.stat(path).st_mtime + self.timestamp = os.stat(path).st_mtime self.secondary_priority = Image.secondary_priority Image.secondary_priority += 1 diff --git a/openlp/core/ui/advancedtab.py b/openlp/core/ui/advancedtab.py index f3afead76..eb418c338 100644 --- a/openlp/core/ui/advancedtab.py +++ b/openlp/core/ui/advancedtab.py @@ -533,9 +533,7 @@ class AdvancedTab(SettingsTab): 'location of the OpenLP data directory to:\n\n{path}' '\n\nThe data directory will be changed when OpenLP is ' 'closed.').format(path=new_data_path), - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | - QtWidgets.QMessageBox.No), - QtWidgets.QMessageBox.No) + defaultButton=QtWidgets.QMessageBox.No) if answer != QtWidgets.QMessageBox.Yes: return # Check if data already exists here. @@ -559,9 +557,7 @@ class AdvancedTab(SettingsTab): 'directory to the default location?' '\n\nThis location will be used ' 'after OpenLP is closed.'), - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | - QtWidgets.QMessageBox.No), - QtWidgets.QMessageBox.No) + defaultButton=QtWidgets.QMessageBox.No) if answer != QtWidgets.QMessageBox.Yes: return self.check_data_overwrite(new_data_path) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 43f9186cb..0e95235fb 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -206,7 +206,6 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties): trace_error_handler(log) self.update_screen_list_combo() self.application.process_events() - # TODO: Tested at home self.downloading = translate('OpenLP.FirstTimeWizard', 'Downloading {name}...') if self.has_run_wizard: self.songs_check_box.setChecked(self.plugin_manager.get_plugin_by_name('songs').is_active()) @@ -563,7 +562,6 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties): item = self.songs_list_widget.item(i) if item.checkState() == QtCore.Qt.Checked: filename, sha256 = item.data(QtCore.Qt.UserRole) - # TODO: Tested at home self._increment_progress_bar(self.downloading.format(name=filename), 0) self.previous_size = 0 destination = os.path.join(songs_destination, str(filename)) @@ -576,7 +574,6 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties): item = bibles_iterator.value() if item.parent() and item.checkState(0) == QtCore.Qt.Checked: bible, sha256 = item.data(0, QtCore.Qt.UserRole) - # TODO: Tested at home self._increment_progress_bar(self.downloading.format(name=bible), 0) self.previous_size = 0 if not url_get_file(self, '{path}{name}'.format(path=self.bibles_url, name=bible), @@ -589,7 +586,6 @@ class FirstTimeForm(QtWidgets.QWizard, UiFirstTimeWizard, RegistryProperties): item = self.themes_list_widget.item(i) if item.checkState() == QtCore.Qt.Checked: theme, sha256 = item.data(QtCore.Qt.UserRole) - # TODO: Tested at home self._increment_progress_bar(self.downloading.format(name=theme), 0) self.previous_size = 0 if not url_get_file(self, '{path}{name}'.format(path=self.themes_url, name=theme), diff --git a/openlp/core/ui/formattingtagcontroller.py b/openlp/core/ui/formattingtagcontroller.py index 62e1833d4..062eb21fc 100644 --- a/openlp/core/ui/formattingtagcontroller.py +++ b/openlp/core/ui/formattingtagcontroller.py @@ -130,8 +130,7 @@ class FormattingTagController(object): elif not match.group('empty'): end_tags.append(tag) match = self.html_tag_regex.search(start_html, match.end()) - # TODO: Verify format() works with lambda - return ''.join(map(lambda tag: '' % tag, reversed(end_tags))) + return ''.join(map(lambda tag: ''.format(tag=tag), reversed(end_tags))) def start_tag_changed(self, start_html, end_html): """ diff --git a/openlp/core/ui/formattingtagform.py b/openlp/core/ui/formattingtagform.py index 1aeda9bc3..216df8974 100644 --- a/openlp/core/ui/formattingtagform.py +++ b/openlp/core/ui/formattingtagform.py @@ -122,8 +122,7 @@ class FormattingTagForm(QtWidgets.QDialog, Ui_FormattingTagDialog, FormattingTag self.tag_table_widget.item(count, 2).text(), self.tag_table_widget.item(count, 3).text()) if error: - QtWidgets.QMessageBox.warning(self, translate('OpenLP.FormattingTagForm', 'Validation Error'), error, - QtWidgets.QMessageBox.Ok) + QtWidgets.QMessageBox.warning(self, translate('OpenLP.FormattingTagForm', 'Validation Error'), error) self.tag_table_widget.selectRow(count) return count += 1 @@ -198,6 +197,5 @@ class FormattingTagForm(QtWidgets.QDialog, Ui_FormattingTagDialog, FormattingTag if tag: self.tag_table_widget.setItem(pre_row, 3, QtWidgets.QTableWidgetItem(tag)) if errors: - QtWidgets.QMessageBox.warning(self, translate('OpenLP.FormattingTagForm', 'Validation Error'), errors, - QtWidgets.QMessageBox.Ok) + QtWidgets.QMessageBox.warning(self, translate('OpenLP.FormattingTagForm', 'Validation Error'), errors) self.tag_table_widget.resizeRowsToContents() diff --git a/openlp/core/ui/lib/wizard.py b/openlp/core/ui/lib/wizard.py index 088bc3c1f..dc451a361 100644 --- a/openlp/core/ui/lib/wizard.py +++ b/openlp/core/ui/lib/wizard.py @@ -50,13 +50,13 @@ class WizardStrings(object): # These strings should need a good reason to be retranslated elsewhere. FinishedImport = translate('OpenLP.Ui', 'Finished import.') FormatLabel = translate('OpenLP.Ui', 'Format:') - HeaderStyle = '%s' + HeaderStyle = '{text}' Importing = translate('OpenLP.Ui', 'Importing') - ImportingType = translate('OpenLP.Ui', 'Importing "%s"...') + ImportingType = translate('OpenLP.Ui', 'Importing "{source}"...') ImportSelect = translate('OpenLP.Ui', 'Select Import Source') ImportSelectLong = translate('OpenLP.Ui', 'Select the import format and the location to import from.') - OpenTypeFile = translate('OpenLP.Ui', 'Open %s File') - OpenTypeFolder = translate('OpenLP.Ui', 'Open %s Folder') + OpenTypeFile = translate('OpenLP.Ui', 'Open {file_type} File') + OpenTypeFolder = translate('OpenLP.Ui', 'Open {folder_name} Folder') PercentSymbolFormat = translate('OpenLP.Ui', '%p%') Ready = translate('OpenLP.Ui', 'Ready.') StartingImport = translate('OpenLP.Ui', 'Starting import...') diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index fb7add70f..1ea61b5a5 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -920,8 +920,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties): QtWidgets.QMessageBox.information(self, translate('OpenLP.MainWindow', 'Import settings'), translate('OpenLP.MainWindow', 'OpenLP will now close. Imported settings will ' - 'be applied the next time you start OpenLP.'), - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Ok)) + 'be applied the next time you start OpenLP.')) self.settings_imported = True self.clean_up() QtCore.QCoreApplication.exit() @@ -1316,7 +1315,6 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow, RegistryProperties): self.recent_files_menu.clear() for file_id, filename in enumerate(recent_files_to_display): log.debug('Recent file name: {name}'.format(name=filename)) - # TODO: Should be good action = create_action(self, '', text='&{n} {name}'.format(n=file_id + 1, name=os.path.splitext(os.path.basename(str(filename)))[0]), diff --git a/openlp/core/ui/media/mediacontroller.py b/openlp/core/ui/media/mediacontroller.py index 5a0dfb042..b052b152c 100644 --- a/openlp/core/ui/media/mediacontroller.py +++ b/openlp/core/ui/media/mediacontroller.py @@ -474,9 +474,10 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties): player = self.media_players[used_players[0]] if suffix not in player.video_extensions_list and suffix not in player.audio_extensions_list: # Media could not be loaded correctly - critical_error_message_box(translate('MediaPlugin.MediaItem', 'Unsupported Media File'), - translate('MediaPlugin.MediaItem', 'File %s not supported using player %s') % - (service_item.get_frame_path(), used_players[0])) + critical_error_message_box( + translate('MediaPlugin.MediaItem', 'Unsupported Media File'), + translate('MediaPlugin.MediaItem', 'File {file_path} not supported using player {player_name}' + ).format(file_path=service_item.get_frame_path(), player_name=used_players[0])) return False media_data = MediaInfoWrapper.parse(service_item.get_frame_path()) # duration returns in milli seconds diff --git a/openlp/core/ui/pluginform.py b/openlp/core/ui/pluginform.py index 69b96a7ac..087c23ea1 100644 --- a/openlp/core/ui/pluginform.py +++ b/openlp/core/ui/pluginform.py @@ -60,7 +60,6 @@ class PluginForm(QtWidgets.QDialog, Ui_PluginViewDialog, RegistryProperties): self._clear_details() self.programatic_change = True plugin_list_width = 0 - # TODO: Tested at home for plugin in self.plugin_manager.plugins: item = QtWidgets.QListWidgetItem(self.plugin_list_widget) # We do this just to make 100% sure the status is an integer as @@ -137,7 +136,6 @@ class PluginForm(QtWidgets.QDialog, Ui_PluginViewDialog, RegistryProperties): self.active_plugin.app_startup() else: self.active_plugin.toggle_status(PluginStatus.Inactive) - # TODO: Tested at home status_text = translate('OpenLP.PluginForm', '{name} (Inactive)') if self.active_plugin.status == PluginStatus.Active: status_text = translate('OpenLP.PluginForm', '{name} (Active)') diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index a42600193..57c905c95 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -279,9 +279,7 @@ class ShortcutListForm(QtWidgets.QDialog, Ui_ShortcutListDialog, RegistryPropert return if QtWidgets.QMessageBox.question(self, translate('OpenLP.ShortcutListDialog', 'Restore Default Shortcuts'), translate('OpenLP.ShortcutListDialog', 'Do you want to restore all ' - 'shortcuts to their defaults?'), - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | - QtWidgets.QMessageBox.No) + 'shortcuts to their defaults?') ) == QtWidgets.QMessageBox.No: return self._adjust_button(self.primary_push_button, False, text='') diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index 9d7058eb5..ff4a1b7b3 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -464,7 +464,6 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties): """ Background video button pushed. """ - # TODO: Should work visible_formats = '({name})'.format(name='; '.join(VIDEO_EXT)) actual_formats = '({name})'.format(name=' '.join(VIDEO_EXT)) video_filter = '{trans} {visible} {actual}'.format(trans=translate('OpenLP', 'Video Files'), diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index f5eca3656..3b3d5bb07 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -256,10 +256,9 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage Renames an existing theme to a new name :param field: """ - # TODO: Check for delayed format() conversions if self._validate_theme_action(translate('OpenLP.ThemeManager', 'You must select a theme to rename.'), translate('OpenLP.ThemeManager', 'Rename Confirmation'), - translate('OpenLP.ThemeManager', 'Rename %s theme?'), False, False): + translate('OpenLP.ThemeManager', 'Rename {theme_name} theme?'), False, False): item = self.theme_list_widget.currentItem() old_theme_name = item.data(QtCore.Qt.UserRole) self.file_rename_form.file_name_edit.setText(old_theme_name) @@ -333,10 +332,9 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage Delete a theme triggered by the UI. :param field: """ - # TODO: Verify delayed format() conversions if self._validate_theme_action(translate('OpenLP.ThemeManager', 'You must select a theme to delete.'), translate('OpenLP.ThemeManager', 'Delete Confirmation'), - translate('OpenLP.ThemeManager', 'Delete %s theme?')): + translate('OpenLP.ThemeManager', 'Delete {theme_name} theme?')): item = self.theme_list_widget.currentItem() theme = item.text() row = self.theme_list_widget.row(item) @@ -530,9 +528,7 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage translate('OpenLP.ThemeManager', 'Theme {name} already exists. ' 'Do you want to replace it?').format(name=theme_name), - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | - QtWidgets.QMessageBox.No), - QtWidgets.QMessageBox.No) + defaultButton=QtWidgets.QMessageBox.No) return ret == QtWidgets.QMessageBox.Yes def unzip_theme(self, file_name, directory): @@ -748,9 +744,8 @@ class ThemeManager(OpenLPMixin, RegistryMixin, QtWidgets.QWidget, Ui_ThemeManage # confirm deletion if confirm: answer = QtWidgets.QMessageBox.question( - self, confirm_title, confirm_text % theme, - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No), - QtWidgets.QMessageBox.No) + self, confirm_title, confirm_text.format(theme_name=theme), + defaultButton=QtWidgets.QMessageBox.No) if answer == QtWidgets.QMessageBox.No: return False # should be the same unless default diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index 83544bd99..037a53e9d 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -88,21 +88,20 @@ JAVASCRIPT = """ } } """ -# TODO: Verify format() with variable templates CSS = """ - #alert { + #alert {{ position: absolute; left: 0px; top: 0px; z-index: 10; - width: 100%%; - vertical-align: %s; - font-family: %s; - font-size: %spt; - color: %s; - background-color: %s; + width: 100%; + vertical-align: {vertical_align}; + font-family: {font_family}; + font-size: {font_size:d}pt; + color: {color}; + background-color: {background_color}; word-wrap: break-word; - } + }} """ HTML = """ @@ -228,8 +227,11 @@ class AlertsPlugin(Plugin): Add CSS to the main display. """ align = VerticalType.Names[self.settings_tab.location] - return CSS % (align, self.settings_tab.font_face, self.settings_tab.font_size, self.settings_tab.font_color, - self.settings_tab.background_color) + return CSS.format(vertical_align=align, + font_family=self.settings_tab.font_face, + font_size=self.settings_tab.font_size, + color=self.settings_tab.font_color, + background_color=self.settings_tab.background_color) @staticmethod def get_display_html(): diff --git a/openlp/plugins/alerts/forms/alertform.py b/openlp/plugins/alerts/forms/alertform.py index 88f44210e..9821beb37 100644 --- a/openlp/plugins/alerts/forms/alertform.py +++ b/openlp/plugins/alerts/forms/alertform.py @@ -180,9 +180,7 @@ class AlertForm(QtWidgets.QDialog, Ui_AlertDialog): translate('AlertsPlugin.AlertForm', 'No Parameter Found'), translate('AlertsPlugin.AlertForm', 'You have not entered a parameter to be replaced.\n' - 'Do you want to continue anyway?'), - QtWidgets.QMessageBox.StandardButtons( - QtWidgets.QMessageBox.No | QtWidgets.QMessageBox.Yes) + 'Do you want to continue anyway?') ) == QtWidgets.QMessageBox.No: self.parameter_edit.setFocus() return False @@ -193,9 +191,7 @@ class AlertForm(QtWidgets.QDialog, Ui_AlertDialog): translate('AlertsPlugin.AlertForm', 'No Placeholder Found'), translate('AlertsPlugin.AlertForm', 'The alert text does not contain \'<>\'.\n' - 'Do you want to continue anyway?'), - QtWidgets.QMessageBox.StandardButtons( - QtWidgets.QMessageBox.No | QtWidgets.QMessageBox.Yes) + 'Do you want to continue anyway?') ) == QtWidgets.QMessageBox.No: self.parameter_edit.setFocus() return False diff --git a/openlp/plugins/bibles/forms/bibleimportform.py b/openlp/plugins/bibles/forms/bibleimportform.py index 3f1ee9c1b..06032bf0c 100644 --- a/openlp/plugins/bibles/forms/bibleimportform.py +++ b/openlp/plugins/bibles/forms/bibleimportform.py @@ -427,8 +427,8 @@ class BibleImportForm(OpenLPWizard): Allow for localisation of the bible import wizard. """ self.setWindowTitle(translate('BiblesPlugin.ImportWizardForm', 'Bible Import Wizard')) - self.title_label.setText(WizardStrings.HeaderStyle % translate('OpenLP.Ui', - 'Welcome to the Bible Import Wizard')) + self.title_label.setText(WizardStrings.HeaderStyle.format(text=translate('OpenLP.Ui', + 'Welcome to the Bible Import Wizard'))) self.information_label.setText( translate('BiblesPlugin.ImportWizardForm', 'This wizard will help you to import Bibles from a variety of ' diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index bb190ab65..a4e735267 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -221,18 +221,16 @@ def update_reference_separators(): REFERENCE_SEPARATORS['sep_{role}'.format(role=role)] = '\s*(?:{source})\s*'.format(source=source_string) REFERENCE_SEPARATORS['sep_{role}_default'.format(role=role)] = default_separators[index] # verse range match: (:)?(-((:)?|end)?)? - # TODO: Check before converting this string - range_regex = '(?:(?P[0-9]+)%(sep_v)s)?' \ - '(?P[0-9]+)(?P%(sep_r)s(?:(?:(?P' \ - '[0-9]+)%(sep_v)s)?(?P[0-9]+)|%(sep_e)s)?)?' % REFERENCE_SEPARATORS - # TODO: Test before converting re.compile strings - REFERENCE_MATCHES['range'] = re.compile('^\s*%s\s*$' % range_regex, re.UNICODE) + range_regex = '(?:(?P[0-9]+){sep_v})?' \ + '(?P[0-9]+)(?P{sep_r}(?:(?:(?P' \ + '[0-9]+){sep_v})?(?P[0-9]+)|{sep_e})?)?'.format_map(REFERENCE_SEPARATORS) + REFERENCE_MATCHES['range'] = re.compile(r'^\s*{range}\s*$'.format(range=range_regex), re.UNICODE) REFERENCE_MATCHES['range_separator'] = re.compile(REFERENCE_SEPARATORS['sep_l'], re.UNICODE) # full reference match: ((,(?!$)|(?=$)))+ REFERENCE_MATCHES['full'] = \ - re.compile('^\s*(?!\s)(?P[\d]*[^\d\.]+)\.*(?(?:%(range_regex)s(?:%(sep_l)s(?!\s*$)|(?=\s*$)))+)\s*$' - % dict(list(REFERENCE_SEPARATORS.items()) + [('range_regex', range_regex)]), re.UNICODE) + re.compile(r'^\s*(?!\s)(?P[\d]*[^\d\.]+)\.*(?(?:{range_regex}(?:{sep_l}(?!\s*$)|(?=\s*$)))+)\s*$'.format( + range_regex=range_regex, sep_l=REFERENCE_SEPARATORS['sep_l']), re.UNICODE) def get_reference_separator(separator_type): diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index aaa90efe4..a91f806a3 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -305,9 +305,8 @@ class BibleDB(Manager): book_escaped = book for character in RESERVED_CHARACTERS: book_escaped = book_escaped.replace(character, '\\' + character) - # TODO: Verify regex patters before using format() - regex_book = re.compile('\s*%s\s*' % '\s*'.join( - book_escaped.split()), re.UNICODE | re.IGNORECASE) + regex_book = re.compile('\\s*{book}\\s*'.format(book='\\s*'.join(book_escaped.split())), + re.UNICODE | re.IGNORECASE) if language_selection == LanguageSelection.Bible: db_book = self.get_book(book) if db_book: diff --git a/openlp/plugins/bibles/lib/importers/http.py b/openlp/plugins/bibles/lib/importers/http.py index 76daa8e25..4f032784d 100644 --- a/openlp/plugins/bibles/lib/importers/http.py +++ b/openlp/plugins/bibles/lib/importers/http.py @@ -90,6 +90,8 @@ class BGExtract(RegistryProperties): """ Extract verses from BibleGateway """ + NAME = 'BibleGateway' + def __init__(self, proxy_url=None): log.debug('BGExtract.init("{url}")'.format(url=proxy_url)) self.proxy_url = proxy_url @@ -357,6 +359,8 @@ class BSExtract(RegistryProperties): """ Extract verses from Bibleserver.com """ + NAME = 'BibleServer' + def __init__(self, proxy_url=None): log.debug('BSExtract.init("{url}")'.format(url=proxy_url)) self.proxy_url = proxy_url @@ -458,6 +462,8 @@ class CWExtract(RegistryProperties): """ Extract verses from CrossWalk/BibleStudyTools """ + NAME = 'Crosswalk' + def __init__(self, proxy_url=None): log.debug('CWExtract.init("{url}")'.format(url=proxy_url)) self.proxy_url = proxy_url diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index c9a8aa046..c90d14e10 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -190,9 +190,7 @@ class CustomMediaItem(MediaManagerItem): translate('CustomPlugin.MediaItem', 'Are you sure you want to delete the "{items:d}" ' 'selected custom slide(s)?').format(items=len(items)), - QtWidgets.QMessageBox.StandardButtons( - QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No), - QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.No: + defaultButton=QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.No: return row_list = [item.row() for item in self.list_view.selectedIndexes()] row_list.sort(reverse=True) diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index e3f39143b..97a9dd956 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -246,9 +246,7 @@ class ImageMediaItem(MediaManagerItem): translate('ImagePlugin.MediaItem', 'Remove group'), translate('ImagePlugin.MediaItem', 'Are you sure you want to remove "{name}" and everything in it?' - ).format(name=item_data.group_name), - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | - QtWidgets.QMessageBox.No) + ).format(name=item_data.group_name) ) == QtWidgets.QMessageBox.Yes: self.recursively_delete_group(item_data) self.manager.delete_object(ImageGroups, row_item.data(0, QtCore.Qt.UserRole).id) @@ -597,8 +595,7 @@ class ImageMediaItem(MediaManagerItem): self, translate('ImagePlugin.MediaItem', 'Missing Image(s)'), translate('ImagePlugin.MediaItem', 'The following image(s) no longer exist: {names}\n' 'Do you want to add the other images anyway?' - ).format(names='\n'.join(missing_items_file_names)), - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.No | QtWidgets.QMessageBox.Yes)) == \ + ).format(names='\n'.join(missing_items_file_names))) == \ QtWidgets.QMessageBox.No: return False # Continue with the existing images. diff --git a/openlp/plugins/presentations/lib/pdfcontroller.py b/openlp/plugins/presentations/lib/pdfcontroller.py index 47d7e3161..215732b4e 100644 --- a/openlp/plugins/presentations/lib/pdfcontroller.py +++ b/openlp/plugins/presentations/lib/pdfcontroller.py @@ -253,15 +253,14 @@ class PdfDocument(PresentationDocument): try: if not os.path.isdir(self.get_temp_folder()): os.makedirs(self.get_temp_folder()) + # The %03d in the file name is handled by each binary if self.controller.mudrawbin: log.debug('loading presentation using mudraw') - # TODO: Find out where the string conversion actually happens runlog = check_output([self.controller.mudrawbin, '-w', str(size.width()), '-h', str(size.height()), '-o', os.path.join(self.get_temp_folder(), 'mainslide%03d.png'), self.file_path], startupinfo=self.startupinfo) elif self.controller.mutoolbin: log.debug('loading presentation using mutool') - # TODO: Find out where the string convertsion actually happens runlog = check_output([self.controller.mutoolbin, 'draw', '-w', str(size.width()), '-h', str(size.height()), '-o', os.path.join(self.get_temp_folder(), 'mainslide%03d.png'), self.file_path], @@ -269,7 +268,6 @@ class PdfDocument(PresentationDocument): elif self.controller.gsbin: log.debug('loading presentation using gs') resolution = self.gs_get_resolution(size) - # TODO: Find out where the string conversion actually happens runlog = check_output([self.controller.gsbin, '-dSAFER', '-dNOPAUSE', '-dBATCH', '-sDEVICE=png16m', '-r' + str(resolution), '-dTextAlphaBits=4', '-dGraphicsAlphaBits=4', '-sOutputFile=' + os.path.join(self.get_temp_folder(), 'mainslide%03d.png'), diff --git a/openlp/plugins/presentations/lib/powerpointcontroller.py b/openlp/plugins/presentations/lib/powerpointcontroller.py index 08dcc4165..17feeaec7 100644 --- a/openlp/plugins/presentations/lib/powerpointcontroller.py +++ b/openlp/plugins/presentations/lib/powerpointcontroller.py @@ -542,5 +542,5 @@ def _get_text_from_shapes(shapes): text += shape.TextFrame.TextRange.Text + '\n' except pywintypes.com_error as e: log.warning('Failed to extract text from powerpoint slide') - log.warning(e) + log.exception(e) return text diff --git a/openlp/plugins/remotes/remoteplugin.py b/openlp/plugins/remotes/remoteplugin.py index 6c8f10dd1..811bf93cd 100644 --- a/openlp/plugins/remotes/remoteplugin.py +++ b/openlp/plugins/remotes/remoteplugin.py @@ -122,5 +122,4 @@ class RemotesPlugin(Plugin): translate('RemotePlugin', 'Server Config Change'), translate('RemotePlugin', 'Server configuration changes will require a restart ' - 'to take effect.'), - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Ok)) + 'to take effect.')) diff --git a/openlp/plugins/songs/forms/duplicatesongremovalform.py b/openlp/plugins/songs/forms/duplicatesongremovalform.py index dbebf19bc..9b755c138 100644 --- a/openlp/plugins/songs/forms/duplicatesongremovalform.py +++ b/openlp/plugins/songs/forms/duplicatesongremovalform.py @@ -130,9 +130,9 @@ class DuplicateSongRemovalForm(OpenLPWizard, RegistryProperties): Song wizard localisation. """ self.setWindowTitle(translate('Wizard', 'Wizard')) - # TODO: Check format() using template strings - self.title_label.setText(WizardStrings.HeaderStyle % translate('OpenLP.Ui', - 'Welcome to the Duplicate Song Removal Wizard')) + self.title_label.setText( + WizardStrings.HeaderStyle.format(text=translate('OpenLP.Ui', + 'Welcome to the Duplicate Song Removal Wizard'))) self.information_label.setText( translate("Wizard", 'This wizard will help you to remove duplicate songs from the song database. You will have a ' @@ -216,8 +216,7 @@ class DuplicateSongRemovalForm(OpenLPWizard, RegistryProperties): self.button(QtWidgets.QWizard.CancelButton).hide() QtWidgets.QMessageBox.information( self, translate('Wizard', 'Information'), - translate('Wizard', 'No duplicate songs have been found in the database.'), - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Ok)) + translate('Wizard', 'No duplicate songs have been found in the database.')) def add_duplicates_to_song_list(self, search_song, duplicate_song): """ diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index d7f614245..942bbad1a 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -203,8 +203,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): 'There is no verse corresponding to "{invalid}". Valid entries are {valid}.\n' 'Please enter the verses separated by spaces.').format(invalid=invalid_verses[0], valid=valid) - critical_error_message_box(title=translate('SongsPlugin.EditSongForm', 'Invalid Verse Order'), - message=msg) + critical_error_message_box(title=translate('SongsPlugin.EditSongForm', 'Invalid Verse Order'), message=msg) return len(invalid_verses) == 0 def _validate_song(self): @@ -579,8 +578,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): self, translate('SongsPlugin.EditSongForm', 'Add Author'), translate('SongsPlugin.EditSongForm', 'This author does not exist, do you want to add them?'), - QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, - QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.Yes: + defaultButton=QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.Yes: if text.find(' ') == -1: author = Author.populate(first_name='', last_name='', display_name=text) else: @@ -658,8 +656,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): if QtWidgets.QMessageBox.question( self, translate('SongsPlugin.EditSongForm', 'Add Topic'), translate('SongsPlugin.EditSongForm', 'This topic does not exist, do you want to add it?'), - QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, - QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.Yes: + defaultButton=QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.Yes: topic = Topic.populate(name=text) self.manager.save_object(topic) topic_item = QtWidgets.QListWidgetItem(str(topic.name)) @@ -705,8 +702,7 @@ class EditSongForm(QtWidgets.QDialog, Ui_EditSongDialog, RegistryProperties): if QtWidgets.QMessageBox.question( self, translate('SongsPlugin.EditSongForm', 'Add Songbook'), translate('SongsPlugin.EditSongForm', 'This Songbook does not exist, do you want to add it?'), - QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, - QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.Yes: + defaultButton=QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.Yes: songbook = Book.populate(name=text) self.manager.save_object(songbook) self.add_songbook_entry_to_list(songbook.id, songbook.name, self.songbook_entry_edit.text()) diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index 1780e7c7c..03ac9ee22 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -121,7 +121,7 @@ class SongExportForm(OpenLPWizard): self.selected_list_widget = QtWidgets.QListWidget(self.export_song_page) self.selected_list_widget.setObjectName('selected_list_widget') self.grid_layout.addWidget(self.selected_list_widget, 1, 0, 1, 1) - # FIXME: self.horizontal_layout is already defined above?!?!? + # FIXME: self.horizontal_layout is already defined above?!?!? Replace with Path Eidt! self.horizontal_layout = QtWidgets.QHBoxLayout() self.horizontal_layout.setObjectName('horizontal_layout') self.directory_label = QtWidgets.QLabel(self.export_song_page) @@ -143,9 +143,8 @@ class SongExportForm(OpenLPWizard): Song wizard localisation. """ self.setWindowTitle(translate('SongsPlugin.ExportWizardForm', 'Song Export Wizard')) - # TODO: Verify format() with template variables - self.title_label.setText(WizardStrings.HeaderStyle % - translate('OpenLP.Ui', 'Welcome to the Song Export Wizard')) + self.title_label.setText( + WizardStrings.HeaderStyle.format(text=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 ' 'OpenLyrics worship song format.')) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 253702b56..3547521c9 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -132,9 +132,8 @@ class SongImportForm(OpenLPWizard, RegistryProperties): Song wizard localisation. """ self.setWindowTitle(translate('SongsPlugin.ImportWizardForm', 'Song Import Wizard')) - # TODO: Verify format() with template variables - self.title_label.setText(WizardStrings.HeaderStyle % translate('OpenLP.Ui', - 'Welcome to the Song Import Wizard')) + self.title_label.setText( + WizardStrings.HeaderStyle.format(text=translate('OpenLP.Ui', 'Welcome to the Song Import Wizard'))) self.information_label.setText( translate('SongsPlugin.ImportWizardForm', 'This wizard will help you to import songs from a variety of formats. Click the next button ' @@ -272,12 +271,11 @@ class SongImportForm(OpenLPWizard, RegistryProperties): select_mode, format_name, ext_filter = SongFormat.get(this_format, 'selectMode', 'name', 'filter') file_path_edit = self.format_widgets[this_format]['file_path_edit'] if select_mode == SongFormatSelect.SingleFile: - # TODO: Verify format() with template variables - self.get_file_name( - WizardStrings.OpenTypeFile % format_name, file_path_edit, 'last directory import', ext_filter) + self.get_file_name(WizardStrings.OpenTypeFile.format(file_type=format_name), + file_path_edit, 'last directory import', ext_filter) elif select_mode == SongFormatSelect.SingleFolder: - # TODO: Verify format() with template variables - self.get_folder(WizardStrings.OpenTypeFolder % format_name, file_path_edit, 'last directory import') + self.get_folder( + WizardStrings.OpenTypeFolder.format(folder_name=format_name), file_path_edit, 'last directory import') def on_add_button_clicked(self): """ @@ -286,8 +284,7 @@ class SongImportForm(OpenLPWizard, RegistryProperties): this_format = self.current_format select_mode, format_name, ext_filter, custom_title = \ SongFormat.get(this_format, 'selectMode', 'name', 'filter', 'getFilesTitle') - # TODO: Verify format() with template variables - title = custom_title if custom_title else WizardStrings.OpenTypeFile % format_name + title = custom_title if custom_title else WizardStrings.OpenTypeFile.format(file_type=format_name) if select_mode == SongFormatSelect.MultipleFiles: self.get_files(title, self.format_widgets[this_format]['file_list_widget'], ext_filter) self.source_page.completeChanged.emit() diff --git a/openlp/plugins/songs/forms/songselectform.py b/openlp/plugins/songs/forms/songselectform.py index 1169cb672..1d31982f9 100644 --- a/openlp/plugins/songs/forms/songselectform.py +++ b/openlp/plugins/songs/forms/songselectform.py @@ -248,8 +248,7 @@ class SongSelectForm(QtWidgets.QDialog, Ui_SongSelectDialog): translate('SongsPlugin.SongSelectForm', 'WARNING: Saving your username and password is INSECURE, your ' 'password is stored in PLAIN TEXT. Click Yes to save your ' 'password or No to cancel this.'), - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No), - QtWidgets.QMessageBox.No) + defaultButton=QtWidgets.QMessageBox.No) if answer == QtWidgets.QMessageBox.No: self.save_password_checkbox.setChecked(False) @@ -397,8 +396,7 @@ class SongSelectForm(QtWidgets.QDialog, Ui_SongSelectDialog): translate('SongsPlugin.SongSelectForm', 'Your song has been imported, would you ' 'like to import more songs?'), - QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, - QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.Yes: + defaultButton=QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.Yes: self.on_back_button_clicked() else: self.application.process_events() diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py index e384d1090..9634464d0 100644 --- a/openlp/plugins/songs/lib/importer.py +++ b/openlp/plugins/songs/lib/importer.py @@ -256,7 +256,7 @@ class SongFormat(object): }, EasyWorshipService: { 'class': EasyWorshipSongImport, - 'name': 'EasyWorship Service File', + 'name': 'EasyWorship Service', 'prefix': 'ew', 'selectMode': SongFormatSelect.SingleFile, 'filter': '{text} (*.ews)'.format(text=translate('SongsPlugin.ImportWizardForm', diff --git a/openlp/plugins/songs/lib/importers/foilpresenter.py b/openlp/plugins/songs/lib/importers/foilpresenter.py index 7a8146aa4..06f45c89c 100644 --- a/openlp/plugins/songs/lib/importers/foilpresenter.py +++ b/openlp/plugins/songs/lib/importers/foilpresenter.py @@ -121,8 +121,8 @@ class FoilPresenterImport(SongImport): for file_path in self.import_source: if self.stop_import_flag: return - # TODO: Verify format() with template strings - self.import_wizard.increment_progress_bar(WizardStrings.ImportingType % os.path.basename(file_path)) + self.import_wizard.increment_progress_bar( + WizardStrings.ImportingType.format(source=os.path.basename(file_path))) try: parsed_file = etree.parse(file_path, parser) xml = etree.tostring(parsed_file).decode() diff --git a/openlp/plugins/songs/lib/importers/openlp.py b/openlp/plugins/songs/lib/importers/openlp.py index c0506bf6a..a42e7e37c 100644 --- a/openlp/plugins/songs/lib/importers/openlp.py +++ b/openlp/plugins/songs/lib/importers/openlp.py @@ -275,11 +275,9 @@ class OpenLPSongImport(SongImport): self.manager.save_object(new_song) if progress_dialog: progress_dialog.setValue(progress_dialog.value() + 1) - # TODO: Verify format() with template strings - progress_dialog.setLabelText(WizardStrings.ImportingType % new_song.title) + progress_dialog.setLabelText(WizardStrings.ImportingType.format(source=new_song.title)) else: - # TODO: Verify format() with template strings - self.import_wizard.increment_progress_bar(WizardStrings.ImportingType % new_song.title) + self.import_wizard.increment_progress_bar(WizardStrings.ImportingType.format(source=new_song.title)) if self.stop_import_flag: break self.source_session.close() diff --git a/openlp/plugins/songs/lib/importers/openlyrics.py b/openlp/plugins/songs/lib/importers/openlyrics.py index fbdfd7b67..09cc1ef91 100644 --- a/openlp/plugins/songs/lib/importers/openlyrics.py +++ b/openlp/plugins/songs/lib/importers/openlyrics.py @@ -58,8 +58,8 @@ class OpenLyricsImport(SongImport): for file_path in self.import_source: if self.stop_import_flag: return - # TODO: Verify format() with template strings - self.import_wizard.increment_progress_bar(WizardStrings.ImportingType % os.path.basename(file_path)) + self.import_wizard.increment_progress_bar( + WizardStrings.ImportingType.format(source=os.path.basename(file_path))) try: # Pass a file object, because lxml does not cope with some # special characters in the path (see lp:757673 and lp:744337). diff --git a/openlp/plugins/songs/lib/importers/powerpraise.py b/openlp/plugins/songs/lib/importers/powerpraise.py index 358f01e10..a652cf58c 100644 --- a/openlp/plugins/songs/lib/importers/powerpraise.py +++ b/openlp/plugins/songs/lib/importers/powerpraise.py @@ -41,8 +41,8 @@ class PowerPraiseImport(SongImport): for file_path in self.import_source: if self.stop_import_flag: return - # TODO: Verify format() with template strings - self.import_wizard.increment_progress_bar(WizardStrings.ImportingType % os.path.basename(file_path)) + self.import_wizard.increment_progress_bar( + WizardStrings.ImportingType.format(source=os.path.basename(file_path))) root = objectify.parse(open(file_path, 'rb')).getroot() self.process_song(root) diff --git a/openlp/plugins/songs/lib/importers/presentationmanager.py b/openlp/plugins/songs/lib/importers/presentationmanager.py index 7113842c4..4031431ba 100644 --- a/openlp/plugins/songs/lib/importers/presentationmanager.py +++ b/openlp/plugins/songs/lib/importers/presentationmanager.py @@ -44,8 +44,8 @@ class PresentationManagerImport(SongImport): for file_path in self.import_source: if self.stop_import_flag: return - # TODO: Verify format() with template strings - self.import_wizard.increment_progress_bar(WizardStrings.ImportingType % os.path.basename(file_path)) + self.import_wizard.increment_progress_bar( + WizardStrings.ImportingType.format(source=os.path.basename(file_path))) try: tree = etree.parse(file_path, parser=etree.XMLParser(recover=True)) except etree.XMLSyntaxError: diff --git a/openlp/plugins/songs/lib/importers/propresenter.py b/openlp/plugins/songs/lib/importers/propresenter.py index f1401c8a0..9a3fa372d 100644 --- a/openlp/plugins/songs/lib/importers/propresenter.py +++ b/openlp/plugins/songs/lib/importers/propresenter.py @@ -46,8 +46,8 @@ class ProPresenterImport(SongImport): for file_path in self.import_source: if self.stop_import_flag: return - # TODO: Verify format() with template strings - self.import_wizard.increment_progress_bar(WizardStrings.ImportingType % os.path.basename(file_path)) + self.import_wizard.increment_progress_bar( + WizardStrings.ImportingType.format(source=os.path.basename(file_path))) root = objectify.parse(open(file_path, 'rb')).getroot() self.process_song(root, file_path) diff --git a/openlp/plugins/songs/lib/importers/songimport.py b/openlp/plugins/songs/lib/importers/songimport.py index 7ea66a3da..070919c44 100644 --- a/openlp/plugins/songs/lib/importers/songimport.py +++ b/openlp/plugins/songs/lib/importers/songimport.py @@ -347,8 +347,7 @@ class SongImport(QtCore.QObject): song = Song() song.title = self.title if self.import_wizard is not None: - # TODO: Verify format() with template variables - self.import_wizard.increment_progress_bar(WizardStrings.ImportingType % song.title) + self.import_wizard.increment_progress_bar(WizardStrings.ImportingType.format(source=song.title)) song.alternate_title = self.alternate_title # Values will be set when cleaning the song. song.search_title = '' diff --git a/openlp/plugins/songs/lib/importers/songshowplus.py b/openlp/plugins/songs/lib/importers/songshowplus.py index edb16c74e..f40a4bc33 100644 --- a/openlp/plugins/songs/lib/importers/songshowplus.py +++ b/openlp/plugins/songs/lib/importers/songshowplus.py @@ -101,8 +101,7 @@ class SongShowPlusImport(SongImport): self.other_count = 0 self.other_list = {} file_name = os.path.split(file)[1] - # TODO: Verify format() with template variables - self.import_wizard.increment_progress_bar(WizardStrings.ImportingType % file_name, 0) + self.import_wizard.increment_progress_bar(WizardStrings.ImportingType.format(source=file_name), 0) song_data = open(file, 'rb') while True: block_key, = struct.unpack("I", song_data.read(4)) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 7c4d128d2..02595e3e8 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -500,8 +500,7 @@ class SongMediaItem(MediaManagerItem): translate('SongsPlugin.MediaItem', 'Are you sure you want to delete the "{items:d}" ' 'selected song(s)?').format(items=len(items)), - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No), - QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.No: + defaultButton=QtWidgets.QMessageBox.Yes) == QtWidgets.QMessageBox.No: return self.application.set_busy_cursor() self.main_window.display_progress_bar(len(items)) diff --git a/openlp/plugins/songs/lib/openlyricsxml.py b/openlp/plugins/songs/lib/openlyricsxml.py index bc02043ac..807ea5593 100644 --- a/openlp/plugins/songs/lib/openlyricsxml.py +++ b/openlp/plugins/songs/lib/openlyricsxml.py @@ -70,8 +70,7 @@ from openlp.plugins.songs.lib.db import Author, AuthorType, Book, Song, Topic log = logging.getLogger(__name__) NAMESPACE = 'http://openlyrics.info/namespace/2009/song' -# TODO: Verify format() with template variable -NSMAP = '{' + NAMESPACE + '}' + '%s' +NSMAP = '{{' + NAMESPACE + '}}{tag}' class SongXML(object): @@ -616,15 +615,13 @@ class OpenLyrics(object): text = '' use_endtag = True # Skip elements - not yet supported. - # TODO: Verify format() with template variables - if element.tag == NSMAP % 'comment': + if element.tag == NSMAP.format(tag='comment'): if element.tail: # Append tail text at comment element. text += element.tail return text # Convert chords to ChordPro format which OpenLP uses internally - # TODO: Verify format() with template variables - elif element.tag == NSMAP % 'chord': + elif element.tag == NSMAP.format(tag='chord'): if Settings().value('songs/enable chords') and not Settings().value('songs/disable chords import'): text += '[{chord}]'.format(chord=element.get('name')) if element.tail: @@ -632,15 +629,13 @@ class OpenLyrics(object): text += element.tail return text # Convert line breaks
to \n. - # TODO: Verify format() with template variables - elif newlines and element.tag == NSMAP % 'br': + elif newlines and element.tag == NSMAP.format(tag='br'): text += '\n' if element.tail: text += element.tail return text # Start formatting tag. - # TODO: Verify format() with template variables - if element.tag == NSMAP % 'tag': + if element.tag == NSMAP.format(tag='tag'): text += '{{{name}}}'.format(name=element.get('name')) # Some formattings may have only start tag. # Handle this case if element has no children and contains no text. @@ -654,8 +649,7 @@ class OpenLyrics(object): # Use recursion since nested formatting tags are allowed. text += self._process_lines_mixed_content(child, newlines) # Append text from tail and add formatting end tag. - # TODO: Verify format() with template variables - if element.tag == NSMAP % 'tag' and use_endtag: + if element.tag == NSMAP.format(tag='tag') and use_endtag: text += '{{/{name}}}'.format(name=element.get('name')) # Append text from tail. if element.tail: @@ -682,8 +676,7 @@ class OpenLyrics(object): # Loop over the "line" elements removing comments for line in element: # Skip comment lines. - # TODO: Verify format() with template variables - if line.tag == NSMAP % 'comment': + if line.tag == NSMAP.format(tag='comment'): continue if text: text += '\n' diff --git a/openlp/plugins/songusage/forms/songusagedeleteform.py b/openlp/plugins/songusage/forms/songusagedeleteform.py index 108ccb438..b2335e880 100644 --- a/openlp/plugins/songusage/forms/songusagedeleteform.py +++ b/openlp/plugins/songusage/forms/songusagedeleteform.py @@ -53,9 +53,7 @@ class SongUsageDeleteForm(QtWidgets.QDialog, Ui_SongUsageDeleteDialog, RegistryP 'Delete Selected Song Usage Events?'), translate('SongUsagePlugin.SongUsageDeleteForm', 'Are you sure you want to delete selected Song Usage data?'), - QtWidgets.QMessageBox.StandardButtons(QtWidgets.QMessageBox.Yes | - QtWidgets.QMessageBox.No), - QtWidgets.QMessageBox.No) + defaultButton=QtWidgets.QMessageBox.No) if ret == QtWidgets.QMessageBox.Yes: delete_date = self.delete_calendar.selectedDate().toPyDate() self.manager.delete_all_objects(SongUsageItem, SongUsageItem.usagedate <= delete_date) diff --git a/tests/functional/openlp_core_ui/test_formattingtagsform.py b/tests/functional/openlp_core_ui/test_formattingtagsform.py index bb9534439..c4069a553 100644 --- a/tests/functional/openlp_core_ui/test_formattingtagsform.py +++ b/tests/functional/openlp_core_ui/test_formattingtagsform.py @@ -27,12 +27,6 @@ from unittest.mock import MagicMock, patch, call from openlp.core.ui.formattingtagform import FormattingTagForm -# TODO: Tests Still TODO -# __init__ -# exec -# on_saved_clicked -# _reloadTable - class TestFormattingTagForm(TestCase): diff --git a/tests/functional/openlp_plugins/bibles/test_bibleserver.py b/tests/functional/openlp_plugins/bibles/test_bibleserver.py index a66f8b28e..bc05a601f 100644 --- a/tests/functional/openlp_plugins/bibles/test_bibleserver.py +++ b/tests/functional/openlp_plugins/bibles/test_bibleserver.py @@ -29,45 +29,11 @@ from bs4 import BeautifulSoup from openlp.plugins.bibles.lib.importers.http import BSExtract -# TODO: Items left to test -# BGExtract -# __init__ -# _remove_elements -# _extract_verse -# _clean_soup -# _extract_verses -# _extract_verses_old -# get_bible_chapter -# get_books_from_http -# _get_application -# CWExtract -# __init__ -# get_bible_chapter -# get_books_from_http -# _get_application -# HTTPBible -# __init__ -# do_import -# get_verses -# get_chapter -# get_books -# get_chapter_count -# get_verse_count -# _get_application -# get_soup_for_bible_ref -# send_error_message - class TestBSExtract(TestCase): """ Test the BSExtractClass """ - # TODO: Items left to test - # BSExtract - # __init__ - # get_bible_chapter - # get_books_from_http - # _get_application def setUp(self): self.get_soup_for_bible_ref_patcher = patch('openlp.plugins.bibles.lib.importers.http.get_soup_for_bible_ref') self.log_patcher = patch('openlp.plugins.bibles.lib.importers.http.log') diff --git a/tests/functional/openlp_plugins/bibles/test_mediaitem.py b/tests/functional/openlp_plugins/bibles/test_mediaitem.py index fd2d159f9..ec8cfbba1 100644 --- a/tests/functional/openlp_plugins/bibles/test_mediaitem.py +++ b/tests/functional/openlp_plugins/bibles/test_mediaitem.py @@ -197,9 +197,6 @@ class TestMediaItem(TestCase, TestMixin): self.assertTrue(self.media_item.has_delete_icon, 'Check that the icon is called as True.') self.assertFalse(self.media_item.add_to_service_item, 'Check that the icon is called as False') - # TODO: Test add_end_header_bar - # TODO: Test setupUi - def test_on_focus_search_tab_visible(self): """ Test the correct widget gets focus when the BibleMediaItem receives focus @@ -1345,8 +1342,6 @@ class TestMediaItem(TestCase, TestMixin): self.assertTrue(self.mocked_main_window.information_message.called) mocked_display_results.assert_called_once_with() - # TODO: Test text_search - def test_on_search_edit_text_changed_search_while_typing_disabled(self): """ Test on_search_edit_text_changed when 'search while typing' is disabled diff --git a/tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py b/tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py index 88544f0e9..3c08d226a 100644 --- a/tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py +++ b/tests/functional/openlp_plugins/presentations/test_pptviewcontroller.py @@ -42,11 +42,6 @@ class TestPptviewController(TestCase, TestMixin): """ Test the PptviewController Class """ -# TODO: Items left to test -# PptviewController -# start_process(self) -# kill - def setUp(self): """ Set up the patches and mocks need for all tests. @@ -103,24 +98,6 @@ class TestPptviewDocument(TestCase): """ Test the PptviewDocument Class """ - # TODO: Items left to test - # PptviewDocument - # __init__ - # create_thumbnails - # close_presentation - # is_loaded - # is_active - # blank_screen - # unblank_screen - # is_blank - # stop_presentation - # start_presentation - # get_slide_number - # get_slide_count - # goto_slide - # next_step - # previous_step - def setUp(self): """ Set up the patches and mocks need for all tests. diff --git a/tests/functional/openlp_plugins/presentations/test_presentationcontroller.py b/tests/functional/openlp_plugins/presentations/test_presentationcontroller.py index 0254f3ce5..9f02fb9c8 100644 --- a/tests/functional/openlp_plugins/presentations/test_presentationcontroller.py +++ b/tests/functional/openlp_plugins/presentations/test_presentationcontroller.py @@ -36,19 +36,6 @@ class TestPresentationController(TestCase): """ Test the PresentationController. """ - # TODO: Items left to test - # PresentationController - # __init__ - # enabled - # is_available - # check_available - # start_process - # kill - # add_document - # remove_doc - # close_presentation - # _get_plugin_manager - def setUp(self): self.get_thumbnail_folder_patcher = \ patch('openlp.plugins.presentations.lib.presentationcontroller.PresentationDocument.get_thumbnail_folder') @@ -183,32 +170,6 @@ class TestPresentationDocument(TestCase): """ Test the PresentationDocument Class """ - # TODO: Items left to test - # PresentationDocument - # __init__ - # presentation_deleted - # get_thumbnail_folder - # get_temp_folder - # check_thumbnails - # close_presentation - # is_active - # is_loaded - # blank_screen - # unblank_screen - # is_blank - # stop_presentation - # start_presentation - # get_slide_number - # get_slide_count - # goto_slide - # next_step - # previous_step - # convert_thumbnail - # get_thumbnail_path - # poll_slidenumber - # get_slide_text - # get_slide_notes - def setUp(self): """ Set up the patches and mocks need for all tests. diff --git a/tests/functional/openlp_plugins/songs/test_foilpresenterimport.py b/tests/functional/openlp_plugins/songs/test_foilpresenterimport.py index 1a8b1e38b..d3d705722 100644 --- a/tests/functional/openlp_plugins/songs/test_foilpresenterimport.py +++ b/tests/functional/openlp_plugins/songs/test_foilpresenterimport.py @@ -36,18 +36,6 @@ class TestFoilPresenter(TestCase): """ Test the functions in the :mod:`foilpresenterimport` module. """ - # TODO: The following modules still need tests written for - # xml_to_song - # to_str - # _process_authors - # _process_cclinumber - # _process_comments - # _process_copyright - # _process_lyrics - # _process_songbooks - # _process_titles - # _process_topics - def setUp(self): self.to_str_patcher = patch('openlp.plugins.songs.lib.importers.foilpresenter.to_str') self.clean_song_patcher = patch('openlp.plugins.songs.lib.importers.foilpresenter.clean_song')