diff --git a/openlp/core/lib/formattingtags.py b/openlp/core/lib/formattingtags.py index 501106619..1984b08ba 100644 --- a/openlp/core/lib/formattingtags.py +++ b/openlp/core/lib/formattingtags.py @@ -29,7 +29,7 @@ """ Provide HTML Tag management and Formatting Tag access class """ -import pickle +import json from openlp.core.lib import Settings, translate @@ -66,7 +66,7 @@ class FormattingTags(object): if isinstance(tag[element], unicode): tag[element] = tag[element].encode('utf8') # Formatting Tags were also known as display tags. - Settings().setValue(u'displayTags/html_tags', pickle.dumps(tags) if tags else u'') + Settings().setValue(u'formattingTags/html_tags', json.dumps(tags) if tags else u'') @staticmethod def load_tags(): @@ -156,11 +156,10 @@ class FormattingTags(object): u'end html': u'', u'protected': True, u'temporary': False}) FormattingTags.add_html_tags(base_tags) FormattingTags.add_html_tags(temporary_tags) - # FIXME: python3 - fix pickle.load() and pickle.dumps(). # Formatting Tags were also known as display tags. - user_expands = Settings().value(u'displayTags/html_tags') - if user_expands: - user_tags = pickle.loads(user_expands) + user_expands_string = str(Settings().value(u'formattingTags/html_tags')) + if user_expands_string: + user_tags = json.loads(user_expands_string) for tag in user_tags: for element in tag: if isinstance(tag[element], str): diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index 412eddd1e..dc535a665 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -1,3 +1,4 @@ + # -*- coding: utf-8 -*- # vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4 diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index c3e1fa366..973d457bb 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -728,10 +728,14 @@ class MediaManagerItem(QtGui.QWidget): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index b4f851b24..a79ba850a 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -30,6 +30,7 @@ Provide the generic plugin functionality for OpenLP plugins. """ import logging +import os from PyQt4 import QtCore @@ -424,8 +425,11 @@ class Plugin(QtCore.QObject): """ Adds the openlp to the class dynamically """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/core/lib/registry.py b/openlp/core/lib/registry.py index 7e880f1f9..cee9e0329 100644 --- a/openlp/core/lib/registry.py +++ b/openlp/core/lib/registry.py @@ -103,9 +103,6 @@ class Registry(object): ``key`` The service to be deleted. """ - if self.running_under_test is False: - log.error(u'Invalid Method call for key %s' % key) - raise KeyError(u'Invalid Method call for key %s' % key) if key in self.service_list: del self.service_list[key] diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index b32e1aaf0..ee1a5c588 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -485,6 +485,12 @@ class ServiceItem(object): """ return self.unique_identifier != other.unique_identifier + def __hash__(self): + """ + Return the hash for the service item. + """ + return self.unique_identifier + def is_media(self): """ Confirms if the ServiceItem is media diff --git a/openlp/core/lib/settings.py b/openlp/core/lib/settings.py index 5e73ffc1d..a20e3e1a8 100644 --- a/openlp/core/lib/settings.py +++ b/openlp/core/lib/settings.py @@ -115,7 +115,7 @@ class Settings(QtCore.QSettings): u'advanced/single click preview': False, u'advanced/x11 bypass wm': X11_BYPASS_DEFAULT, u'crashreport/last directory': u'', - u'displayTags/html_tags': u'', + u'formattingTags/html_tags': u'', u'core/audio repeat list': False, u'core/auto open': False, u'core/auto preview': False, diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 5a4530256..4eb075c21 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -486,10 +486,14 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 7069cb9b7..eab89cb7d 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -38,6 +38,7 @@ Some of the code for this form is based on the examples at: from __future__ import division import cgi import logging +import os import sys from PyQt4 import QtCore, QtGui, QtWebKit, QtOpenGL @@ -494,11 +495,15 @@ class MainDisplay(Display): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 4607c441f..c14a50d69 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -1064,6 +1064,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if self.live_controller.display: self.live_controller.display.close() self.live_controller.display = None + if os.name == u'nt': + # Needed for Windows to stop crashes on exit + Registry().remove(u'application') def service_changed(self, reset=False, serviceName=None): """ @@ -1374,10 +1377,14 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/core/ui/media/mediaplayer.py b/openlp/core/ui/media/mediaplayer.py index c1f060f60..5d9e3663f 100644 --- a/openlp/core/ui/media/mediaplayer.py +++ b/openlp/core/ui/media/mediaplayer.py @@ -29,6 +29,8 @@ """ The :mod:`~openlp.core.ui.media.mediaplayer` module contains the MediaPlayer class. """ +import os + from openlp.core.lib import Registry from openlp.core.ui.media import MediaState @@ -153,10 +155,14 @@ class MediaPlayer(object): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) \ No newline at end of file diff --git a/openlp/core/ui/pluginform.py b/openlp/core/ui/pluginform.py index dd497bd68..4f4824fb7 100644 --- a/openlp/core/ui/pluginform.py +++ b/openlp/core/ui/pluginform.py @@ -30,6 +30,7 @@ The actual plugin view form """ import logging +import os from PyQt4 import QtGui @@ -166,10 +167,14 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 67d7ee5de..834652f3b 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -1588,10 +1588,14 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 4ab125039..dcaad74d4 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -836,10 +836,14 @@ class ThemeManager(QtGui.QWidget): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index 0b142b459..ca89808ff 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -320,10 +320,14 @@ class OpenLPWizard(QtGui.QWizard): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index b05fb68fb..4e0a5a7c0 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -28,6 +28,7 @@ ############################################################################### import logging +import os import re from PyQt4 import QtGui @@ -191,10 +192,14 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 837dbec38..69ec72ee5 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -544,11 +544,15 @@ class BibleDB(QtCore.QObject, Manager): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index efab9106b..de48b2617 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -29,6 +29,7 @@ """ The :mod:`http` module enables OpenLP to retrieve scripture from bible websites. """ +import os import logging import re import socket @@ -301,11 +302,15 @@ class BGExtract(object): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) @@ -362,8 +367,8 @@ class BSExtract(object): The version of the Bible like NIV for New International Version """ log.debug(u'BSExtract.get_books_from_http("%s")', version) - urlversion = urllib.quote(version.encode("utf-8")) - chapter_url = u'http://m.bibleserver.com/overlay/selectBook?translation=%s' % (urlversion) + url_version = urllib.quote(version.encode("utf-8")) + chapter_url = u'http://m.bibleserver.com/overlay/selectBook?translation=%s' % (url_version) soup = get_soup_for_bible_ref(chapter_url) if not soup: return None @@ -377,11 +382,15 @@ class BSExtract(object): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) @@ -477,11 +486,15 @@ class CWExtract(object): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) @@ -598,9 +611,8 @@ class HTTPBible(BibleDB): if show_error: critical_error_message_box( translate('BiblesPlugin', 'No Book Found'), - translate('BiblesPlugin', 'No matching ' - 'book could be found in this Bible. Check that you ' - 'have spelled the name of the book correctly.')) + translate('BiblesPlugin', 'No matching book could be found in this Bible. Check that you have ' + 'spelled the name of the book correctly.')) return [] book = db_book.name if BibleDB.get_verse_count(self, book_id, reference[1]) == 0: @@ -667,14 +679,19 @@ class HTTPBible(BibleDB): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) + def get_soup_for_bible_ref(reference_url, header=None, pre_parse_regex=None, pre_parse_substitute=None): """ Gets a webpage and returns a parsed and optionally cleaned soup or None. @@ -724,13 +741,10 @@ def send_error_message(error_type): if error_type == u'download': critical_error_message_box( translate('BiblesPlugin.HTTPBible', 'Download Error'), - translate('BiblesPlugin.HTTPBible', 'There was a ' - 'problem downloading your verse selection. Please check your ' - 'Internet connection, and if this error continues to occur ' - 'please consider reporting a bug.')) + translate('BiblesPlugin.HTTPBible', 'There was a problem downloading your verse selection. Please check ' + 'your Internet connection, and if this error continues to occur please consider reporting a bug.')) elif error_type == u'parse': critical_error_message_box( translate('BiblesPlugin.HTTPBible', 'Parse Error'), - translate('BiblesPlugin.HTTPBible', 'There was a ' - 'problem extracting your verse selection. If this error continues ' - 'to occur please consider reporting a bug.')) + translate('BiblesPlugin.HTTPBible', 'There was a problem extracting your verse selection. If this error ' + 'continues to occur please consider reporting a bug.')) diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index 580fbde07..1009ea8d3 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -100,8 +100,7 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): self.credit_edit.setText(self.custom_slide.credits) custom_XML = CustomXMLParser(self.custom_slide.text) slide_list = custom_XML.get_verses() - for slide in slide_list: - self.slide_list_view.addItem(slide[1]) + self.slide_list_view.addItems([slide[1] for slide in slide_list]) theme = self.custom_slide.theme_name find_and_set_in_combo_box(self.theme_combo_box, theme) self.title_edit.setFocus() diff --git a/openlp/plugins/custom/lib/db.py b/openlp/plugins/custom/lib/db.py index 253ca5432..2f6eb5d6d 100644 --- a/openlp/plugins/custom/lib/db.py +++ b/openlp/plugins/custom/lib/db.py @@ -41,14 +41,19 @@ class CustomSlide(BaseModel): """ CustomSlide model """ - # By default sort the customs by its title considering language specific - # characters. + # By default sort the customs by its title considering language specific characters. def __lt__(self, other): return get_locale_key(self.title) < get_locale_key(other.title) def __eq__(self, other): return get_locale_key(self.title) == get_locale_key(other.title) + def __hash__(self): + """ + Return the hash for a custom slide. + """ + return self.id + def init_schema(url): """ diff --git a/openlp/plugins/presentations/lib/pptviewlib/ppttest.py b/openlp/plugins/presentations/lib/pptviewlib/ppttest.py index c8573c807..f07468bb8 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/ppttest.py +++ b/openlp/plugins/presentations/lib/pptviewlib/ppttest.py @@ -174,13 +174,13 @@ class PPTViewer(QtGui.QWidget): int(self.widthEdit.text()), int(self.heightEdit.text())) filename = str(self.pptEdit.text().replace(u'/', u'\\')) folder = str(self.folderEdit.text().replace(u'/', u'\\')) - print filename, folder + print(filename, folder) self.pptid = self.pptdll.OpenPPT(filename, None, rect, folder) - print u'id: ' + unicode(self.pptid) + print(u'id: ' + unicode(self.pptid)) if oldid >= 0: self.pptdll.ClosePPT(oldid); slides = self.pptdll.GetSlideCount(self.pptid) - print u'slidecount: ' + unicode(slides) + print(u'slidecount: ' + unicode(slides)) self.total.setNum(self.pptdll.GetSlideCount(self.pptid)) self.updateCurrSlide() @@ -188,14 +188,14 @@ class PPTViewer(QtGui.QWidget): if self.pptid < 0: return slide = unicode(self.pptdll.GetCurrentSlide(self.pptid)) - print u'currslide: ' + slide + print(u'currslide: ' + slide) self.slideEdit.setText(slide) app.processEvents() def gotoClick(self): if self.pptid < 0: return - print self.slideEdit.text() + print(self.slideEdit.text()) self.pptdll.GotoSlide(self.pptid, int(self.slideEdit.text())) self.updateCurrSlide() app.processEvents() @@ -207,7 +207,7 @@ class PPTViewer(QtGui.QWidget): if __name__ == '__main__': pptdll = cdll.LoadLibrary(r'pptviewlib.dll') pptdll.SetDebug(1) - print u'Begin...' + print(u'Begin...') app = QtGui.QApplication(sys.argv) window = PPTViewer() window.pptdll = pptdll diff --git a/openlp/plugins/songs/forms/duplicatesongremovalform.py b/openlp/plugins/songs/forms/duplicatesongremovalform.py index d612a5627..4427bbb31 100644 --- a/openlp/plugins/songs/forms/duplicatesongremovalform.py +++ b/openlp/plugins/songs/forms/duplicatesongremovalform.py @@ -349,10 +349,14 @@ class DuplicateSongRemovalForm(OpenLPWizard): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) \ No newline at end of file diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index 9f003b2a0..2eb895a9a 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -27,6 +27,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### import logging +import os from PyQt4 import QtGui, QtCore from sqlalchemy.sql import and_ @@ -525,10 +526,14 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): def _get_application(self): """ - Adds the application to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/plugins/songs/lib/openlyricsexport.py b/openlp/plugins/songs/lib/openlyricsexport.py index f9ac6ebb3..35a9a29ec 100644 --- a/openlp/plugins/songs/lib/openlyricsexport.py +++ b/openlp/plugins/songs/lib/openlyricsexport.py @@ -84,10 +84,14 @@ class OpenLyricsExport(object): def _get_application(self): """ - Adds the openlp to the class dynamically + Adds the openlp to the class dynamically. + Windows needs to access the application in a dynamic manner. """ - if not hasattr(self, u'_application'): - self._application = Registry().get(u'application') - return self._application + if os.name == u'nt': + return Registry().get(u'application') + else: + if not hasattr(self, u'_application'): + self._application = Registry().get(u'application') + return self._application application = property(_get_application) diff --git a/openlp/plugins/songs/lib/test/test_opensongimport.py b/openlp/plugins/songs/lib/test/test_opensongimport.py deleted file mode 100644 index 8f09ea875..000000000 --- a/openlp/plugins/songs/lib/test/test_opensongimport.py +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 - -############################################################################### -# OpenLP - Open Source Lyrics Projection # -# --------------------------------------------------------------------------- # -# Copyright (c) 2008-2013 Raoul Snyman # -# Portions copyright (c) 2008-2013 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 # -############################################################################### - -from openlp.plugins.songs.lib.opensongimport import OpenSongImport -from openlp.core.lib.db import Manager -from openlp.plugins.songs.lib.db import init_schema - -import logging -LOG_FILENAME = 'test.log' -logging.basicConfig(filename=LOG_FILENAME,level=logging.INFO) - -# Stubs to replace the UI functions for raw testing -class wizard_stub: - def __init__(self): - self.progressBar=progbar_stub() - def incrementProgressBar(self, str): - pass -class progbar_stub: - def __init__(self): - pass - def setMaximum(self, arg): - pass - -def test(): - manager = Manager(u'songs', init_schema) - o = OpenSongImport(manager, filenames=[u'test.opensong']) - o.import_wizard = wizard_stub() - o.commit = False - o.do_import() - o.print_song() - assert o.copyright == u'2010 Martin Thompson' - assert o.authors == [u'MartiÑ Thómpson', u'Martin2 Thómpson'] - assert o.title == u'Martins Test' - assert o.alternate_title == u'' - assert o.song_number == u'1' - assert [u'C1', u'Chorus 1'] in o.verses - assert [u'C2', u'Chorus 2'] in o.verses - assert not [u'C3', u'Chorus 3'] in o.verses - assert [u'B1', u'Bridge 1\nBridge 1 line 2'] in o.verses - assert [u'V1', u'v1 Line 1\nV1 Line 2'] in o.verses - assert [u'V2', u'v2 Line 1\nV2 Line 2'] in o.verses - assert [u'V3A', u'V3 Line 1\nV3 Line 2'] in o.verses - assert [u'RAP1', u'Rap 1 Line 1\nRap 1 Line 2'] in o.verses - assert [u'RAP2', u'Rap 2 Line 1\nRap 2 Line 2'] in o.verses - assert [u'RAP3', u'Rap 3 Line 1\nRap 3 Line 2'] in o.verses - assert [u'X1', u'Unreferenced verse line 1'] in o.verses - assert o.verse_order_list == [u'V1', u'C1', u'V2', u'C2', u'V3A', u'B1', u'V1', u'T1', u'RAP1', u'RAP2', u'RAP3'] - assert o.ccli_number == u'Blah' - assert o.topics == [u'TestTheme', u'TestAltTheme'] - - o.filenames = [u'test.opensong.zip'] - o.set_defaults() - o.do_import() - o.print_song() - assert o.copyright == u'2010 Martin Thompson' - assert o.authors == [u'MartiÑ Thómpson'] - assert o.title == u'Martins Test' - assert o.alternate_title == u'' - assert o.song_number == u'1' - assert [u'B1', u'Bridge 1\nBridge 1 line 2'] in o.verses - assert [u'C1', u'Chorus 1'] in o.verses - assert [u'C2', u'Chorus 2'] in o.verses - assert not [u'C3', u'Chorus 3'] in o.verses - assert [u'V1', u'v1 Line 1\nV1 Line 2'] in o.verses - assert [u'V2', u'v2 Line 1\nV2 Line 2'] in o.verses - print o.verse_order_list - assert o.verse_order_list == [u'V1', u'C1', u'V2', u'C2', u'V3', u'B1', u'V1'] - - o.filenames = [u'test2.opensong'] - o.set_defaults() - o.do_import() - o.print_song() - assert o.copyright == u'2010 Martin Thompson' - assert o.authors == [u'Martin Thompson'] - assert o.title == u'Martins 2nd Test' - assert o.alternate_title == u'' - assert o.song_number == u'2' - print o.verses - assert [u'B1', u'Bridge 1\nBridge 1 line 2'] in o.verses - assert [u'C1', u'Chorus 1'] in o.verses - assert [u'C2', u'Chorus 2'] in o.verses - assert not [u'C3', u'Chorus 3'] in o.verses - assert [u'V1', u'v1 Line 1\nV1 Line 2'] in o.verses - assert [u'V2', u'v2 Line 1\nV2 Line 2'] in o.verses - print o.verse_order_list - assert o.verse_order_list == [u'V1', u'V2', u'B1', u'C1', u'C2'] - - o.filenames = [u'test3.opensong'] - o.set_defaults() - o.do_import() - o.print_song() - assert o.copyright == u'2010' - assert o.authors == [u'Martin Thompson'] - assert o.title == u'Test single verse' - assert o.alternate_title == u'' - assert o.ccli_number == u'123456' - assert o.verse_order_list == [u'V1'] - assert o.topics == [u'Worship: Declaration'] - print o.verses[0] - assert [u'V1', u'Line 1\nLine 2'] in o.verses - - print "Tests passed" - -if __name__ == "__main__": - test() diff --git a/tests/functional/openlp_core_lib/test_formattingtags.py b/tests/functional/openlp_core_lib/test_formattingtags.py index 721032033..326dde5c8 100644 --- a/tests/functional/openlp_core_lib/test_formattingtags.py +++ b/tests/functional/openlp_core_lib/test_formattingtags.py @@ -33,11 +33,11 @@ class TestFormattingTags(TestCase): """ with patch(u'openlp.core.lib.translate') as mocked_translate, \ patch(u'openlp.core.lib.settings') as mocked_settings, \ - patch(u'openlp.core.lib.formattingtags.pickle') as mocked_pickle: + patch(u'openlp.core.lib.formattingtags.json') as mocked_json: # GIVEN: Our mocked modules and functions. mocked_translate.side_effect = lambda module, string_to_translate, comment: string_to_translate mocked_settings.value.return_value = u'' - mocked_pickle.load.return_value = [] + mocked_json.load.return_value = [] # WHEN: Get the display tags. FormattingTags.load_tags() @@ -54,11 +54,11 @@ class TestFormattingTags(TestCase): """ with patch(u'openlp.core.lib.translate') as mocked_translate, \ patch(u'openlp.core.lib.settings') as mocked_settings, \ - patch(u'openlp.core.lib.formattingtags.pickle') as mocked_pickle: + patch(u'openlp.core.lib.formattingtags.json') as mocked_json: # GIVEN: Our mocked modules and functions. mocked_translate.side_effect = lambda module, string_to_translate: string_to_translate mocked_settings.value.return_value = u'' - mocked_pickle.loads.side_effect = [[], [TAG]] + mocked_json.loads.side_effect = [[], [TAG]] # WHEN: Get the display tags. FormattingTags.load_tags()