← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~googol-hush/openlp/songs into lp:openlp

 

Andreas Preikschat has proposed merging lp:~googol-hush/openlp/songs into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~googol-hush/openlp/songs/+merge/54985

Hello,

- import topics from usr files (txt files seem not to support topics)
- clean ups
-- 
https://code.launchpad.net/~googol-hush/openlp/songs/+merge/54985
Your team OpenLP Core is requested to review the proposed merge of lp:~googol-hush/openlp/songs into lp:openlp.
=== modified file 'openlp/plugins/songs/lib/cclifileimport.py'
--- openlp/plugins/songs/lib/cclifileimport.py	2011-03-24 19:04:02 +0000
+++ openlp/plugins/songs/lib/cclifileimport.py	2011-03-26 21:06:34 +0000
@@ -30,15 +30,16 @@
 import codecs
 
 from openlp.core.lib import translate
+from openlp.plugins.songs.lib import VerseType
 from songimport import SongImport
 
 log = logging.getLogger(__name__)
 
 class CCLIFileImport(SongImport):
     """
-    The :class:`CCLIFileImport` class provides OpenLP with the ability to
-    import CCLI SongSelect song files in both .txt and .usr formats.
-    See http://www.ccli.com/ for more details.
+    The :class:`CCLIFileImport` class provides OpenLP with the ability to import
+    CCLI SongSelect song files in both .txt and .usr formats. See
+    `<http://www.ccli.com/>`_ for more details.
     """
 
     def __init__(self, manager, **kwargs):
@@ -55,7 +56,7 @@
 
     def do_import(self):
         """
-        Import either a .usr or a .txt SongSelect file
+        Import either a ``.usr`` or a ``.txt`` SongSelect file.
         """
         log.debug(u'Starting CCLI File Import')
         song_total = len(self.import_source)
@@ -67,6 +68,7 @@
                 (song_count, song_total))
             filename = unicode(filename)
             log.debug(u'Importing CCLI File: %s', filename)
+            self.set_defaults()
             lines = []
             if os.path.isfile(filename):
                 detect_file = open(filename, u'r')
@@ -81,12 +83,10 @@
                 lines = infile.readlines()
                 ext = os.path.splitext(filename)[1]
                 if ext.lower() == u'.usr':
-                    log.info(u'SongSelect .usr format file found %s: ',
-                        filename)
+                    log.info(u'SongSelect .usr format file found: %s', filename)
                     self.do_import_usr_file(lines)
                 elif ext.lower() == u'.txt':
-                    log.info(u'SongSelect .txt format file found %s: ',
-                        filename)
+                    log.info(u'SongSelect .txt format file found: %s', filename)
                     self.do_import_txt_file(lines)
                 else:
                     log.info(u'Extension %s is not valid', filename)
@@ -97,9 +97,8 @@
 
     def do_import_usr_file(self, textList):
         """
-        The :func:`do_import_usr_file` method provides OpenLP
-        with the ability to import CCLI SongSelect songs in
-        *USR* file format
+        The :func:`do_import_usr_file` method provides OpenLP with the ability
+        to import CCLI SongSelect songs in *USR* file format.
 
         ``textList``
             An array of strings containing the usr file content.
@@ -108,35 +107,46 @@
 
         ``[File]``
             USR file format first line
+
         ``Type=``
             Indicates the file type
             e.g. *Type=SongSelect Import File*
+
         ``Version=3.0``
             File format version
+
         ``[S A2672885]``
             Contains the CCLI Song number e.g. *2672885*
+
         ``Title=``
             Contains the song title (e.g. *Title=Above All*)
+
         ``Author=``
             Contains a | delimited list of the song authors
             e.g. *Author=LeBlanc, Lenny | Baloche, Paul*
+
         ``Copyright=``
             Contains a | delimited list of the song copyrights
             e.g. Copyright=1999 Integrity's Hosanna! Music |
             LenSongs Publishing (Verwaltet von Gerth Medien
             Musikverlag)
+
         ``Admin=``
             Contains the song administrator
             e.g. *Admin=Gerth Medien Musikverlag*
+
         ``Themes=``
             Contains a /t delimited list of the song themes
             e.g. *Themes=Cross/tKingship/tMajesty/tRedeemer*
+
         ``Keys=``
             Contains the keys in which the music is played??
             e.g. *Keys=A*
+
         ``Fields=``
             Contains a list of the songs fields in order /t delimited
             e.g. *Fields=Vers 1/tVers 2/tChorus 1/tAndere 1*
+
         ``Words=``
             Contains the songs various lyrics in order as shown by the
             *Fields* description
@@ -144,57 +154,60 @@
 
         """
         log.debug(u'USR file text: %s', textList)
