2009-07-14 19:44:15 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
2009-07-13 20:08:43 +00:00
|
|
|
|
2009-09-08 19:58:05 +00:00
|
|
|
###############################################################################
|
|
|
|
# OpenLP - Open Source Lyrics Projection #
|
|
|
|
# --------------------------------------------------------------------------- #
|
|
|
|
# Copyright (c) 2008-2009 Raoul Snyman #
|
|
|
|
# Portions copyright (c) 2008-2009 Martin Thompson, Tim Bentley, Carsten #
|
|
|
|
# Tinggaard, Jon Tibble, Jonathan Corwin, Maikel Stuivenberg, Scott Guerrieri #
|
|
|
|
# --------------------------------------------------------------------------- #
|
|
|
|
# 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 #
|
|
|
|
###############################################################################
|
2009-07-13 20:08:43 +00:00
|
|
|
|
2009-02-02 19:54:38 +00:00
|
|
|
import os
|
2008-10-30 20:44:54 +00:00
|
|
|
import logging
|
|
|
|
|
2009-01-20 19:50:37 +00:00
|
|
|
from common import BibleCommon
|
2009-07-14 19:44:15 +00:00
|
|
|
from openlp.plugins.bibles.lib.models import *
|
2008-12-07 20:04:07 +00:00
|
|
|
|
2008-11-09 20:11:31 +00:00
|
|
|
class BibleDBImpl(BibleCommon):
|
2009-05-01 22:26:43 +00:00
|
|
|
global log
|
2009-09-06 13:57:32 +00:00
|
|
|
log = logging.getLogger(u'BibleDBImpl')
|
2009-03-16 17:33:51 +00:00
|
|
|
log.info(u'BibleDBimpl loaded')
|
2009-05-01 22:26:43 +00:00
|
|
|
|
2009-07-14 19:44:15 +00:00
|
|
|
def __init__(self, biblepath, biblename, config):
|
2009-01-20 19:50:37 +00:00
|
|
|
# Connect to database
|
|
|
|
self.config = config
|
2009-07-14 19:44:15 +00:00
|
|
|
self.biblefile = os.path.join(biblepath, biblename + u'.sqlite')
|
2009-06-16 18:21:24 +00:00
|
|
|
log.debug(u'Load bible %s on path %s', biblename, self.biblefile)
|
2009-06-04 19:00:41 +00:00
|
|
|
db_type = self.config.get_config(u'db type', u'sqlite')
|
2009-07-14 19:44:15 +00:00
|
|
|
db_url = u''
|
2009-09-21 23:11:50 +00:00
|
|
|
if db_type == u'sqlite':
|
2009-07-14 19:44:15 +00:00
|
|
|
db_url = u'sqlite:///' + self.biblefile
|
2008-11-03 20:42:36 +00:00
|
|
|
else:
|
2009-07-14 19:44:15 +00:00
|
|
|
db_url = u'%s://%s:%s@%s/%s' % \
|
2009-03-16 17:33:51 +00:00
|
|
|
(db_type, self.config.get_config(u'db username'),
|
|
|
|
self.config.get_config(u'db password'),
|
|
|
|
self.config.get_config(u'db hostname'),
|
|
|
|
self.config.get_config(u'db database'))
|
2009-07-14 19:44:15 +00:00
|
|
|
self.metadata, self.session = init_models(db_url)
|
|
|
|
self.metadata.create_all(checkfirst=True)
|
2009-05-01 22:26:43 +00:00
|
|
|
|
2008-12-16 21:48:17 +00:00
|
|
|
def create_tables(self):
|
2009-05-01 22:26:43 +00:00
|
|
|
log.debug( u'createTables')
|
2009-03-16 17:33:51 +00:00
|
|
|
self.save_meta(u'dbversion', u'2')
|
2009-06-16 18:21:24 +00:00
|
|
|
self._load_testament(u'Old Testament')
|
|
|
|
self._load_testament(u'New Testament')
|
|
|
|
self._load_testament(u'Apocrypha')
|
2009-05-01 22:26:43 +00:00
|
|
|
|
2009-09-21 17:56:36 +00:00
|
|
|
def add_verse(self, bookid, chap, vse, text):
|
2009-06-16 18:21:24 +00:00
|
|
|
#log.debug(u'add_verse %s,%s,%s", bookid, chap, vse)
|
2009-01-20 19:50:37 +00:00
|
|
|
verse = Verse()
|
|
|
|
verse.book_id = bookid
|
|
|
|
verse.chapter = chap
|
|
|
|
verse.verse = vse
|
|
|
|
verse.text = text
|
2009-07-14 19:44:15 +00:00
|
|
|
self.session.add(verse)
|
|
|
|
self.session.commit()
|
2008-10-30 20:44:54 +00:00
|
|
|
|
2008-12-16 19:13:31 +00:00
|
|
|
def create_chapter(self, bookid, chap, textlist):
|
2009-06-16 18:21:24 +00:00
|
|
|
log.debug(u'create_chapter %s,%s', bookid, chap)
|
2009-02-23 20:56:54 +00:00
|
|
|
#text list has book and chapter as first to elements of the array
|
2009-07-14 19:44:15 +00:00
|
|
|
for verse_number, verse_text in textlist.iteritems():
|
2009-01-20 19:50:37 +00:00
|
|
|
verse = Verse()
|
|
|
|
verse.book_id = bookid
|
|
|
|
verse.chapter = chap
|
2009-07-14 19:44:15 +00:00
|
|
|
verse.verse = verse_number
|
|
|
|
verse.text = verse_text
|
|
|
|
self.session.add(verse)
|
|
|
|
self.session.commit()
|
2009-05-01 22:26:43 +00:00
|
|
|
|
2009-07-14 19:44:15 +00:00
|
|
|
def create_book(self, bookname, bookabbrev, testament=1):
|
2009-06-16 18:21:24 +00:00
|
|
|
log.debug(u'create_book %s,%s', bookname, bookabbrev)
|
2009-01-20 19:50:37 +00:00
|
|
|
book = Book()
|
2009-02-02 19:54:38 +00:00
|
|
|
book.testament_id = testament
|
2009-01-20 19:50:37 +00:00
|
|
|
book.name = bookname
|
|
|
|
book.abbreviation = bookabbrev
|
2009-07-14 19:44:15 +00:00
|
|
|
self.session.add(book)
|
|
|
|
self.session.commit()
|
2009-01-24 19:58:30 +00:00
|
|
|
return book
|
2009-05-01 22:26:43 +00:00
|
|
|
|
2008-12-16 17:29:39 +00:00
|
|
|
def save_meta(self, key, value):
|
2009-06-16 18:21:24 +00:00
|
|
|
log.debug(u'save_meta %s/%s', key, value)
|
2009-07-13 20:08:43 +00:00
|
|
|
bmeta = BibleMeta()
|
2009-01-20 19:50:37 +00:00
|
|
|
bmeta.key = key
|
|
|
|
bmeta.value = value
|
2009-07-14 19:44:15 +00:00
|
|
|
self.session.add(bmeta)
|
|
|
|
self.session.commit()
|
2008-10-30 20:44:54 +00:00
|
|
|
|
2009-01-20 19:50:37 +00:00
|
|
|
def get_meta(self, metakey):
|
2009-06-16 18:21:24 +00:00
|
|
|
log.debug(u'get meta %s', metakey)
|
2009-07-13 20:08:43 +00:00
|
|
|
return self.session.query(BibleMeta).filter_by(key=metakey).first()
|
2008-11-01 11:33:02 +00:00
|
|
|
|
2009-01-20 19:50:37 +00:00
|
|
|
def delete_meta(self, metakey):
|
|
|
|
biblemeta = self.get_meta(metakey)
|
|
|
|
try:
|
2009-07-14 19:44:15 +00:00
|
|
|
self.session.delete(biblemeta)
|
|
|
|
self.session.commit()
|
2009-01-20 19:50:37 +00:00
|
|
|
return True
|
|
|
|
except:
|
|
|
|
return False
|
2008-11-06 18:49:36 +00:00
|
|
|
|
2009-01-24 08:06:36 +00:00
|
|
|
def _load_testament(self, testament):
|
2009-09-21 17:56:36 +00:00
|
|
|
log.debug(u'load_testaments %s', testament)
|
2009-01-20 19:50:37 +00:00
|
|
|
test = ONTestament()
|
2009-01-24 08:06:36 +00:00
|
|
|
test.name = testament
|
2009-07-14 19:44:15 +00:00
|
|
|
self.session.add(test)
|
|
|
|
self.session.commit()
|
2009-05-01 22:26:43 +00:00
|
|
|
|
2008-12-16 17:29:39 +00:00
|
|
|
def get_bible_books(self):
|
2009-07-13 20:08:43 +00:00
|
|
|
log.debug(u'get_bible_books')
|
2009-05-01 22:26:43 +00:00
|
|
|
return self.session.query(Book).order_by(Book.id).all()
|
|
|
|
|
2008-12-16 17:29:39 +00:00
|
|
|
def get_max_bible_book_verses(self, bookname, chapter):
|
2009-07-13 20:08:43 +00:00
|
|
|
log.debug(u'get_max_bible_book_verses %s, %s', bookname, chapter)
|
2009-09-06 13:57:32 +00:00
|
|
|
verse = self.session.query(Verse).join(Book).filter(
|
|
|
|
Book.name == bookname).filter(
|
|
|
|
Verse.chapter == chapter).order_by(Verse.verse.desc()).first()
|
2009-07-13 20:08:43 +00:00
|
|
|
return verse.verse
|
2009-05-01 22:26:43 +00:00
|
|
|
|
2008-12-16 17:29:39 +00:00
|
|
|
def get_max_bible_book_chapter(self, bookname):
|
2009-07-13 20:08:43 +00:00
|
|
|
log.debug(u'get_max_bible_book_chapter %s', bookname)
|
2009-09-06 13:57:32 +00:00
|
|
|
verse = self.session.query(Verse).join(Book).filter(
|
|
|
|
Book.name == bookname).order_by(Verse.chapter.desc()).first()
|
2009-07-13 20:08:43 +00:00
|
|
|
return verse.chapter
|
2008-11-24 19:41:29 +00:00
|
|
|
|
2008-12-16 19:13:31 +00:00
|
|
|
def get_bible_book(self, bookname):
|
2009-06-16 18:21:24 +00:00
|
|
|
log.debug(u'get_bible_book %s', bookname)
|
2009-09-06 13:57:32 +00:00
|
|
|
bk = self.session.query(Book).filter(
|
|
|
|
Book.name.like(bookname + u'%')).first()
|
2009-02-23 19:46:24 +00:00
|
|
|
if bk == None:
|
2009-09-06 13:57:32 +00:00
|
|
|
bk = self.session.query(Book).filter(
|
|
|
|
Book.abbreviation.like(bookname + u'%')).first()
|
2009-02-23 19:46:24 +00:00
|
|
|
return bk
|
2009-05-01 22:26:43 +00:00
|
|
|
|
2009-01-24 08:06:36 +00:00
|
|
|
def get_bible_chapter(self, id, chapter):
|
2009-07-13 20:08:43 +00:00
|
|
|
log.debug(u'get_bible_chapter %s, %s', id, chapter)
|
2009-09-06 13:57:32 +00:00
|
|
|
return self.session.query(Verse).filter_by(chapter=chapter).filter_by(
|
|
|
|
book_id=id).first()
|
2009-05-01 22:26:43 +00:00
|
|
|
|
2008-12-16 19:13:31 +00:00
|
|
|
def get_bible_text(self, bookname, chapter, sverse, everse):
|
2009-09-06 13:57:32 +00:00
|
|
|
log.debug(u'get_bible_text %s, %s, %s, %s', bookname, chapter, sverse,
|
|
|
|
everse)
|
|
|
|
verses = self.session.query(Verse).join(Book).filter(
|
|
|
|
Book.name == bookname).filter(Verse.chapter == chapter).filter(
|
|
|
|
Verse.verse>=sverse).filter(Verse.verse<=everse).order_by(
|
|
|
|
Verse.verse).all()
|
2009-07-13 20:08:43 +00:00
|
|
|
return verses
|
2009-05-01 22:26:43 +00:00
|
|
|
|
2009-07-14 19:44:15 +00:00
|
|
|
def get_verses_from_text(self, versetext):
|
2009-06-16 18:21:24 +00:00
|
|
|
log.debug(u'get_verses_from_text %s',versetext)
|
2009-07-14 19:44:15 +00:00
|
|
|
versetext = u'%%%s%%' % versetext
|
2009-09-06 13:57:32 +00:00
|
|
|
verses = self.session.query(Verse).filter(
|
|
|
|
Verse.text.like(versetext)).all()
|
2009-07-14 19:44:15 +00:00
|
|
|
return verses
|
2009-05-01 22:26:43 +00:00
|
|
|
|
2008-12-16 19:13:31 +00:00
|
|
|
def dump_bible(self):
|
2009-03-16 17:33:51 +00:00
|
|
|
log.debug( u'.........Dumping Bible Database')
|
2009-05-01 22:26:43 +00:00
|
|
|
log.debug( '...............................Books ')
|
2009-07-14 19:44:15 +00:00
|
|
|
books = self.session.query(Book).all()
|
|
|
|
log.debug(books)
|
2009-03-16 17:33:51 +00:00
|
|
|
log.debug( u'...............................Verses ')
|
2009-07-14 19:44:15 +00:00
|
|
|
verses = self.session.query(Verse).all()
|
|
|
|
log.debug(verses)
|