This commit is contained in:
Andreas Preikschat 2013-07-03 19:03:08 +02:00
commit e75a87c5c9
26 changed files with 201 additions and 242 deletions

View File

@ -29,7 +29,7 @@
""" """
Provide HTML Tag management and Formatting Tag access class Provide HTML Tag management and Formatting Tag access class
""" """
import pickle import json
from openlp.core.lib import Settings, translate from openlp.core.lib import Settings, translate
@ -66,7 +66,7 @@ class FormattingTags(object):
if isinstance(tag[element], unicode): if isinstance(tag[element], unicode):
tag[element] = tag[element].encode('utf8') tag[element] = tag[element].encode('utf8')
# Formatting Tags were also known as display tags. # 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 @staticmethod
def load_tags(): def load_tags():
@ -156,11 +156,10 @@ class FormattingTags(object):
u'end html': u'', u'protected': True, u'temporary': False}) u'end html': u'', u'protected': True, u'temporary': False})
FormattingTags.add_html_tags(base_tags) FormattingTags.add_html_tags(base_tags)
FormattingTags.add_html_tags(temporary_tags) FormattingTags.add_html_tags(temporary_tags)
# FIXME: python3 - fix pickle.load() and pickle.dumps().
# Formatting Tags were also known as display tags. # Formatting Tags were also known as display tags.
user_expands = Settings().value(u'displayTags/html_tags') user_expands_string = str(Settings().value(u'formattingTags/html_tags'))
if user_expands: if user_expands_string:
user_tags = pickle.loads(user_expands) user_tags = json.loads(user_expands_string)
for tag in user_tags: for tag in user_tags:
for element in tag: for element in tag:
if isinstance(tag[element], str): if isinstance(tag[element], str):

View File

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4 # vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4

View File

@ -728,8 +728,12 @@ class MediaManagerItem(QtGui.QWidget):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -30,6 +30,7 @@
Provide the generic plugin functionality for OpenLP plugins. Provide the generic plugin functionality for OpenLP plugins.
""" """
import logging import logging
import os
from PyQt4 import QtCore from PyQt4 import QtCore
@ -424,6 +425,9 @@ class Plugin(QtCore.QObject):
""" """
Adds the openlp to the class dynamically Adds the openlp to the class dynamically
""" """
if os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -103,9 +103,6 @@ class Registry(object):
``key`` ``key``
The service to be deleted. 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: if key in self.service_list:
del self.service_list[key] del self.service_list[key]

View File

@ -485,6 +485,12 @@ class ServiceItem(object):
""" """
return self.unique_identifier != other.unique_identifier 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): def is_media(self):
""" """
Confirms if the ServiceItem is media Confirms if the ServiceItem is media

View File

@ -115,7 +115,7 @@ class Settings(QtCore.QSettings):
u'advanced/single click preview': False, u'advanced/single click preview': False,
u'advanced/x11 bypass wm': X11_BYPASS_DEFAULT, u'advanced/x11 bypass wm': X11_BYPASS_DEFAULT,
u'crashreport/last directory': u'', u'crashreport/last directory': u'',
u'displayTags/html_tags': u'', u'formattingTags/html_tags': u'',
u'core/audio repeat list': False, u'core/audio repeat list': False,
u'core/auto open': False, u'core/auto open': False,
u'core/auto preview': False, u'core/auto preview': False,

View File

