diff --git a/openlp/plugins/biblemanager/BibleManager.py b/openlp/plugins/biblemanager/BibleManager.py index 2c5a367ee..f78403699 100644 --- a/openlp/plugins/biblemanager/BibleManager.py +++ b/openlp/plugins/biblemanager/BibleManager.py @@ -25,6 +25,7 @@ from openlp.utils import ConfigHelper from openlp.plugins.biblemanager.BibleDBImpl import BibleDBImpl from openlp.plugins.biblemanager.BibleHTTPImpl import BibleHTTPImpl from openlp.plugins.biblemanager.BibleCSVImpl import BibleCSVImpl +from openlp.plugins.biblemanager.BibleOSISImpl import BibleOSISImpl from openlp.plugins.plugin import Plugin import logging @@ -115,7 +116,7 @@ class BibleManager(Plugin): nbible.saveMeta("proxypass", proxypass) # store the proxy password - def registerFileBible(self, biblename, booksfile, versefile, filetype): + def registerCVSFileBible(self, biblename, booksfile, versefile): """ Method to load a bible from a set of files into a database. If the database exists it is deleted and the database is reloaded @@ -126,8 +127,20 @@ class BibleManager(Plugin): nbible.createTables() # Create Database self.bibleDBCache[biblename] = nbible # cache the database for use later bcsv = BibleCSVImpl(nbible) # create the loader and pass in the database - if filetype == "csv": - bcsv.loadData(booksfile, versefile) + bcsv.loadData(booksfile, versefile) + + def registerOSISFileBible(self, biblename, osisfile): + """ + Method to load a bible from a osis xml file extracted from Sword bible viewer. + If the database exists it is deleted and the database is reloaded + from scratch. + """ + if self._isNewBible(biblename): + nbible = BibleDBImpl(biblename) # Create new Bible + nbible.createTables() # Create Database + self.bibleDBCache[biblename] = nbible # cache the database for use later + bcsv = BibleOSISImpl(nbible) # create the loader and pass in the database + bcsv.loadData(osisfile) def loadBible(self,biblename): diff --git a/openlp/plugins/biblemanager/BibleOSISImpl.py b/openlp/plugins/biblemanager/BibleOSISImpl.py new file mode 100644 index 000000000..08961028e --- /dev/null +++ b/openlp/plugins/biblemanager/BibleOSISImpl.py @@ -0,0 +1,92 @@ +""" +OpenLP - Open Source Lyrics Projection +Copyright (c) 2008 Raoul Snyman +Portions copyright (c) 2008 Martin Thompson, Tim Bentley + +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 +""" +import os, os.path +import sys +import urllib2 + +mypath=os.path.split(os.path.abspath(__file__))[0] +sys.path.insert(0,(os.path.join(mypath, '..', '..', '..'))) +from openlp.plugins.biblemanager.BibleDBImpl import BibleDBImpl + +import logging +logging.basicConfig(level=logging.DEBUG, + format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', + datefmt='%m-%d %H:%M', + filename='plugins.log', + filemode='w') + +class BibleOSISImpl(): + global log + log=logging.getLogger("BibleOSISImpl") + log.info("BibleOSISImpl loaded") + def __init__(self, bibledb): + self.bibledb = bibledb + + def loadData(self, osisfile): + self.bibledb.saveMeta("version", "Bible Version") + self.bibledb.saveMeta("Copyright", "(c) Some Bible company") + self.bibledb.saveMeta("Permission", "You Have Some") + + osis=open(osisfile, 'r') + + book_ptr = "" + id = 0 + verseText = "", s) + ref = f[s+15:e-1] # Book Reference + #lets find the bble text + s = e + 1 # find start of text + e = f.find("", s) # end of text + t = f[s:e] + #print s, e, f[s:e] # Found Basic Text + #remove tags of extra information + + s = t.find("") + while s > -1: + e = t.find("", s) + if e == -1: # TODO + #print "Y", s, e + s = -1 + else: + t = t[:s] + t[e + 4: ] + s = t.find("") + + s = t.find("") + while s > -1: + e = t.find("", s) + t = t[:s] + t[e + 4: ] + #print "X", s, e, t + s = t.find("") + + p = ref.split(".", 3) # split u[ the reference + if book_ptr != p[0]: + book_ptr = p[0] + print p + self.bibledb.createBook(int(p[1]), p[0], p[0]) + id = self.bibledb.getBibleBookId(p[0]) + self.bibledb.addVerse(id[0], p[1], p[2], t) + + + + + + diff --git a/openlp/plugins/biblemanager/test/test_bibleManagerAPI.py b/openlp/plugins/biblemanager/test/test_bibleManagerAPI.py index 2f895917a..38373b29c 100644 --- a/openlp/plugins/biblemanager/test/test_bibleManagerAPI.py +++ b/openlp/plugins/biblemanager/test/test_bibleManagerAPI.py @@ -60,7 +60,7 @@ class TestBibleManager: def testGetBibleBooks(self): log.debug( "\n.......testGetBibleBooks") - c = self.bm.getBibleBooks("NIV") + c = self.bm.getBibleBooks("asv") for c1 in c: log.debug( c1) assert(c1 in c) @@ -84,8 +84,8 @@ class TestBibleManager: #log.debug( c ) c = self.bm.getVerseText('asv','Genesis',10,1,20) log.debug( c ) - c = self.bm.getVerseText('nasb','Genesis',10,1,20) + c = self.bm.getVerseText('asv','Genesis',10,1,20) log.debug( c ) - c = self.bm.getVerseText('nkj','Revelation',10,1,20) + c = self.bm.getVerseText('asv','Revelation',10,1,20) log.debug( c ) diff --git a/openlp/plugins/biblemanager/test/test_bibleManagerCSV.py b/openlp/plugins/biblemanager/test/test_bibleManagerCSV.py index 9285bdd5c..320a8c7a4 100644 --- a/openlp/plugins/biblemanager/test/test_bibleManagerCSV.py +++ b/openlp/plugins/biblemanager/test/test_bibleManagerCSV.py @@ -53,8 +53,8 @@ class TestBibleManager: def testRegisterCSVBibleFiles(self): # Register a bible from files log.debug("\n.......testRegisterBibleFiles") - self.bm.registerFileBible("TheMessage",'biblebooks_msg_short.csv','bibleverses_msg_short.csv', "csv") - self.bm.registerFileBible("NIV",'biblebooks_niv_short.csv','bibleverses_niv_short.csv', "csv") + self.bm.registerCSVFileBible("TheMessage",'biblebooks_msg_short.csv','bibleverses_msg_short.csv') + self.bm.registerCSVFileBible("NIV",'biblebooks_niv_short.csv','bibleverses_niv_short.csv') b = self.bm.getBibles() for b1 in b: log.debug( b1) diff --git a/openlp/plugins/biblemanager/test/test_bibleManagerOSIS.py b/openlp/plugins/biblemanager/test/test_bibleManagerOSIS.py new file mode 100644 index 000000000..9eac85bb6 --- /dev/null +++ b/openlp/plugins/biblemanager/test/test_bibleManagerOSIS.py @@ -0,0 +1,60 @@ +""" +OpenLP - Open Source Lyrics Projection +Copyright (c) 2008 Raoul Snyman +Portions copyright (c) 2008 Martin Thompson, Tim Bentley + +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 +""" + +import random +import unittest + +import os, os.path +import sys +mypath=os.path.split(os.path.abspath(__file__))[0] +sys.path.insert(0,(os.path.join(mypath, '..', '..','..','..'))) + +from openlp.plugins.biblemanager.BibleManager import BibleManager +from openlp.utils import ConfigHelper + +import logging +logging.basicConfig(level=logging.DEBUG, + format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', + datefmt='%m-%d %H:%M', + filename='plugins.log', + filemode='w') + +console=logging.StreamHandler() +# set a format which is simpler for console use +formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') +# tell the handler to use this format +console.setFormatter(formatter) +logging.getLogger('').addHandler(console) +log=logging.getLogger('') + +logging.info("\nLogging started") + +class TestBibleManager: + log=logging.getLogger("testBibleMgr") + def setup_class(self): + log.debug("\n.......Register BM") + self.bm = BibleManager() + + def testRegisterOSISBibleFiles(self): + # Register a bible from files + log.debug("\n.......testRegisterOSISBibleFiles") + self.bm.registerOSISFileBible("asv",'asv.osis') + b = self.bm.getBibles() + for b1 in b: + log.debug( b1) + assert(b1 in b)