-        self.set_defaults()
+        song_author = u''
+        song_topics = u''
         for line in textList:
             if line.startswith(u'Title='):
-                song_name = line[6:].strip()
+                self.title = line[6:].strip()
             elif line.startswith(u'Author='):
                 song_author = line[7:].strip()
             elif line.startswith(u'Copyright='):
-                song_copyright = line[10:].strip()
+                self.copyright = line[10:].strip()
+            elif line.startswith(u'Themes='):
+                song_topics = line[7:].strip()
             elif line.startswith(u'[S A'):
-                song_ccli = line[4:-3].strip()
+                self.ccli_number = line[4:-3].strip()
             elif line.startswith(u'Fields='):
-            #Fields contain single line indicating verse, chorus, etc,
-            #/t delimited, same as with words field. store seperately
-            #and process at end.
+                # Fields contain single line indicating verse, chorus, etc,
+                # /t delimited, same as with words field. store seperately
+                # and process at end.
                 song_fields = line[7:].strip()
             elif line.startswith(u'Words='):
                 song_words = line[6:].strip()
-            #Unhandled usr keywords:Type,Version,Admin,Themes,Keys
-        #Process Fields and words sections
+            # Unhandled usr keywords: Type, Version, Admin, Keys
+        # Process Fields and words sections.
         check_first_verse_line = False
         field_list = song_fields.split(u'/t')
         words_list = song_words.split(u'/t')
         for counter in range(0, len(field_list)):
             if field_list[counter].startswith(u'Ver'):
-                verse_type = u'V'
+                verse_type = VerseType.Tags[VerseType.Verse]
             elif field_list[counter].startswith(u'Ch'):
-                verse_type = u'C'
+                verse_type = VerseType.Tags[VerseType.Chorus]
             elif field_list[counter].startswith(u'Br'):
-                verse_type = u'B'
-            else: #Other
-                verse_type = u'O'
+                verse_type = VerseType.Tags[VerseType.Bridge]
+            else:
+                verse_type = VerseType.Tags[VerseType.Other]
                 check_first_verse_line = True
             verse_text = unicode(words_list[counter])
             verse_text = verse_text.replace(u'/n', u'\n')
             verse_lines = verse_text.split(u'\n', 1)
             if check_first_verse_line:
                 if verse_lines[0].startswith(u'(PRE-CHORUS'):
-                    verse_type = u'P'
+                    verse_type = VerseType.Tags[VerseType.PreChorus]
                     log.debug(u'USR verse PRE-CHORUS: %s', verse_lines[0])
                     verse_text = verse_lines[1]
                 elif verse_lines[0].startswith(u'(BRIDGE'):
-                    verse_type = u'B'
+                    verse_type = VerseType.Tags[VerseType.Bridge]
                     log.debug(u'USR verse BRIDGE')
                     verse_text = verse_lines[1]
                 elif verse_lines[0].startswith(u'('):
-                    verse_type = u'O'
+                    verse_type = VerseType.Tags[VerseType.Other]
                     verse_text = verse_lines[1]
             if len(verse_text) > 0:
                 self.add_verse(verse_text, verse_type)
             check_first_verse_line = False
-        #Handle multiple authors
+        # Handle multiple authors
         author_list = song_author.split(u'/')
         if len(author_list) < 2:
             author_list = song_author.split(u'|')
@@ -204,16 +217,13 @@
                 self.add_author(u' '.join(reversed(separated)))
             else:
                 self.add_author(author)
-        self.title = song_name
-        self.copyright = song_copyright
-        self.ccli_number = song_ccli
+        self.topics = [topic.strip() for topic in song_topics.split(u'/t')]
         self.finish()
 
     def do_import_txt_file(self, textList):
         """
-        The :func:`do_import_txt_file` method provides OpenLP
-        with the ability to import CCLI SongSelect songs in
-        *TXT* file format
+        The :func:`do_import_txt_file` method provides OpenLP with the ability
+        to import CCLI SongSelect songs in *TXT* file format.
 
         ``textList``
             An array of strings containing the txt file content.
@@ -243,12 +253,10 @@
 
         """
         log.debug(u'TXT file text: %s', textList)
