← Back to team overview

openlp-core team mailing list archive

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