A few fixes after renaming some functions.

This commit is contained in:
Raoul Snyman 2010-01-17 18:48:45 +02:00
parent a523d127bd
commit a976d6b59a
6 changed files with 68 additions and 50 deletions

View File

@ -106,7 +106,7 @@ class CSVBible(BibleDB):
self.wizard.incrementProgressBar( self.wizard.incrementProgressBar(
u'Importing %s %s' % book.name) u'Importing %s %s' % book.name)
self.commit() self.commit()
self.add_verse(book.id, p[1], p[2], p3) self.create_verse(book.id, p[1], p[2], p3)
Receiver.send_message(u'process_events') Receiver.send_message(u'process_events')
self.commit() self.commit()
except: except:
@ -119,4 +119,5 @@ class CSVBible(BibleDB):
self.wizard.incrementProgressBar(u'Import canceled!') self.wizard.incrementProgressBar(u'Import canceled!')
return False return False
else: else:
return success return success

View File

@ -25,6 +25,7 @@
import os import os
import logging import logging
import chardet
from sqlalchemy import or_ from sqlalchemy import or_
from PyQt4 import QtCore from PyQt4 import QtCore
@ -84,13 +85,14 @@ class BibleDB():
self.metadata, self.session = init_models(db_url) self.metadata, self.session = init_models(db_url)
self.metadata.create_all(checkfirst=True) self.metadata.create_all(checkfirst=True)
def register(self): def register(self, wizard):
""" """
This method basically just initialialises the database. It is called This method basically just initialialises the database. It is called
from the Bible Manager when a Bible is imported. Descendant classes from the Bible Manager when a Bible is imported. Descendant classes
may want to override this method to supply their own custom may want to override this method to supply their own custom
initialisation as well. initialisation as well.
""" """
self.wizard = wizard
self.create_tables() self.create_tables()
return self.name return self.name
@ -100,7 +102,7 @@ class BibleDB():
def create_tables(self): def create_tables(self):
log.debug(u'createTables') log.debug(u'createTables')
self.save_meta(u'dbversion', u'2') self.create_meta(u'dbversion', u'2')
self.create_testament(u'Old Testament') self.create_testament(u'Old Testament')
self.create_testament(u'New Testament') self.create_testament(u'New Testament')
self.create_testament(u'Apocrypha') self.create_testament(u'Apocrypha')
@ -111,7 +113,7 @@ class BibleDB():
self.commit() self.commit()
def create_book(self, name, abbrev, testament=1): def create_book(self, name, abbrev, testament=1):
log.debug(u'create_book %s,%s', bookname, bookabbrev) log.debug(u'create_book %s,%s', name, abbrev)
book = Book.populate(name=name, abbreviation=abbrev, book = Book.populate(name=name, abbreviation=abbrev,
testament_id=testament) testament_id=testament)
self.session.add(book) self.session.add(book)
@ -132,6 +134,9 @@ class BibleDB():
self.commit() self.commit()
def create_verse(self, book_id, chapter, verse, text): def create_verse(self, book_id, chapter, verse, text):
if not isinstance(text, unicode):
details = chardet.detect(text)
text = unicode(text, details[u'encoding'])
verse = Verse.populate( verse = Verse.populate(
book_id=book_id, book_id=book_id,
chapter=chapter, chapter=chapter,

View File

@ -232,4 +232,5 @@ class HTTPBible(BibleDB):
ev = BGExtract(self.proxyurl) ev = BGExtract(self.proxyurl)
return ev.get_bible_chapter(self.bibleid, book, chapter) return ev.get_bible_chapter(self.bibleid, book, chapter)
except: except:
log.exception("Failed to get bible chapter") log.exception("Failed to get bible chapter")

View File

@ -61,13 +61,13 @@ class BibleFormat(object):
Return the appropriate imeplementation class. Return the appropriate imeplementation class.
""" """
if id == BibleFormat.OSIS: if id == BibleFormat.OSIS:
return BibleOSISImpl return OSISBible
elif id == BibleFormat.CSV: elif id == BibleFormat.CSV:
return BibleCSVImpl return CSVBible
elif id == BibleFormat.OpenSong: elif id == BibleFormat.OpenSong:
return BibleOpenSongImpl return OpenSongBible
elif id == BibleFormat.WebDownload: elif id == BibleFormat.WebDownload:
return BibleHTTPImpl return HTTPBible
else: else:
return None return None
@ -161,10 +161,13 @@ class BibleManager(object):
try: try:
fbibles = open(filepath, u'r') fbibles = open(filepath, u'r')
for line in fbibles: for line in fbibles:
p = line.split(u',') parts = line.split(u',')
self.book_abbreviations[p[0]] = p[1].replace(u'\n', '') self.book_abbreviations[parts[0]] = parts[1].replace(u'\n', '')
self.book_testaments[p[0]] = p[2].replace(u'\n', '') self.book_testaments[parts[0]] = parts[2].replace(u'\n', '')
self.book_chapters.append({u'book':p[0], u'total':p[3].replace(u'\n', '')}) self.book_chapters.append({
u'book': parts[0],
u'total': parts[3].replace(u'\n', '')
})
except: except:
log.exception(u'Failed to load bible') log.exception(u'Failed to load bible')
finally: finally:
@ -192,10 +195,10 @@ class BibleManager(object):
Keyword arguments to send to the actualy importer class. Keyword arguments to send to the actualy importer class.
""" """
class_ = BibleFormat.get_class(type) class_ = BibleFormat.get_class(type)
kwargs[u'path'] = self.path kwargs['path'] = self.path
kwargs[u'config'] = self.config kwargs['config'] = self.config
importer = class_(**kwargs) importer = class_(**kwargs)
name = importer.register() name = importer.register(self.import_wizard)
self.db_cache[name] = importer self.db_cache[name] = importer
return importer.do_import() return importer.do_import()
@ -231,7 +234,7 @@ class BibleManager(object):
nbible = BibleDBImpl(self.bible_path, biblename, self.config) nbible = BibleDBImpl(self.bible_path, biblename, self.config)
# Create Database # Create Database
nbible.create_tables() nbible.create_tables()
self.bible_db_cache[biblename] = nbible self.db_cache[biblename] = nbible
nhttp = BibleHTTPImpl() nhttp = BibleHTTPImpl()
nhttp.set_bible_source(biblesource) nhttp.set_bible_source(biblesource)
self.bible_http_cache[biblename] = nhttp self.bible_http_cache[biblename] = nhttp
@ -366,16 +369,16 @@ class BibleManager(object):
log.debug(u'get_book_verse_count %s,%s,%s', bible, book, chapter) log.debug(u'get_book_verse_count %s,%s,%s', bible, book, chapter)
web, bible = self.is_bible_web(bible) web, bible = self.is_bible_web(bible)
if web: if web:
count = self.bible_db_cache[bible].get_max_bible_book_verses( count = self.db_cache[bible].get_max_bible_book_verses(
book, chapter) book, chapter)
if count == 0: if count == 0:
# Make sure the first chapter has been downloaded # Make sure the first chapter has been downloaded
self.get_verse_text(bible, book, chapter, chapter, 1, 1) self.get_verse_text(bible, book, chapter, chapter, 1, 1)
count = self.bible_db_cache[bible].get_max_bible_book_verses( count = self.db_cache[bible].get_max_bible_book_verses(
book, chapter) book, chapter)
return count return count
else: else:
return self.bible_db_cache[bible].get_max_bible_book_verses( return self.db_cache[bible].get_max_bible_book_verses(
book, chapter) book, chapter)
def get_verses(self, bible, versetext): def get_verses(self, bible, versetext):
@ -386,7 +389,7 @@ class BibleManager(object):
log.debug(u'get_verses_from_text %s,%s', bible, versetext) log.debug(u'get_verses_from_text %s,%s', bible, versetext)
reflist = parse_reference(versetext) reflist = parse_reference(versetext)
web, bible = self.is_bible_web(bible) web, bible = self.is_bible_web(bible)
return self.bible_db_cache[bible].get_verses(reflist) return self.db_cache[bible].get_verses(reflist)
def save_meta_data(self, bible, version, copyright, permissions): def save_meta_data(self, bible, version, copyright, permissions):
""" """
@ -394,9 +397,9 @@ class BibleManager(object):
""" """
log.debug(u'save_meta data %s,%s, %s,%s', log.debug(u'save_meta data %s,%s, %s,%s',
bible, version, copyright, permissions) bible, version, copyright, permissions)
self.bible_db_cache[bible].save_meta(u'Version', version) self.db_cache[bible].create_meta(u'Version', version)
self.bible_db_cache[bible].save_meta(u'Copyright', copyright) self.db_cache[bible].create_meta(u'Copyright', copyright)
self.bible_db_cache[bible].save_meta(u'Permissions', permissions) self.db_cache[bible].create_meta(u'Permissions', permissions)
def get_meta_data(self, bible, key): def get_meta_data(self, bible, key):
""" """
@ -404,7 +407,7 @@ class BibleManager(object):
""" """
log.debug(u'get_meta %s,%s', bible, key) log.debug(u'get_meta %s,%s', bible, key)
web, bible = self.is_bible_web(bible) web, bible = self.is_bible_web(bible)
return self.bible_db_cache[bible].get_meta(key) return self.db_cache[bible].get_meta(key)
def get_verse_text(self, bible, bookname, schapter, echapter, sverse, def get_verse_text(self, bible, bookname, schapter, echapter, sverse,
everse=0): everse=0):
@ -425,8 +428,8 @@ class BibleManager(object):
# check to see if book/chapter exists fow HTTP bibles and load cache # check to see if book/chapter exists fow HTTP bibles and load cache
# if necessary # if necessary
web, bible = self.is_bible_web(bible) web, bible = self.is_bible_web(bible)
if self.bible_http_cache[bible]: if self.http_cache[bible]:
book = self.bible_db_cache[bible].get_bible_book(bookname) book = self.db_cache[bible].get_bible_book(bookname)
if book is None: if book is None:
log.debug(u'get_verse_text : new book') log.debug(u'get_verse_text : new book')
for chapter in range(schapter, echapter + 1): for chapter in range(schapter, echapter + 1):
@ -434,7 +437,7 @@ class BibleManager(object):
unicode(self.media.trUtf8('Downloading %s: %s')) % unicode(self.media.trUtf8('Downloading %s: %s')) %
(bookname, chapter)) (bookname, chapter))
search_results = \ search_results = \
self.bible_http_cache[bible].get_bible_chapter( self.http_cache[bible].get_bible_chapter(
bible, bookname, chapter) bible, bookname, chapter)
if search_results.has_verselist() : if search_results.has_verselist() :
## We have found a book of the bible lets check to see ## We have found a book of the bible lets check to see
@ -443,33 +446,33 @@ class BibleManager(object):
## to request ac and get Acts back. ## to request ac and get Acts back.
bookname = search_results.get_book() bookname = search_results.get_book()
# check to see if book/chapter exists # check to see if book/chapter exists
book = self.bible_db_cache[bible].get_bible_book( book = self.db_cache[bible].get_bible_book(
bookname) bookname)
if book is None: if book is None:
## Then create book, chapter and text ## Then create book, chapter and text
book = self.bible_db_cache[bible].create_book( book = self.db_cache[bible].create_book(
bookname, self.book_abbreviations[bookname], bookname, self.book_abbreviations[bookname],
self.book_testaments[bookname]) self.book_testaments[bookname])
log.debug(u'New http book %s, %s, %s', log.debug(u'New http book %s, %s, %s',
book, book.id, book.name) book, book.id, book.name)
self.bible_db_cache[bible].create_chapter( self.db_cache[bible].create_chapter(
book.id, search_results.get_chapter(), book.id, search_results.get_chapter(),
search_results.get_verselist()) search_results.get_verselist())
else: else:
## Book exists check chapter and texts only. ## Book exists check chapter and texts only.
v = self.bible_db_cache[bible].get_bible_chapter( v = self.db_cache[bible].get_bible_chapter(
book.id, chapter) book.id, chapter)
if v is None: if v is None:
self.media.setQuickMessage( self.media.setQuickMessage(
unicode(self.media.trUtf8('%Downloading %s: %s'))\ unicode(self.media.trUtf8('%Downloading %s: %s'))\
% (bookname, chapter)) % (bookname, chapter))
self.bible_db_cache[bible].create_chapter( self.db_cache[bible].create_chapter(
book.id, chapter, book.id, chapter,
search_results.get_verselist()) search_results.get_verselist())
else: else:
log.debug(u'get_verse_text : old book') log.debug(u'get_verse_text : old book')
for chapter in range(schapter, echapter + 1): for chapter in range(schapter, echapter + 1):
v = self.bible_db_cache[bible].get_bible_chapter( v = self.db_cache[bible].get_bible_chapter(
book.id, chapter) book.id, chapter)
if v is None: if v is None:
try: try:
@ -477,17 +480,17 @@ class BibleManager(object):
unicode(self.media.trUtf8('Downloading %s: %s')) unicode(self.media.trUtf8('Downloading %s: %s'))
% (bookname, chapter)) % (bookname, chapter))
search_results = \ search_results = \
self.bible_http_cache[bible].get_bible_chapter( self.http_cache[bible].get_bible_chapter(
bible, bookname, chapter) bible, bookname, chapter)
if search_results.has_verselist(): if search_results.has_verselist():
self.bible_db_cache[bible].create_chapter( self.db_cache[bible].create_chapter(
book.id, search_results.get_chapter(), book.id, search_results.get_chapter(),
search_results.get_verselist()) search_results.get_verselist())
except: except:
log.exception(u'Problem getting scripture online') log.exception(u'Problem getting scripture online')
#Now get verses from database #Now get verses from database
if schapter == echapter: if schapter == echapter:
text = self.bible_db_cache[bible].get_bible_text(bookname, text = self.db_cache[bible].get_bible_text(bookname,
schapter, sverse, everse) schapter, sverse, everse)
else: else:
for i in range (schapter, echapter + 1): for i in range (schapter, echapter + 1):
@ -501,7 +504,7 @@ class BibleManager(object):
start = 1 start = 1
end = self.get_book_verse_count(bible, bookname, i) end = self.get_book_verse_count(bible, bookname, i)
txt = self.bible_db_cache[bible].get_bible_text( txt = self.db_cache[bible].get_bible_text(
bookname, i, start, end) bookname, i, start, end)
text.extend(txt) text.extend(txt)
return text return text