-        self.set_defaults()
         line_number = 0
         check_first_verse_line = False
         verse_text = u''
-        song_comments = u''
-        song_copyright = u''
+        song_author = u''
         verse_start = False
         for line in textList:
             clean_line = line.strip()
@@ -258,12 +266,12 @@
                 elif verse_start:
                     if verse_text:
                         self.add_verse(verse_text, verse_type)
-                        verse_text = ''
+                        verse_text = u''
                         verse_start = False
             else:
                 #line_number=0, song title
                 if line_number == 0:
-                    song_name = clean_line
+                    self.title = clean_line
                     line_number += 1
                 #line_number=1, verses
                 elif line_number == 1:
@@ -271,37 +279,37 @@
                     if clean_line.startswith(u'CCLI'):
                         line_number += 1
                         ccli_parts = clean_line.split(' ')
-                        song_ccli = ccli_parts[len(ccli_parts)-1]
+                        self.ccli_number = ccli_parts[len(ccli_parts) - 1]
                     elif not verse_start:
                         # We have the verse descriptor
-                        verse_desc_parts = clean_line.split(' ')
+                        verse_desc_parts = clean_line.split(u' ')
                         if len(verse_desc_parts) == 2:
                             if verse_desc_parts[0].startswith(u'Ver'):
-                                verse_type = u'V'
+                                verse_type = VerseType.Tags[VerseType.Verse]
                             elif verse_desc_parts[0].startswith(u'Ch'):
-                                verse_type = u'C'
+                                verse_type = VerseType.Tags[VerseType.Chorus]
                             elif verse_desc_parts[0].startswith(u'Br'):
-                                verse_type = u'B'
+                                verse_type = VerseType.Tags[VerseType.Bridge]
                             else:
-                                #we need to analyse the next line for
-                                #verse type, so set flag
-                                verse_type = u'O'
+                                # we need to analyse the next line for
+                                # verse type, so set flag
+                                verse_type = VerseType.Tags[VerseType.Other]
                                 check_first_verse_line = True
                             verse_number = verse_desc_parts[1]
                         else:
-                            verse_type = u'O'
+                            verse_type = VerseType.Tags[VerseType.Other]
                             verse_number = 1
                         verse_start = True
                     else:
-                        #check first line for verse type
+                        # check first line for verse type
                         if check_first_verse_line:
                             if line.startswith(u'(PRE-CHORUS'):
-                                verse_type = u'P'
+                                verse_type = VerseType.Tags[VerseType.PreChorus]
                             elif line.startswith(u'(BRIDGE'):
-                                verse_type = u'B'
+                                verse_type = VerseType.Tags[VerseType.Bridge]
                             # Handle all other misc types
                             elif line.startswith(u'('):
-                                verse_type = u'O'
+                                verse_type = VerseType.Tags[VerseType.Other]
                             else:
                                 verse_text = verse_text + line
                             check_first_verse_line = False
@@ -313,24 +321,19 @@
                     #line_number=2, copyright
                     if line_number == 2:
                         line_number += 1
-                        song_copyright = clean_line
+                        self.copyright = clean_line
                     #n=3, authors
                     elif line_number == 3:
                         line_number += 1
                         song_author = clean_line
                     #line_number=4, comments lines before last line
-                    elif (line_number == 4) and \
-                        (not clean_line.startswith(u'CCL')):
-                        song_comments = song_comments + clean_line
+                    elif line_number == 4 and not clean_line.startswith(u'CCL'):
+                        self.comments += clean_line
         # split on known separators
         author_list = song_author.split(u'/')
         if len(author_list) < 2:
             author_list = song_author.split(u'|')
-        #Clean spaces before and after author names
+        # Clean spaces before and after author names.
         for author_name in author_list:
             self.add_author(author_name.strip())
-        self.title = song_name
-        self.copyright = song_copyright
-        self.ccli_number = song_ccli
-        self.comments = song_comments
         self.finish()


Follow ups