@ -486,8 +486,12 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -38,6 +38,7 @@ Some of the code for this form is based on the examples at:
from __future__ import division from __future__ import division
import cgi import cgi
import logging import logging
import os
import sys import sys
from PyQt4 import QtCore, QtGui, QtWebKit, QtOpenGL from PyQt4 import QtCore, QtGui, QtWebKit, QtOpenGL
@ -494,8 +495,12 @@ class MainDisplay(Display):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -1064,6 +1064,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
if self.live_controller.display: if self.live_controller.display:
self.live_controller.display.close() self.live_controller.display.close()
self.live_controller.display = None 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): def service_changed(self, reset=False, serviceName=None):
""" """
@ -1374,8 +1377,12 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -29,6 +29,8 @@
""" """
The :mod:`~openlp.core.ui.media.mediaplayer` module contains the MediaPlayer class. The :mod:`~openlp.core.ui.media.mediaplayer` module contains the MediaPlayer class.
""" """
import os
from openlp.core.lib import Registry from openlp.core.lib import Registry
from openlp.core.ui.media import MediaState from openlp.core.ui.media import MediaState
@ -153,8 +155,12 @@ class MediaPlayer(object):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -30,6 +30,7 @@
The actual plugin view form The actual plugin view form
""" """
import logging import logging
import os
from PyQt4 import QtGui from PyQt4 import QtGui
@ -166,8 +167,12 @@ class PluginForm(QtGui.QDialog, Ui_PluginViewDialog):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -1588,8 +1588,12 @@ class ServiceManager(QtGui.QWidget, ServiceManagerDialog):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -836,8 +836,12 @@ class ThemeManager(QtGui.QWidget):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -320,8 +320,12 @@ class OpenLPWizard(QtGui.QWizard):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -28,6 +28,7 @@
############################################################################### ###############################################################################
import logging import logging
import os
import re import re
from PyQt4 import QtGui from PyQt4 import QtGui
@ -191,8 +192,12 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -544,8 +544,12 @@ class BibleDB(QtCore.QObject, Manager):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -29,6 +29,7 @@
""" """
The :mod:`http` module enables OpenLP to retrieve scripture from bible websites. The :mod:`http` module enables OpenLP to retrieve scripture from bible websites.
""" """
import os
import logging import logging
import re import re
import socket import socket
@ -301,8 +302,12 @@ class BGExtract(object):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application
@ -362,8 +367,8 @@ class BSExtract(object):
The version of the Bible like NIV for New International Version The version of the Bible like NIV for New International Version
""" """
log.debug(u'BSExtract.get_books_from_http("%s")', version) log.debug(u'BSExtract.get_books_from_http("%s")', version)
urlversion = urllib.quote(version.encode("utf-8")) url_version = urllib.quote(version.encode("utf-8"))
chapter_url = u'http://m.bibleserver.com/overlay/selectBook?translation=%s' % (urlversion) chapter_url = u'http://m.bibleserver.com/overlay/selectBook?translation=%s' % (url_version)
soup = get_soup_for_bible_ref(chapter_url) soup = get_soup_for_bible_ref(chapter_url)
if not soup: if not soup:
return None return None
@ -377,8 +382,12 @@ class BSExtract(object):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application
@ -477,8 +486,12 @@ class CWExtract(object):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application
@ -598,9 +611,8 @@ class HTTPBible(BibleDB):
if show_error: if show_error:
critical_error_message_box( critical_error_message_box(
translate('BiblesPlugin', 'No Book Found'), translate('BiblesPlugin', 'No Book Found'),
translate('BiblesPlugin', 'No matching ' translate('BiblesPlugin', 'No matching book could be found in this Bible. Check that you have '
'book could be found in this Bible. Check that you ' 'spelled the name of the book correctly.'))
'have spelled the name of the book correctly.'))
return [] return []
book = db_book.name book = db_book.name
if BibleDB.get_verse_count(self, book_id, reference[1]) == 0: if BibleDB.get_verse_count(self, book_id, reference[1]) == 0:
@ -667,14 +679,19 @@ class HTTPBible(BibleDB):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application
application = property(_get_application) application = property(_get_application)
def get_soup_for_bible_ref(reference_url, header=None, pre_parse_regex=None, pre_parse_substitute=None): 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. 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': if error_type == u'download':
critical_error_message_box( critical_error_message_box(
translate('BiblesPlugin.HTTPBible', 'Download Error'), translate('BiblesPlugin.HTTPBible', 'Download Error'),
translate('BiblesPlugin.HTTPBible', 'There was a ' translate('BiblesPlugin.HTTPBible', 'There was a problem downloading your verse selection. Please check '
'problem downloading your verse selection. Please check your ' 'your Internet connection, and if this error continues to occur please consider reporting a bug.'))
'Internet connection, and if this error continues to occur '
'please consider reporting a bug.'))
elif error_type == u'parse': elif error_type == u'parse':
critical_error_message_box( critical_error_message_box(
translate('BiblesPlugin.HTTPBible', 'Parse Error'), translate('BiblesPlugin.HTTPBible', 'Parse Error'),
translate('BiblesPlugin.HTTPBible', 'There was a ' translate('BiblesPlugin.HTTPBible', 'There was a problem extracting your verse selection. If this error '
'problem extracting your verse selection. If this error continues ' 'continues to occur please consider reporting a bug.'))
'to occur please consider reporting a bug.'))

View File

@ -100,8 +100,7 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog):
self.credit_edit.setText(self.custom_slide.credits) self.credit_edit.setText(self.custom_slide.credits)
custom_XML = CustomXMLParser(self.custom_slide.text) custom_XML = CustomXMLParser(self.custom_slide.text)
slide_list = custom_XML.get_verses() slide_list = custom_XML.get_verses()
for slide in slide_list: self.slide_list_view.addItems([slide[1] for slide in slide_list])
self.slide_list_view.addItem(slide[1])
theme = self.custom_slide.theme_name theme = self.custom_slide.theme_name
find_and_set_in_combo_box(self.theme_combo_box, theme) find_and_set_in_combo_box(self.theme_combo_box, theme)
self.title_edit.setFocus() self.title_edit.setFocus()

View File

@ -41,14 +41,19 @@ class CustomSlide(BaseModel):
""" """
CustomSlide model CustomSlide model
""" """
# By default sort the customs by its title considering language specific # By default sort the customs by its title considering language specific characters.
# characters.
def __lt__(self, other): def __lt__(self, other):
return get_locale_key(self.title) < get_locale_key(other.title) return get_locale_key(self.title) < get_locale_key(other.title)
def __eq__(self, other): def __eq__(self, other):
return get_locale_key(self.title) == get_locale_key(other.title) 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): def init_schema(url):
""" """

