forked from openlp/openlp
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:
parent
e52a80c9c3
commit
f780ea2b1b
@ -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,13 +653,156 @@ 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'],))
|
||||||
bibles_temp = []
|
if bibles:
|
||||||
for bible in bibles:
|
bibles_temp = []
|
||||||
bibles_temp.append({
|
for bible in bibles:
|
||||||
u'id': bible[0],
|
bibles_temp.append({
|
||||||
u'name': bible[1],
|
u'id': bible[0],
|
||||||
u'abbreviation': bible[2],
|
u'name': bible[1],
|
||||||
u'language_id': bible[3],
|
u'abbreviation': bible[2],
|
||||||
u'download_source_id': bible[4]
|
u'language_id': bible[3],
|
||||||
})
|
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
|
||||||
|
@ -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.
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user