filled tables language, testament_reference, webbibles, download_source in bibles_resources.sqlite with data and extend tables book_reference and chapters

add method reload_spelling() in manager.py
add class SpellingDB and extend class BiblesResourcesDB
This commit is contained in:
Armin Köhler 2011-03-13 20:45:46 +01:00
parent e52a80c9c3
commit f780ea2b1b
3 changed files with 205 additions and 15 deletions

View File

@ -69,6 +69,12 @@ class Verse(BaseModel):
""" """
pass pass
class Spelling(BaseModel):
"""
Spelling model
"""
pass
def init_schema(url): def init_schema(url):
""" """
@ -123,6 +129,29 @@ def init_schema(url):
metadata.create_all(checkfirst=True) metadata.create_all(checkfirst=True)
return session return session
def init_schema_spelling_extension(url):
"""
Setup a spelling database connection and initialise the database schema.
``url``
The database to setup.
"""
session, metadata = init_db(url)
spelling_table = Table(u'spelling', metadata,
Column(u'id', types.Integer, primary_key=True),
Column(u'book_reference_id', types.Integer),
Column(u'language_id', types.Integer),
Column(u'name', types.Unicode(50), index=True),
)
try:
class_mapper(Spelling)
except UnmappedClassError:
mapper(Spelling, spelling_table)
metadata.create_all(checkfirst=True)
return session
class BibleDB(QtCore.QObject, Manager): class BibleDB(QtCore.QObject, Manager):
""" """
@ -592,7 +621,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager):
@staticmethod @staticmethod
def get_download_source(source): def get_download_source(source):
""" """
Return a download_source by source. Return a download_source_id by source.
``name`` ``name``
The name or abbreviation of the book. The name or abbreviation of the book.
@ -600,8 +629,6 @@ class BiblesResourcesDB(QtCore.QObject, Manager):
if not isinstance(source, unicode): if not isinstance(source, unicode):
source = unicode(source) source = unicode(source)
source = source.title() source = source.title()
#source = source.lower()
log.debug(u'Test: %s' % source)
dl_source = BiblesResourcesDB.run_sql(u'SELECT id, source FROM ' dl_source = BiblesResourcesDB.run_sql(u'SELECT id, source FROM '
u'download_source WHERE source = ?', (source.lower(),)) u'download_source WHERE source = ?', (source.lower(),))
if dl_source: if dl_source:
@ -615,7 +642,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager):
@staticmethod @staticmethod
def get_webbibles(source): def get_webbibles(source):
""" """
Return the chapter details for a specific chapter of a book. Return the bibles a webbible provide for download.
``name`` ``name``
The name of the webbible. The name of the webbible.
@ -626,6 +653,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager):
bibles = BiblesResourcesDB.run_sql(u'SELECT id, name, abbreviation, ' bibles = BiblesResourcesDB.run_sql(u'SELECT id, name, abbreviation, '
u'language_id, download_source_id FROM webbibles WHERE ' u'language_id, download_source_id FROM webbibles WHERE '
u'download_source_id = ?', (source[u'id'],)) u'download_source_id = ?', (source[u'id'],))
if bibles:
bibles_temp = [] bibles_temp = []
for bible in bibles: for bible in bibles:
bibles_temp.append({ bibles_temp.append({
@ -636,3 +664,145 @@ class BiblesResourcesDB(QtCore.QObject, Manager):
u'download_source_id': bible[4] u'download_source_id': bible[4]
}) })
return bibles_temp return bibles_temp
else:
return None
@staticmethod
def get_spelling(name, language_id=None):
"""
Return a book_reference_id if the name matches.
"""
if language_id:
id = BiblesResourcesDB.run_sql(u'SELECT book_reference_id '
u'FROM spelling WHERE name = ? and language_id = ? ORDER BY id',
(name, language_id))
else:
id = BiblesResourcesDB.run_sql(u'SELECT book_reference_id '
u'FROM spelling WHERE name = ? ORDER BY id', (name, ))
if id:
return int(id[0][0])
else:
return None
@staticmethod
def get_language(name):
"""
Return a dict containing the language id, name and code by name or
abbreviation.
``name``
The name or abbreviation of the language.
"""
if not isinstance(name, unicode):
name = unicode(name)
name = name.title()
language = BiblesResourcesDB.run_sql(u'SELECT id, name, code FROM '
u'language WHERE name = ? OR code = ?', (name, name.lower()))
if language:
return {
u'id': language[0][0],
u'name': unicode(language[0][1]),
u'code': unicode(language[0][2])
}
else:
return None
@staticmethod
def get_testament_reference():
"""
Return a list of all testaments and their id of the Bible.
"""
testaments = BiblesResourcesDB.run_sql(u'SELECT id, name FROM '
u'testament_reference ORDER BY id')
testament_list = []
for testament in testaments:
testament_list.append({
u'id': testament[0],
u'name': unicode(testament[1])
})
return testament_list
class SpellingDB(QtCore.QObject, Manager):
"""
This class represents a database-bound spelling.
"""
def __init__(self, parent, **kwargs):
"""
The constructor loads up the database and creates and initialises the
tables if the database doesn't exist.
**Required keyword arguments:**
``path``
The path to the bible database file.
``name``
The name of the database. This is also used as the file name for
SQLite databases.
"""
log.info(u'SpellingDB loaded')
QtCore.QObject.__init__(self)
self.bible_plugin = parent
if u'path' not in kwargs:
raise KeyError(u'Missing keyword argument "path".')
self.stop_import_flag = False
self.name = u'spelling_extension.sqlite'
if not isinstance(self.name, unicode):
self.name = unicode(self.name, u'utf-8')
self.file = self.name
Manager.__init__(self, u'bibles/resources',
init_schema_spelling_extension, self.file)
self.wizard = None
QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'openlp_stop_wizard'), self.stop_import)
def stop_import(self):
"""
Stops the import of the Bible.
"""
log.debug(u'Stopping import')
self.stop_import_flag = True
def get_book_reference_id(self, name, language=None):
"""
Return the book_reference_id of a name.
``name``
The name to search the id.
``language``
The language for which should be searched
"""
log.debug(u'SpellingDB.get_book_reference_id("%s")', name)
if language:
id = self.session.query(Spelling.book_reference_id)\
.filter(Spelling.name.like(name))\
.filter(Spelling.language_id.like(language)).first()
else:
id = self.get_object_filtered(Spelling.book_reference_id,
Spelling.name.like(name))
if not id:
return None
else:
return id
def create_spelling(self, name, book_reference_id, language_id):
"""
Add a spelling to the database.
``name``
The name of the spelling.
``book_reference_id``
The book_reference_id of the book.
``language_id``
The language which the spelling of the book name is.
"""
log.debug(u'create_spelling %s, book_reference_id:%s, language_id:%s',
name, book_reference_id, language_id)
spelling = Spelling.populate(name=name,
book_reference_id=book_reference_id, language_id=language_id)
self.save_object(spelling)
return spelling