View File

@ -174,13 +174,13 @@ class PPTViewer(QtGui.QWidget):
int(self.widthEdit.text()), int(self.heightEdit.text())) int(self.widthEdit.text()), int(self.heightEdit.text()))
filename = str(self.pptEdit.text().replace(u'/', u'\\')) filename = str(self.pptEdit.text().replace(u'/', u'\\'))
folder = str(self.folderEdit.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) self.pptid = self.pptdll.OpenPPT(filename, None, rect, folder)
print u'id: ' + unicode(self.pptid) print(u'id: ' + unicode(self.pptid))
if oldid >= 0: if oldid >= 0:
self.pptdll.ClosePPT(oldid); self.pptdll.ClosePPT(oldid);
slides = self.pptdll.GetSlideCount(self.pptid) 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.total.setNum(self.pptdll.GetSlideCount(self.pptid))
self.updateCurrSlide() self.updateCurrSlide()
@ -188,14 +188,14 @@ class PPTViewer(QtGui.QWidget):
if self.pptid < 0: if self.pptid < 0:
return return
slide = unicode(self.pptdll.GetCurrentSlide(self.pptid)) slide = unicode(self.pptdll.GetCurrentSlide(self.pptid))
print u'currslide: ' + slide print(u'currslide: ' + slide)
self.slideEdit.setText(slide) self.slideEdit.setText(slide)
app.processEvents() app.processEvents()
def gotoClick(self): def gotoClick(self):
if self.pptid < 0: if self.pptid < 0:
return return
print self.slideEdit.text() print(self.slideEdit.text())
self.pptdll.GotoSlide(self.pptid, int(self.slideEdit.text())) self.pptdll.GotoSlide(self.pptid, int(self.slideEdit.text()))
self.updateCurrSlide() self.updateCurrSlide()
app.processEvents() app.processEvents()
@ -207,7 +207,7 @@ class PPTViewer(QtGui.QWidget):
if __name__ == '__main__': if __name__ == '__main__':
pptdll = cdll.LoadLibrary(r'pptviewlib.dll') pptdll = cdll.LoadLibrary(r'pptviewlib.dll')
pptdll.SetDebug(1) pptdll.SetDebug(1)
print u'Begin...' print(u'Begin...')
app = QtGui.QApplication(sys.argv) app = QtGui.QApplication(sys.argv)
window = PPTViewer() window = PPTViewer()
window.pptdll = pptdll window.pptdll = pptdll

View File

@ -349,8 +349,12 @@ class DuplicateSongRemovalForm(OpenLPWizard):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -27,6 +27,7 @@
# Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Temple Place, Suite 330, Boston, MA 02111-1307 USA #
############################################################################### ###############################################################################
import logging import logging
import os
from PyQt4 import QtGui, QtCore from PyQt4 import QtGui, QtCore
from sqlalchemy.sql import and_ from sqlalchemy.sql import and_
@ -525,8 +526,12 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -84,8 +84,12 @@ class OpenLyricsExport(object):
def _get_application(self): 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 os.name == u'nt':
return Registry().get(u'application')
else:
if not hasattr(self, u'_application'): if not hasattr(self, u'_application'):
self._application = Registry().get(u'application') self._application = Registry().get(u'application')
return self._application return self._application

View File

@ -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()

View File

@ -33,11 +33,11 @@ class TestFormattingTags(TestCase):
""" """
with patch(u'openlp.core.lib.translate') as mocked_translate, \ with patch(u'openlp.core.lib.translate') as mocked_translate, \
patch(u'openlp.core.lib.settings') as mocked_settings, \ 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. # GIVEN: Our mocked modules and functions.
mocked_translate.side_effect = lambda module, string_to_translate, comment: string_to_translate mocked_translate.side_effect = lambda module, string_to_translate, comment: string_to_translate
mocked_settings.value.return_value = u'' mocked_settings.value.return_value = u''
mocked_pickle.load.return_value = [] mocked_json.load.return_value = []
# WHEN: Get the display tags. # WHEN: Get the display tags.
FormattingTags.load_tags() FormattingTags.load_tags()
@ -54,11 +54,11 @@ class TestFormattingTags(TestCase):
""" """
with patch(u'openlp.core.lib.translate') as mocked_translate, \ with patch(u'openlp.core.lib.translate') as mocked_translate, \
patch(u'openlp.core.lib.settings') as mocked_settings, \ 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. # GIVEN: Our mocked modules and functions.
mocked_translate.side_effect = lambda module, string_to_translate: string_to_translate mocked_translate.side_effect = lambda module, string_to_translate: string_to_translate
mocked_settings.value.return_value = u'' mocked_settings.value.return_value = u''
mocked_pickle.loads.side_effect = [[], [TAG]] mocked_json.loads.side_effect = [[], [TAG]]
# WHEN: Get the display tags. # WHEN: Get the display tags.
FormattingTags.load_tags() FormattingTags.load_tags()