openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #23926
Re: [Merge] lp:~sam92/openlp/powerpraise-importer into lp:openlp
Review: Needs Fixing
Diff comments:
> === modified file 'openlp/plugins/songs/lib/importer.py'
> --- openlp/plugins/songs/lib/importer.py 2014-06-25 12:23:31 +0000
> +++ openlp/plugins/songs/lib/importer.py 2014-07-03 22:09:52 +0000
> @@ -51,6 +51,7 @@
> from .zionworximport import ZionWorxImport
> from .propresenterimport import ProPresenterImport
> from .worshipassistantimport import WorshipAssistantImport
> +from .powerpraiseimport import PowerPraiseImport
> # Imports that might fail
>
>
> @@ -160,17 +161,18 @@
> FoilPresenter = 8
> MediaShout = 9
> OpenSong = 10
> - PowerSong = 11
> - ProPresenter = 12
> - SongBeamer = 13
> - SongPro = 14
> - SongShowPlus = 15
> - SongsOfFellowship = 16
> - SundayPlus = 17
> - WordsOfWorship = 18
> - WorshipAssistant = 19
> - WorshipCenterPro = 20
> - ZionWorx = 21
> + PowerPraise = 11
> + PowerSong = 12
> + ProPresenter = 13
> + SongBeamer = 14
> + SongPro = 15
> + SongShowPlus = 16
> + SongsOfFellowship = 17
> + SundayPlus = 18
> + WordsOfWorship = 19
> + WorshipAssistant = 20
> + WorshipCenterPro = 21
> + ZionWorx = 22
>
> # Set optional attribute defaults
> __defaults__ = {
> @@ -266,6 +268,12 @@
> 'name': WizardStrings.OS,
> 'prefix': 'openSong'
> },
> + PowerPraise: {
> + 'class': PowerPraiseImport,
> + 'name': 'PowerPraise',
> + 'prefix': 'powerPraise',
> + 'filter': '%s (*.ppl)' % translate('SongsPlugin.ImportWizardForm', 'PowerPraise Song Files')
> + },
> PowerSong: {
> 'class': PowerSongImport,
> 'name': 'PowerSong 1.0',
> @@ -374,6 +382,7 @@
> SongFormat.FoilPresenter,
> SongFormat.MediaShout,
> SongFormat.OpenSong,
> + SongFormat.PowerPraise,
> SongFormat.PowerSong,
> SongFormat.ProPresenter,
> SongFormat.SongBeamer,
>
> === added file 'openlp/plugins/songs/lib/powerpraiseimport.py'
> --- openlp/plugins/songs/lib/powerpraiseimport.py 1970-01-01 00:00:00 +0000
> +++ openlp/plugins/songs/lib/powerpraiseimport.py 2014-07-03 22:09:52 +0000
> @@ -0,0 +1,83 @@
> +# -*- coding: utf-8 -*-
> +# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
> +
> +###############################################################################
> +# OpenLP - Open Source Lyrics Projection #
> +# --------------------------------------------------------------------------- #
> +# Copyright (c) 2008-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 #
> +###############################################################################
> +"""
> +The :mod:`powerpraiseimport` module provides the functionality for importing
> +Powerpraise song files into the current database.
> +"""
> +
> +import os
> +import base64
> +from lxml import objectify
> +
> +from openlp.core.ui.wizard import WizardStrings
> +from openlp.plugins.songs.lib import strip_rtf
> +from .songimport import SongImport
> +
> +
> +class PowerPraiseImport(SongImport):
> + """
> + The :class:`PowerpraiseImport` class provides OpenLP with the
> + ability to import Powerpraise song files.
> + """
> + def do_import(self):
> + self.import_wizard.progress_bar.setMaximum(len(self.import_source))
> + for file_path in self.import_source:
> + if self.stop_import_flag:
> + return
> + self.import_wizard.increment_progress_bar(WizardStrings.ImportingType % os.path.basename(file_path))
> + root = objectify.parse(open(file_path, 'rb')).getroot()
> + self.process_song(root)
> +
> + def process_song(self, root):
> + self.set_defaults()
> + self.title = str(root.general.title)
> + verse_order_list = []
> + for item in root.order.item:
> + verse_order_list.append(str(item))
> +
Blank Line
> + count = 0
> + for part in root.songtext.part:
> + count += 1
> + verse_def = "v%d" % count
> + original_verse_def = part.get('caption')
> + verse_text = []
> + for slide in part.slide:
> + if not hasattr(slide, 'line'):
> + continue # No content
> + for line in slide.line:
> + verse_text.append(str(line))
> + self.add_verse('\n'.join(verse_text), verse_def)
> + # Update verse name in verse order list
> + for i in range(len(verse_order_list)):
> + if verse_order_list[i].lower() == original_verse_def.lower():
> + verse_order_list[i] = verse_def
> +
> + self.verse_order_list = verse_order_list
> + if not self.finish():
> + self.log_error(self.import_source)
>
> === added file 'tests/functional/openlp_plugins/songs/test_powerpraiseimport.py'
> --- tests/functional/openlp_plugins/songs/test_powerpraiseimport.py 1970-01-01 00:00:00 +0000
> +++ tests/functional/openlp_plugins/songs/test_powerpraiseimport.py 2014-07-03 22:09:52 +0000
> @@ -0,0 +1,54 @@
> +# -*- coding: utf-8 -*-
> +# vim: autoindent shiftwidth=4 expandtab textwidth=120 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 #
> +###############################################################################
> +"""
> +The :mod:`powerpraiseimport` module provides the functionality for importing
> +ProPresenter song files into the current installation database.
> +"""
> +
> +import os
> +
> +from tests.helpers.songfileimport import SongImportTestHelper
> +
> +TEST_PATH = os.path.abspath(
> + os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources', 'powerpraisesongs'))
> +
> +
> +class TestPowerPraiseFileImport(SongImportTestHelper):
> +
> + def __init__(self, *args, **kwargs):
> + self.importer_class_name = 'PowerPraiseImport'
> + self.importer_module_name = 'powerpraiseimport'
> + super(TestPowerPraiseFileImport, self).__init__(*args, **kwargs)
> +
> + def test_song_import(self):
> + """
> + Test that loading a PowerPraise file works correctly
> + """
> + self.file_import([os.path.join(TEST_PATH, 'Näher, mein Gott zu Dir.ppl')],
> + self.load_external_result_data(os.path.join(TEST_PATH, 'Näher, mein Gott zu Dir.json')))
>
> === modified file 'tests/functional/openlp_plugins/songs/test_propresenterimport.py'
> --- tests/functional/openlp_plugins/songs/test_propresenterimport.py 2014-06-25 15:03:00 +0000
> +++ tests/functional/openlp_plugins/songs/test_propresenterimport.py 2014-07-03 22:09:52 +0000
> @@ -48,7 +48,7 @@
>
> def test_song_import(self):
> """
> - Test that loading an ProPresenter file works correctly
> + Test that loading a ProPresenter file works correctly
> """
> self.file_import([os.path.join(TEST_PATH, 'Amazing Grace.pro4')],
> self.load_external_result_data(os.path.join(TEST_PATH, 'Amazing Grace.json')))
>
> === modified file 'tests/helpers/songfileimport.py'
> --- tests/helpers/songfileimport.py 2014-06-25 15:03:00 +0000
> +++ tests/helpers/songfileimport.py 2014-07-03 22:09:52 +0000
> @@ -31,10 +31,13 @@
> song files from third party applications.
> """
> import json
> +import logging
> from unittest import TestCase
>
> from tests.functional import patch, MagicMock, call
>
> +log = logging.getLogger(__name__)
> +
>
> class SongImportTestHelper(TestCase):
> """
> @@ -107,9 +110,21 @@
> topics = self._get_data(result_data, 'topics')
> verse_order_list = self._get_data(result_data, 'verse_order_list')
>
> - # THEN: do_import should return none, the song data should be as expected, and finish should have been
> - # called.
> + # THEN: do_import should return none, the song data should be as expected, and finish should have been called.
> self.assertIsNone(importer.do_import(), 'do_import should return None when it has completed')
> +
> + # Debug information - will be displayed when the test fails
> + log.debug("Title imported: %s" % importer.title)
> + log.debug("Verses imported: %s" % self.mocked_add_verse.mock_calls)
> + log.debug("Verse order imported: %s" % importer.verse_order_list)
> + log.debug("Authors imported: %s" % self.mocked_add_author.mock_calls)
> + log.debug("CCLI No. imported: %s" % importer.ccli_number)
> + log.debug("Comments imported: %s" % importer.comments)
> + log.debug("Songbook imported: %s" % importer.song_book_name)
> + log.debug("Song number imported: %s" % importer.song_number)
> + log.debug("Song copyright imported: %s" % importer.song_number)
> + log.debug("Topics imported: %s" % importer.topics)
> +
> self.assertEqual(importer.title, title, 'title for %s should be "%s"' % (source_file_name, title))
> for author in author_calls:
> self.mocked_add_author.assert_any_call(author)
>
> === added directory 'tests/resources/powerpraisesongs'
> === added file 'tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json'
> --- tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json 1970-01-01 00:00:00 +0000
> +++ tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.json 2014-07-03 22:09:52 +0000
> @@ -0,0 +1,18 @@
> +{
> + "title": "Näher, mein Gott, zu Dir",
> + "verse_order_list": ["v1", "v2", "v3"],
> + "verses": [
> + [
> + "Näher, mein Gott, zu Dir,\nsei meine Bitt'!\nNäher, o Herr, zu Dir\nmit jedem Schritt.\nNur an dem Herzen Dein\nkann ich geborgen sein;\ndeshalb die Bitte mein:\nNäher zu Dir!",
> + "v1"
> + ],
> + [
> + "Näher, mein Gott, zu Dir!\nEin jeder Tag\nsoll es neu zeigen mir,\nwas er vermag:\nWie seiner Gnade Macht,\nErlösung hat gebracht,\nin uns're Sündennacht.\nNäher zu Dir!",
> + "v2"
> + ],
> + [
> + "Näher, mein Gott, zu Dir!\nDich bet' ich an.\nWie vieles hast an mir,\nDu doch getan!\nVon Banden frei und los,\nruh' ich in Deinem Schoss.\nJa, Deine Gnad' ist gross!\nNäher zu Dir!",
> + "v3"
> + ]
> + ]
> +}
> \ No newline at end of file
>
> === added file 'tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.ppl'
> --- tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.ppl 1970-01-01 00:00:00 +0000
> +++ tests/resources/powerpraisesongs/Näher, mein Gott zu Dir.ppl 2014-07-03 22:09:52 +0000
> @@ -0,0 +1,2 @@
> +<?xml version="1.0" encoding="ISO-8859-1"?>
> +<ppl version="3.0"><general><title>N�her, mein Gott, zu Dir</title><category>Anbetung</category><language>Deutsch</language></general><songtext><part caption="Teil 1"><slide mainsize="42" backgroundnr="0"><line>N�her, mein Gott, zu Dir,</line><line>sei meine Bitt'!</line><line>N�her, o Herr, zu Dir</line><line>mit jedem Schritt.</line></slide><slide mainsize="44" backgroundnr="0"><line>Nur an dem Herzen Dein</line><line>kann ich geborgen sein;</line><line>deshalb die Bitte mein:</line><line>N�her zu Dir!</line></slide></part><part caption="Teil 2"><slide mainsize="42" backgroundnr="0"><line>N�her, mein Gott, zu Dir!</line><line>Ein jeder Tag</line><line>soll es neu zeigen mir,</line><line>was er vermag:</line></slide><slide mainsize="42" backgroundnr="0"><line>Wie seiner Gnade Macht,</line><line>Erl�sung hat gebracht,</line><line>in uns're S�ndennacht.</line><line>N�her zu Dir!</line></slide></part><part caption="Teil 3"><slide mainsize="42" backgroundnr="0"><line>N�her, mein Gott, zu Dir!</line><line>Dich bet' ich an.</line><line>Wie vieles hast an mir,</line><line>Du doch getan!</line></slide><slide mainsize="42" backgroundnr="0"><line>Von Banden frei und los,</line><line>ruh' ich in Deinem Schoss.</line><line>Ja, Deine Gnad' ist gross!</line><line>N�her zu Dir!</line></slide></part></songtext><order><item>Teil 1</item><item>Teil 2</item><item>Teil 3</item></order><information><copyright><position>lastslide</position><text><line>Text und Musik: Lowell Mason, 1792-1872</line></text></copyright><source><position>firstslide</position><text><line>gr�nes Buch 339</line></text></source></information><formatting><font><maintext><name>Times New Roman</name><size>44</size><bold>true</bold><italic>true</italic><color>16777215</color><outline>30</outline><shadow>15</shadow></maintext><translationtext><name>Times New Roman</name><size>20</size><bold>false</bold><italic>false</italic><color>16777215</color><outline>30</outline><shadow>20</shadow></translationtext><copyrighttext><name>Times New Roman</name><size>14</size><bold>false</bold><italic>false</italic><color>16777215</color><outline>30</outline><shadow>20</shadow></copyrighttext><sourcetext><name>Times New Roman</name><size>30</size><bold>false</bold><italic>false</italic><color>16777215</color><outline>30</outline><shadow>20</shadow></sourcetext><outline><enabled>false</enabled><color>0</color></outline><shadow><enabled>true</enabled><color>0</color><direction>125</direction></shadow></font><background><file>Blumen\Blume 3.jpg</file></background><linespacing><main>30</main><translation>20</translation></linespacing><textorientation><horizontal>left</horizontal><vertical>center</vertical><transpos>inline</transpos></textorientation><borders><mainleft>50</mainleft><maintop>40</maintop><mainright>60</mainright><mainbottom>70</mainbottom><copyrightbottom>30</copyrightbottom><sourcetop>20</sourcetop><sourceright>40</sourceright></borders></formatting></ppl>
>
--
https://code.launchpad.net/~sam92/openlp/powerpraise-importer/+merge/225585
Your team OpenLP Core is subscribed to branch lp:openlp.
References