View File

@ -31,7 +31,8 @@ from PyQt4 import QtCore
from openlp.core.lib import Receiver, SettingsManager, translate from openlp.core.lib import Receiver, SettingsManager, translate
from openlp.core.utils import AppLocation from openlp.core.utils import AppLocation
from openlp.plugins.bibles.lib import parse_reference from openlp.plugins.bibles.lib import parse_reference
from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta, SpellingDB, \
Spelling, BiblesResourcesDB
from csvbible import CSVBible from csvbible import CSVBible
from http import HTTPBible from http import HTTPBible
@ -129,6 +130,7 @@ class BibleManager(object):
self.suffix = u'.sqlite' self.suffix = u'.sqlite'
self.import_wizard = None self.import_wizard = None
self.reload_bibles() self.reload_bibles()
self.reload_spelling()
self.media = None self.media = None
def reload_bibles(self): def reload_bibles(self):
@ -162,6 +164,24 @@ class BibleManager(object):
self.db_cache[name] = web_bible self.db_cache[name] = web_bible
log.debug(u'Bibles reloaded') log.debug(u'Bibles reloaded')
def reload_spelling(self):
"""
Reloads the Spelling from the Spelling table and spelling_extension
database on disk.
"""
log.debug(u'Reload spelling')
self.spelling_cache = {}
self.spelling_cache[u'spelling'] = SpellingDB(self.parent,
path=self.path)
#db_spelling = self.spelling_cache[u'spelling'].get_book_reference_id(u'Markus', 40)
#db_spelling = BiblesResourcesDB.get_spelling(u'1.Mose', 30)
#db_spelling = BiblesResourcesDB.get_language(u'de')
#db_spelling = BiblesResourcesDB.get_books()
#db_spelling = BiblesResourcesDB.get_testament_reference()
#db_spelling = self.spelling_cache[u'spelling'] .create_spelling(u'Johannes', 43, 40)
#log.debug(u'Spellings: %s' % db_spelling)
log.debug(u'Spelling reloaded')
def set_process_dialog(self, wizard): def set_process_dialog(self, wizard):
""" """
Sets the reference to the dialog with the progress bar on it. Sets the reference to the dialog with the progress bar on it.