From bc368d3a91b1612e4cb28c295322d549d6159201 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 12 Jul 2009 21:27:48 +0200 Subject: [PATCH 1/2] Some minor fixes. --- openlp/plugins/bibles/lib/bibleHTTPimpl.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openlp/plugins/bibles/lib/bibleHTTPimpl.py b/openlp/plugins/bibles/lib/bibleHTTPimpl.py index db055ccef..4369506ac 100644 --- a/openlp/plugins/bibles/lib/bibleHTTPimpl.py +++ b/openlp/plugins/bibles/lib/bibleHTTPimpl.py @@ -97,7 +97,7 @@ class CWExtract(BibleCommon): """ log.debug(u'get_bible_chapter %s,%s,%s,%s', version, bookid, bookname, chapter) bookname = bookname.replace(u' ', '') - urlstring = u'http://bible.crosswalk.com/OnlineStudyBible/bible.cgi?word='+bookname+u'+'+unicode(chapter)+u'&version='+version + urlstring = u'http://bible.crosswalk.com/OnlineStudyBible/bible.cgi?word=%s+%d&version=%s' % (bookname, chapter, version) xml_string = self._get_web_text(urlstring, self.proxyurl) #log.debug(u'Return data %s', xml_string) ## Strip Book Title from Heading to return it to system @@ -206,7 +206,7 @@ class BibleHTTPImpl(): ev = CWExtract(self.proxyurl) else: ev = BGExtract(self.proxyurl) - return ev.get_bible_chapter(self.bibleid, bookid, bookname, chapter) - except: - log.error(u'Error thrown = %s', sys.exc_info()[1]) + except Exception, e: + log.error(u'Error thrown = %s', e.args[0]) + print e From 37384f570cdf52d5497a0add2b10236a265154c3 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Tue, 14 Jul 2009 21:44:15 +0200 Subject: [PATCH 2/2] - Created a consolidated "models.py" file. - Updated BibleDBImpl with the changes. --- openlp/plugins/bibles/lib/bibleDBimpl.py | 104 ++++++++++----------- openlp/plugins/bibles/lib/classes.py | 67 -------------- openlp/plugins/bibles/lib/models.py | 111 +++++++++++++++++++++++ openlp/plugins/bibles/lib/tables.py | 52 ----------- 4 files changed, 159 insertions(+), 175 deletions(-) delete mode 100644 openlp/plugins/bibles/lib/classes.py create mode 100644 openlp/plugins/bibles/lib/models.py delete mode 100644 openlp/plugins/bibles/lib/tables.py diff --git a/openlp/plugins/bibles/lib/bibleDBimpl.py b/openlp/plugins/bibles/lib/bibleDBimpl.py index 62096ff89..cfe05254a 100644 --- a/openlp/plugins/bibles/lib/bibleDBimpl.py +++ b/openlp/plugins/bibles/lib/bibleDBimpl.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 """ OpenLP - Open Source Lyrics Projection @@ -18,43 +20,34 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ import os -import os.path import logging -from sqlalchemy import * -from sqlalchemy.sql import select, func -from sqlalchemy.orm import sessionmaker, mapper, scoped_session - from common import BibleCommon from openlp.core.utils import ConfigHelper -from openlp.plugins.bibles.lib.tables import * -from openlp.plugins.bibles.lib.classes import * +from openlp.plugins.bibles.lib.models import * class BibleDBImpl(BibleCommon): global log log=logging.getLogger(u'BibleDBImpl') log.info(u'BibleDBimpl loaded') - def __init__(self, biblepath , biblename, config): + def __init__(self, biblepath, biblename, config): # Connect to database self.config = config - self.biblefile = os.path.join(biblepath, biblename+u'.sqlite') + self.biblefile = os.path.join(biblepath, biblename + u'.sqlite') log.debug(u'Load bible %s on path %s', biblename, self.biblefile) db_type = self.config.get_config(u'db type', u'sqlite') + db_url = u'' if db_type == u'sqlite': - self.db = create_engine(u'sqlite:///' + self.biblefile) + db_url = u'sqlite:///' + self.biblefile else: - self.db_url = u'%s://%s:%s@%s/%s' % \ + db_url = u'%s://%s:%s@%s/%s' % \ (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')) - self.db.echo = False - metadata.bind = self.db - metadata.bind.echo = False - self.session = scoped_session(sessionmaker(autoflush=True, autocommit=False)) - self.session.configure(bind=self.db) - metadata.create_all(self.db) + self.metadata, self.session = init_models(db_url) + self.metadata.create_all(checkfirst=True) def create_tables(self): log.debug( u'createTables') @@ -65,52 +58,48 @@ class BibleDBImpl(BibleCommon): def add_verse(self, bookid, chap, vse, text): #log.debug(u'add_verse %s,%s,%s", bookid, chap, vse) - metadata.bind.echo = False - session = self.session() + #metadata.bind.echo = False verse = Verse() verse.book_id = bookid verse.chapter = chap verse.verse = vse verse.text = text - session.add(verse) - session.commit() + self.session.add(verse) + self.session.commit() def create_chapter(self, bookid, chap, textlist): log.debug(u'create_chapter %s,%s', bookid, chap) #log.debug(u'Text %s ", textlist) - metadata.bind.echo = False - session = self.session() + #metadata.bind.echo = False #text list has book and chapter as first to elements of the array - for v , t in textlist.iteritems(): + for verse_number, verse_text in textlist.iteritems(): verse = Verse() verse.book_id = bookid verse.chapter = chap - verse.verse = v - verse.text = t - session.add(verse) - session.commit() + verse.verse = verse_number + verse.text = verse_text + self.session.add(verse) + self.session.commit() - def create_book(self, bookname, bookabbrev, testament = 1): + def create_book(self, bookname, bookabbrev, testament=1): log.debug(u'create_book %s,%s', bookname, bookabbrev) - metadata.bind.echo = False - session = self.session + #metadata.bind.echo = False book = Book() book.testament_id = testament book.name = bookname book.abbreviation = bookabbrev - session.add(book) - session.commit() + self.session.add(book) + self.session.commit() return book def save_meta(self, key, value): log.debug(u'save_meta %s/%s', key, value) - metadata.bind.echo = False - session = self.session + #metadata.bind.echo = False bmeta = BibleMeta() bmeta.key = key bmeta.value = value - session.add(bmeta) - session.commit() + self.session.add(bmeta) + self.session.commit() def get_meta(self, metakey): log.debug(u'get meta %s', metakey) @@ -119,20 +108,19 @@ class BibleDBImpl(BibleCommon): def delete_meta(self, metakey): biblemeta = self.get_meta(metakey) try: - session.delete(biblemeta) - session.commit() + self.session.delete(biblemeta) + self.session.commit() return True except: return False def _load_testament(self, testament): log.debug(u'load_testaments %s', testament) - metadata.bind.echo = False - session = self.session + #metadata.bind.echo = False test = ONTestament() test.name = testament - session.add(test) - session.commit() + self.session.add(test) + self.session.commit() def get_bible_books(self): log.debug(u'get_bible_books') @@ -140,7 +128,7 @@ class BibleDBImpl(BibleCommon): def get_max_bible_book_verses(self, bookname, chapter): log.debug(u'get_max_bible_book_verses %s, %s', bookname, chapter) - metadata.bind.echo = False + #metadata.bind.echo = False #s = text (u'select max(verse.verse) from verse,book where chapter = :c and book_id = book.id and book.name = :b ') #return self.db.execute(s, c=chapter, b=bookname).fetchone() verse = self.session.query(Verse).join(Book).filter(Book.name==bookname).filter(Verse.chapter==chapter).order_by(Verse.verse.desc()).first() @@ -148,7 +136,7 @@ class BibleDBImpl(BibleCommon): def get_max_bible_book_chapter(self, bookname): log.debug(u'get_max_bible_book_chapter %s', bookname) - metadata.bind.echo = False + #metadata.bind.echo = False #s = text (u'select max(verse.chapter) from verse,book where book_id = book.id and book.name = :b') #return self.db.execute(s, b=bookname).fetchone() verse = self.session.query(Verse).join(Book).filter(Book.name==bookname).order_by(Verse.chapter.desc()).first() @@ -163,30 +151,34 @@ class BibleDBImpl(BibleCommon): def get_bible_chapter(self, id, chapter): log.debug(u'get_bible_chapter %s, %s', id, chapter) - metadata.bind.echo = False + #metadata.bind.echo = False return self.session.query(Verse).filter_by(chapter=chapter).filter_by(book_id=id).first() def get_bible_text(self, bookname, chapter, sverse, everse): log.debug(u'get_bible_text %s, %s, %s, %s', bookname, chapter, sverse, everse) - metadata.bind.echo = False + #metadata.bind.echo = False #bookname = bookname + u"%" #s = text (u'select name,chapter,verse.verse, verse.text FROM verse , book where verse.book_id == book.id AND verse.chapter == :c AND (verse.verse between :v1 and :v2) and (book.name like :b)') #return self.db.execute(s, c=chapter, v1=sverse , v2=everse, b=bookname).fetchall() 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() return verses - def get_verses_from_text(self,versetext): + def get_verses_from_text(self, versetext): log.debug(u'get_verses_from_text %s',versetext) - metadata.bind.echo = False - versetext = "%"+versetext+"%" - s = text (u'select book.name, verse.chapter, verse.verse, verse.text FROM verse , book where verse.book_id == book.id and verse.text like :t') - return self.db.execute(s, t=versetext).fetchall() + #metadata.bind.echo = False + versetext = u'%%%s%%' % versetext + #s = text (u'select book.name, verse.chapter, verse.verse, verse.text FROM verse , book where verse.book_id == book.id and verse.text like :t') + #return self.db.execute(s, t=versetext).fetchall() + verses = self.session.query(Verse).filter(Verse.text.like(versetext)).all() + return verses def dump_bible(self): log.debug( u'.........Dumping Bible Database') log.debug( '...............................Books ') - s = text (u'select * FROM book ') - log.debug( self.db.execute(s).fetchall()) + #s = text (u'select * FROM book ') + books = self.session.query(Book).all() + log.debug(books) log.debug( u'...............................Verses ') - s = text (u'select * FROM verse ') - log.debug( self.db.execute(s).fetchall()) + #s = text (u'select * FROM verse ') + verses = self.session.query(Verse).all() + log.debug(verses) diff --git a/openlp/plugins/bibles/lib/classes.py b/openlp/plugins/bibles/lib/classes.py deleted file mode 100644 index ab6f4e9ee..000000000 --- a/openlp/plugins/bibles/lib/classes.py +++ /dev/null @@ -1,67 +0,0 @@ -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 -""" -OpenLP - Open Source Lyrics Projection -Copyright (c) 2008 Raoul Snyman -Portions copyright (c) 2008 - 2009 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 -""" -from sqlalchemy.orm import mapper, relation -from openlp.plugins.bibles.lib.tables import * - -class BaseModel(object): - """ - BaseModel provides a base object with a set of generic functions - """ - - @classmethod - def populate(cls, **kwargs): - """ - Creates an instance of a class and populates it, returning the instance - """ - me = cls() - keys = kwargs.keys() - for key in keys: - me.__setattr__(key, kwargs[key]) - return me - -class BibleMeta(BaseModel): - """ - Bible Meta Data - """ - pass - -class ONTestament(BaseModel): - """ - Bible Testaments - """ - pass - -class Book(BaseModel): - """ - Song model - """ - pass - -class Verse(BaseModel): - """ - Topic model - """ - pass - -mapper(BibleMeta, meta_table) -mapper(ONTestament, testament_table, - properties={'books': relation(Book, backref='testament')}) -mapper(Book, book_table, - properties={'verses': relation(Verse, backref='book')}) -mapper(Verse, verse_table) diff --git a/openlp/plugins/bibles/lib/models.py b/openlp/plugins/bibles/lib/models.py new file mode 100644 index 000000000..ebe481cf7 --- /dev/null +++ b/openlp/plugins/bibles/lib/models.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 +""" +OpenLP - Open Source Lyrics Projection + +Copyright (c) 2008 Raoul Snyman + +Portions copyright (c) 2008 - 2009 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 string + +from sqlalchemy import Column, Table, MetaData, ForeignKey, types, \ + create_engine +from sqlalchemy.orm import mapper, relation, sessionmaker, scoped_session + +class BaseModel(object): + """ + BaseModel provides a base object with a set of generic functions + """ + @classmethod + def populate(cls, **kwargs): + """ + Creates an instance of a class and populates it, returning the instance + """ + me = cls() + keys = kwargs.keys() + for key in keys: + me.__setattr__(key, kwargs[key]) + return me + + +class BibleMeta(BaseModel): + """ + Bible Meta Data + """ + pass + + +class ONTestament(BaseModel): + """ + Bible Testaments + """ + pass + + +class Book(BaseModel): + """ + Song model + """ + pass + + +class Verse(BaseModel): + """ + Topic model + """ + pass + + +def init_models(db_url): + engine = create_engine(db_url) + metadata.bind = engine + session = scoped_session(sessionmaker(autoflush=True, + autocommit=False, + bind=engine)) + # Don't think this is needed... + #metadata.bind.echo = False + #Define the tables and indexes + return metadata, session + + +metadata = MetaData() +meta_table = Table(u'metadata', metadata, + Column(u'key', types.Unicode(255), primary_key=True, index=True), + Column(u'value', types.Unicode(255)), +) +testament_table = Table(u'testament', metadata, + Column(u'id', types.Integer, primary_key=True), + Column(u'name', types.Unicode(50)), +) +book_table = Table(u'book', metadata, + Column(u'id', types.Integer, primary_key=True), + Column(u'testament_id', types.Integer, ForeignKey(u'testament.id')), + Column(u'name', types.Unicode(50), index=True), + Column(u'abbreviation', types.Unicode(5), index=True), +) +verse_table = Table(u'verse', metadata, + Column(u'id', types.Integer, primary_key=True, index=True), + Column(u'book_id', types.Integer, ForeignKey(u'book.id'), index=True), + Column(u'chapter', types.Integer, index=True), + Column(u'verse', types.Integer, index=True), + Column(u'text', types.UnicodeText, index=True), +) +mapper(BibleMeta, meta_table) +mapper(ONTestament, testament_table, + properties={'books': relation(Book, backref='testament')}) +mapper(Book, book_table, + properties={'verses': relation(Verse, backref='book')}) +mapper(Verse, verse_table) diff --git a/openlp/plugins/bibles/lib/tables.py b/openlp/plugins/bibles/lib/tables.py deleted file mode 100644 index 2ddd85d5e..000000000 --- a/openlp/plugins/bibles/lib/tables.py +++ /dev/null @@ -1,52 +0,0 @@ -# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 -""" -OpenLP - Open Source Lyrics Projection -Copyright (c) 2008 Raoul Snyman -Portions copyright (c) 2008 - 2009 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 string -from sqlalchemy import * -from sqlalchemy import Column, Table, MetaData, ForeignKey, schema - -metadata = MetaData() -#Define the tables and indexes -meta_table = Table(u'metadata', metadata, - Column(u'key', String(255), primary_key=True), - Column(u'value', String(255)), -) - -testament_table = Table(u'testament', metadata, - Column(u'id', Integer, primary_key=True), - Column(u'name', String(50)), -) - -book_table = Table(u'book', metadata, - Column(u'id', Integer, primary_key=True), - Column(u'testament_id', Integer, schema.ForeignKey(u'testament.id')), - Column(u'name', String(50)), - Column(u'abbreviation', String(5)), -) -Index(u'idx_name', book_table.c.name, book_table.c.id) -Index(u'idx_abbrev', book_table.c.abbreviation, book_table.c.id) - -verse_table = Table(u'verse', metadata, - Column(u'id', Integer, primary_key=True), - Column(u'book_id', Integer , schema.ForeignKey(u'book.id')), - Column(u'chapter', Integer), - Column(u'verse', Integer), - Column(u'text', Text), -) -Index(u'idx_chapter_verse_book', verse_table.c.chapter, verse_table.c.verse, verse_table.c.book_id, verse_table.c.id) -Index(u'idx_chapter_verse_text', verse_table.c.text, verse_table.c.verse, verse_table.c.book_id, verse_table.c.id)