diff --git a/openlp/plugins/songs/lib/importers/worshipcenterpro.py b/openlp/plugins/songs/lib/importers/worshipcenterpro.py index 31352ad0e..cc1a96f8e 100644 --- a/openlp/plugins/songs/lib/importers/worshipcenterpro.py +++ b/openlp/plugins/songs/lib/importers/worshipcenterpro.py @@ -24,7 +24,7 @@ The :mod:`worshipcenterpro` module provides the functionality for importing a WorshipCenter Pro database into the OpenLP database. """ import logging - +import re import pyodbc from openlp.core.common import translate @@ -71,8 +71,41 @@ class WorshipCenterProImport(SongImport): break self.set_defaults() self.title = songs[song]['TITLE'] + if 'AUTHOR' in songs[song]: + self.parse_author(songs[song]['AUTHOR']) + if 'CCLISONGID' in songs[song]: + self.ccli_number = songs[song]['CCLISONGID'] + if 'COMMENTS' in songs[song]: + self.add_comment(songs[song]['COMMENTS']) + if 'COPY' in songs[song]: + self.add_copyright(songs[song]['COPY']) + if 'SUBJECT' in songs[song]: + self.topics.append(songs[song]['SUBJECT']) lyrics = songs[song]['LYRICS'].strip('&crlf;&crlf;') for verse in lyrics.split('&crlf;&crlf;'): verse = verse.replace('&crlf;', '\n') - self.add_verse(verse) + marker_type = 'v' + # Find verse markers if any + marker_start = verse.find('<') + if marker_start > -1: + marker_end = verse.find('>') + marker = verse[marker_start + 1:marker_end] + # Identify the marker type + if 'REFRAIN' in marker or 'CHORUS' in marker: + marker_type = 'c' + elif 'BRIDGE' in marker: + marker_type = 'b' + elif 'PRECHORUS' in marker: + marker_type = 'p' + elif 'END' in marker: + marker_type = 'e' + elif 'INTRO' in marker: + marker_type = 'i' + elif 'TAG' in marker: + marker_type = 'o' + else: + marker_type = 'v' + # Strip tags from text + verse = re.sub('<[^<]+?>', '', verse) + self.add_verse(verse, marker_type) self.finish() diff --git a/tests/functional/openlp_plugins/songs/test_worshipcenterproimport.py b/tests/functional/openlp_plugins/songs/test_worshipcenterproimport.py index 5b7dde63d..849522e67 100644 --- a/tests/functional/openlp_plugins/songs/test_worshipcenterproimport.py +++ b/tests/functional/openlp_plugins/songs/test_worshipcenterproimport.py @@ -25,9 +25,6 @@ This module contains tests for the WorshipCenter Pro song importer. import os from unittest import TestCase, SkipTest -if os.name != 'nt': - raise SkipTest('Not Windows, skipping test') - import pyodbc from tests.functional import patch, MagicMock @@ -67,6 +64,10 @@ class WorshipCenterProImportLogger(WorshipCenterProImport): RECORDSET_TEST_DATA = [TestRecord(1, 'TITLE', 'Amazing Grace'), + TestRecord(1, 'AUTHOR', 'John Newton'), + TestRecord(1, 'CCLISONGID', '12345'), + TestRecord(1, 'COMMENTS', 'The original version'), + TestRecord(1, 'COPY', 'Public Domain'), TestRecord( 1, 'LYRICS', 'Amazing grace! How&crlf;sweet the sound&crlf;That saved a wretch like me!&crlf;' @@ -97,7 +98,9 @@ RECORDSET_TEST_DATA = [TestRecord(1, 'TITLE', 'Amazing Grace'), 'Just to learn from His&crlf;lips words of comfort&crlf;In the beautiful&crlf;' 'garden of prayer.&crlf;&crlf;There\'s a garden where&crlf;Jesus is waiting,&crlf;' 'And He bids you to come,&crlf;meet Him there;&crlf;Just to bow and&crlf;' - 'receive a new blessing&crlf;In the beautiful&crlf;garden of prayer.&crlf;&crlf;')] + 'receive a new blessing&crlf;In the beautiful&crlf;garden of prayer.&crlf;&crlf;'), + + ] SONG_TEST_DATA = [{'title': 'Amazing Grace', 'verses': [ ('Amazing grace! How\nsweet the sound\nThat saved a wretch like me!\nI once was lost,\n' @@ -113,7 +116,10 @@ SONG_TEST_DATA = [{'title': 'Amazing Grace', ('The earth shall soon\ndissolve like snow,\nThe sun forbear to shine;\nBut God, Who called\n' 'me here below,\nShall be forever mine.'), ('When we\'ve been there\nten thousand years,\nBright shining as the sun,\n' - 'We\'ve no less days to\nsing God\'s praise\nThan when we\'d first begun.')]}, + 'We\'ve no less days to\nsing God\'s praise\nThan when we\'d first begun.')], + 'author': 'John Newton', + 'comments': 'The original version', + 'copyright': 'Public Domain'}, {'title': 'Beautiful Garden Of Prayer, The', 'verses': [ ('There\'s a garden where\nJesus is waiting,\nThere\'s a place that\nis wondrously fair,\n' @@ -191,6 +197,9 @@ class TestWorshipCenterProSongImport(TestCase): mocked_manager = MagicMock() mocked_import_wizard = MagicMock() mocked_add_verse = MagicMock() + mocked_parse_author= MagicMock() + mocked_add_comment = MagicMock() + mocked_add_copyright = MagicMock() mocked_finish = MagicMock() mocked_pyodbc.connect().cursor().fetchall.return_value = RECORDSET_TEST_DATA mocked_translate.return_value = 'Translated Text' @@ -198,6 +207,9 @@ class TestWorshipCenterProSongImport(TestCase): importer.import_source = 'import_source' importer.import_wizard = mocked_import_wizard importer.add_verse = mocked_add_verse + importer.parse_author = mocked_parse_author + importer.add_comment = mocked_add_comment + importer.add_copyright = mocked_add_copyright importer.stop_import_flag = False importer.finish = mocked_finish @@ -220,6 +232,12 @@ class TestWorshipCenterProSongImport(TestCase): verse_calls = song_data['verses'] add_verse_call_count += len(verse_calls) for call in verse_calls: - mocked_add_verse.assert_any_call(call) + mocked_add_verse.assert_any_call(call, 'v') + if 'author' in song_data: + mocked_parse_author.assert_any_call(song_data['author']) + if 'comments' in song_data: + mocked_add_comment.assert_any_call(song_data['comments']) + if 'copyright' in song_data: + mocked_add_copyright.assert_any_call(song_data['copyright']) self.assertEqual(mocked_add_verse.call_count, add_verse_call_count, 'Incorrect number of calls made to add_verse')