Still missing tests for your new module. Guess its up to superfly if he's happy 
with that.

Also, just a few inline comments

Diff comments:

> 
> === added file 'openlp/plugins/songs/reporting.py'
> --- openlp/plugins/songs/reporting.py 1970-01-01 00:00:00 +0000
> +++ openlp/plugins/songs/reporting.py 2016-09-20 18:07:02 +0000
> @@ -0,0 +1,99 @@
> +# -*- coding: utf-8 -*-
> +# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 
> softtabstop=4
> +
> +###############################################################################
> +# OpenLP - Open Source Lyrics Projection                                     
>  #
> +# 
> --------------------------------------------------------------------------- #
> +# Copyright (c) 2008-2016 OpenLP Developers                                  
>  #
> +# 
> --------------------------------------------------------------------------- #
> +# 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:`db` module provides the ability to provide a csv file of all songs
> +"""
> +import csv
> +import logging
> +
> +from PyQt5 import QtWidgets
> +
> +from openlp.core.common import Registry, translate
> +from openlp.core.lib.ui import critical_error_message_box
> +from openlp.plugins.songs.lib.db import Song
> +
> +
> +log = logging.getLogger(__name__)
> +
> +
> +def report_song_list():
> +    """
> +    Export the song list as a CSV file.
> +    :return: Nothing
> +    """
> +    main_window = Registry().get('main_window')
> +    plugin = Registry().get('songs').plugin
> +    report_file_name, filter_used = QtWidgets.QFileDialog.getSaveFileName(
> +        main_window, translate('SongPlugin.ReportSongList', 'Output File 
> Location'))
> +    if not report_file_name:
> +        main_window.error_message(
> +            translate('SongPlugin.ReportSongList', 'Output Path Not 
> Selected'),
> +            translate('SongPlugin.ReportSongList', 'You have not set a valid 
> output location for your '
> +                                                   'report. \nPlease select 
> an existing path '
> +                                                   'on your computer.')
> +        )
> +        return
> +    if not report_file_name.endswith('csv'):
> +        report_file_name += '.csv'
> +    file_handle = None
> +    try:
> +        file_handle = open(report_file_name, 'wt')
> +        fieldnames = ('Title', 'Alternative Title', 'Copyright', 
> 'Author(s)', 'Song Book', 'Topic')
> +        writer = csv.DictWriter(file_handle, fieldnames=fieldnames, 
> quoting=csv.QUOTE_ALL)
> +        headers = dict((n, n) for n in fieldnames)
> +        writer.writerow(headers)
> +        song_list = plugin.manager.get_all_objects(Song)
> +        for song in song_list:
> +            author_list = []
> +            for author_song in song.authors_songs:
> +                author_list.append(author_song.author.display_name)
> +            author_string = '{name}'.format(name=' | '.join(author_list))

couldn't this just be:
author_string = ' | '.join(author_list)

> +            book_list = []
> +            for book_song in song.songbook_entries:
> +                if hasattr(book_song, 'entry') and book_song.entry:
> +                    book_list.append('{name} 
> #{entry}'.format(name=book_song.songbook.name, entry=book_song.entry))
> +            book_string = '{name}'.format(name=' | '.join(book_list))

and:
book_string = ' | '.join(book_list)

> +            topic_list = []
> +            for topic_song in song.topics:
> +                if hasattr(topic_song, 'name'):
> +                    topic_list.append(topic_song.name)
> +            topic_string = '{name}'.format(name=' | '.join(topic_list))

and:
topic_string = ' | '.join(topic_list)

> +            writer.writerow({'Title': song.title,
> +                             'Alternative Title': song.alternate_title,
> +                             'Copyright': song.copyright,
> +                             'Author(s)': author_string,
> +                             'Song Book': book_string,
> +                             'Topic': topic_string})
> +        main_window.information_message(
> +            translate('SongPlugin.ReportSongList', 'Report Creation'),
> +            translate('SongPlugin.ReportSongList',
> +                      'Report \n{name} \nhas been successfully created. 
> ').format(name=report_file_name)
> +        )
> +    except OSError as ose:
> +        log.exception('Failed to write out song usage records')
> +        critical_error_message_box(translate('SongPlugin.ReportSongList', 
> 'Song Extraction Failed'),
> +                                   translate('SongPlugin.ReportSongList',
> +                                             'An error occurred while 
> extracting: {error}'
> +                                             ).format(error=ose.strerror))
> +    finally:
> +        if file_handle:
> +            file_handle.close()


-- 
https://code.launchpad.net/~trb143/openlp/reporting/+merge/306259
Your team OpenLP Core is subscribed to branch lp:openlp.

_______________________________________________
Mailing list: https://launchpad.net/~openlp-core
Post to     : openlp-core@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openlp-core
More help   : https://help.launchpad.net/ListHelp

Reply via email to