View File

@ -49,11 +49,11 @@ class OpenSongBible(BibleDB):
""" """
log.debug(__name__) log.debug(__name__)
BibleDB.__init__(self, **kwargs) BibleDB.__init__(self, **kwargs)
if u'filename' not in kwargs: if 'filename' not in kwargs:
raise KeyError(u'You have to supply a file name to import from.') raise KeyError(u'You have to supply a file name to import from.')
self.filename = kwargs[u'filename'] self.filename = kwargs['filename']
QtCore.QObject.connect(Receiver.get_receiver(), #QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'openlpstopimport'), self.stop_import) # QtCore.SIGNAL(u'openlpstopimport'), self.stop_import)
def stop_import(self): def stop_import(self):
""" """
@ -67,10 +67,12 @@ class OpenSongBible(BibleDB):
Loads a Bible from file. Loads a Bible from file.
""" """
log.debug(u'Starting OpenSong import from "%s"' % self.filename) log.debug(u'Starting OpenSong import from "%s"' % self.filename)
self.filename = unicode(self.filename, u'utf-8')
self.wizard.incrementProgressBar(u'Preparing for import...')
detect_file = None detect_file = None
try: try:
detect_file = open(self.filename, u'r') detect_file = open(self.filename, u'r')
details = chardet.detect(detect_file.read(3000)) details = chardet.detect(detect_file.read())
except: except:
log.exception(u'Failed to detect OpenSong file encoding') log.exception(u'Failed to detect OpenSong file encoding')
return False return False
@ -94,11 +96,16 @@ class OpenSongBible(BibleDB):
for verse in chapter.v: for verse in chapter.v:
if self.stop_import: if self.stop_import:
break break
self.add_verse(db_book.id, chapter.attrib[u'n'], self.create_verse(
verse.attrib[u'n'], verse.text) db_book.id,
int(chapter.attrib[u'n']),
int(verse.attrib[u'n']),
verse.text
)
Receiver.send_message(u'process_events') Receiver.send_message(u'process_events')
self.wizard.incrementProgressBar(u'Importing %s %s' % \ self.wizard.incrementProgressBar(
(dbbook.name, str(chapter.attrib[u'n']))) QtCore.QString('Importing %s %s' % \
(db_book.name, chapter.attrib[u'n'])))
self.commit() self.commit()
except: except:
log.exception(u'Loading bible from OpenSong file failed') log.exception(u'Loading bible from OpenSong file failed')

View File

@ -160,7 +160,7 @@ class OSISBible(BibleDB):
.replace(u'</lg>', u'').replace(u'</q>', u'')\ .replace(u'</lg>', u'').replace(u'</q>', u'')\
.replace(u'</div>', u'') .replace(u'</div>', u'')
verse_text = self.spaces_regex.sub(u' ', verse_text) verse_text = self.spaces_regex.sub(u' ', verse_text)
self.add_verse(db_book.id, chapter, verse, verse_text) self.create_verse(db_book.id, chapter, verse, verse_text)
Receiver.send_message(u'process_events') Receiver.send_message(u'process_events')
self.commit() self.commit()
self.wizard.incrementProgressBar(u'Finishing import...') self.wizard.incrementProgressBar(u'Finishing import...')
@ -174,4 +174,5 @@ class OSISBible(BibleDB):
self.wizard.incrementProgressBar(u'Import canceled!') self.wizard.incrementProgressBar(u'Import canceled!')
return False return False
else: else:
return success return success