From 776724d9a2a9421594a014a2b7bf5ac034adf7ca Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 9 Mar 2014 10:26:28 +0000 Subject: [PATCH] Bibles --- openlp/plugins/bibles/lib/http.py | 118 ++-- openlp/plugins/bibles/lib/manager.py | 137 ++--- openlp/plugins/bibles/lib/mediaitem.py | 573 +++++++++--------- openlp/plugins/bibles/lib/opensong.py | 15 +- openlp/plugins/bibles/lib/osis.py | 13 +- .../plugins/bibles/lib/versereferencelist.py | 9 +- 6 files changed, 392 insertions(+), 473 deletions(-) diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index 7dc3a372c..5f3692527 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -74,14 +74,9 @@ class BGExtract(object): """ Remove a particular element from the BeautifulSoup tree. - ``parent`` - The element from which items need to be removed. - - ``tag`` - A string of the tab type, e.g. "div" - - ``class_`` - An HTML class attribute for further qualification. + :param parent: The element from which items need to be removed. + :param tag: A string of the tab type, e.g. "div" + :param class_: An HTML class attribute for further qualification. """ if class_: all_tags = parent.find_all(tag, class_) @@ -94,8 +89,7 @@ class BGExtract(object): """ Extract a verse (or part of a verse) from a tag. - ``tag`` - The BeautifulSoup Tag element with the stuff we want. + :param tag: The BeautifulSoup Tag element with the stuff we want. """ if isinstance(tag, NavigableString): return None, str(tag) @@ -122,8 +116,7 @@ class BGExtract(object): """ Remove all the rubbish from the HTML page. - ``tag`` - The base tag within which we want to remove stuff. + :param tag: The base tag within which we want to remove stuff. """ self._remove_elements(tag, 'sup', 'crossreference') self._remove_elements(tag, 'sup', 'footnote') @@ -137,8 +130,7 @@ class BGExtract(object): """ Extract all the verses from a pre-prepared list of HTML tags. - ``tags`` - A list of BeautifulSoup Tag elements. + :param tags: A list of BeautifulSoup Tag elements. """ verses = [] tags = tags[::-1] @@ -184,8 +176,7 @@ class BGExtract(object): Use the old style of parsing for those Bibles on BG who mysteriously have not been migrated to the new (still broken) HTML. - ``div`` - The parent div. + :param div: The parent div. """ verse_list = {} # Cater for inconsistent mark up in the first verse of a chapter. @@ -225,14 +216,9 @@ class BGExtract(object): """ Access and decode Bibles via the BibleGateway website. - ``version`` - The version of the Bible like 31 for New International version. - - ``book_name`` - Name of the Book. - - ``chapter`` - Chapter number. + :param version: The version of the Bible like 31 for New International version. + :param book_name: Name of the Book. + :param chapter: Chapter number. """ log.debug('BGExtract.get_bible_chapter("%s", "%s", "%s")', version, book_name, chapter) url_book_name = urllib.parse.quote(book_name.encode("utf-8")) @@ -259,10 +245,9 @@ class BGExtract(object): def get_books_from_http(self, version): """ - Load a list of all books a Bible contaions from BibleGateway website. + Load a list of all books a Bible contains from BibleGateway website. - ``version`` - The version of the Bible like NIV for New International Version + :param version: The version of the Bible like NIV for New International Version """ log.debug('BGExtract.get_books_from_http("%s")', version) url_params = urllib.parse.urlencode({'action': 'getVersionInfo', 'vid': '%s' % version}) @@ -328,14 +313,9 @@ class BSExtract(object): """ Access and decode bibles via Bibleserver mobile website - ``version`` - The version of the bible like NIV for New International Version - - ``book_name`` - Text name of bible book e.g. Genesis, 1. John, 1John or Offenbarung - - ``chapter`` - Chapter number + :param version: The version of the bible like NIV for New International Version + :param book_name: Text name of bible book e.g. Genesis, 1. John, 1John or Offenbarung + :param chapter: Chapter number """ log.debug('BSExtract.get_bible_chapter("%s", "%s", "%s")', version, book_name, chapter) url_version = urllib.parse.quote(version.encode("utf-8")) @@ -363,12 +343,11 @@ class BSExtract(object): """ Load a list of all books a Bible contains from Bibleserver mobile website. - ``version`` - The version of the Bible like NIV for New International Version + :param version: The version of the Bible like NIV for New International Version """ log.debug('BSExtract.get_books_from_http("%s")', version) url_version = urllib.parse.quote(version.encode("utf-8")) - chapter_url = 'http://m.bibleserver.com/overlay/selectBook?translation=%s' % (url_version) + chapter_url = 'http://m.bibleserver.com/overlay/selectBook?translation=%s' % url_version soup = get_soup_for_bible_ref(chapter_url) if not soup: return None @@ -408,14 +387,9 @@ class CWExtract(object): """ Access and decode bibles via the Crosswalk website - ``version`` - The version of the Bible like niv for New International Version - - ``book_name`` - Text name of in english e.g. 'gen' for Genesis - - ``chapter`` - Chapter number + :param version: The version of the Bible like niv for New International Version + :param book_name: Text name of in english e.g. 'gen' for Genesis + :param chapter: Chapter number """ log.debug('CWExtract.get_bible_chapter("%s", "%s", "%s")', version, book_name, chapter) url_book_name = book_name.replace(' ', '-') @@ -463,11 +437,10 @@ class CWExtract(object): """ Load a list of all books a Bible contain from the Crosswalk website. - ``version`` - The version of the bible like NIV for New International Version + :param version: The version of the bible like NIV for New International Version """ log.debug('CWExtract.get_books_from_http("%s")', version) - chapter_url = 'http://www.biblestudytools.com/%s/' % (version) + chapter_url = 'http://www.biblestudytools.com/%s/' % version soup = get_soup_for_bible_ref(chapter_url) if not soup: return None @@ -533,7 +506,8 @@ class HTTPBible(BibleDB): failure. """ self.wizard.progress_bar.setMaximum(68) - self.wizard.increment_progress_bar(translate('BiblesPlugin.HTTPBible', 'Registering Bible and loading books...')) + self.wizard.increment_progress_bar(translate('BiblesPlugin.HTTPBible', + 'Registering Bible and loading books...')) self.save_meta('download_source', self.download_source) self.save_meta('download_name', self.download_name) if self.proxy_server: @@ -552,8 +526,8 @@ class HTTPBible(BibleDB): handler = BSExtract(self.proxy_server) books = handler.get_books_from_http(self.download_name) if not books: - log.error('Importing books from %s - download name: "%s" '\ - 'failed' % (self.download_source, self.download_name)) + log.error('Importing books from %s - download name: "%s" failed' % + (self.download_source, self.download_name)) return False self.wizard.progress_bar.setMaximum(len(books) + 2) self.wizard.increment_progress_bar(translate( 'BiblesPlugin.HTTPBible', 'Registering Language...')) @@ -573,12 +547,12 @@ class HTTPBible(BibleDB): 'BiblesPlugin.HTTPBible', 'Importing %s...', 'Importing ...') % book) book_ref_id = self.get_book_ref_id_by_name(book, len(books), language_id) if not book_ref_id: - log.error('Importing books from %s - download name: "%s" '\ - 'failed' % (self.download_source, self.download_name)) + log.error('Importing books from %s - download name: "%s" failed' % + (self.download_source, self.download_name)) return False book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) log.debug('Book details: Name:%s; id:%s; testament_id:%s', - book, book_ref_id, book_details['testament_id']) + book, book_ref_id, book_details['testament_id']) self.create_book(book, book_ref_id, book_details['testament_id']) if self.stop_import_flag: return False @@ -612,7 +586,7 @@ class HTTPBible(BibleDB): critical_error_message_box( translate('BiblesPlugin', 'No Book Found'), translate('BiblesPlugin', 'No matching book could be found in this Bible. Check that you have ' - 'spelled the name of the book correctly.')) + 'spelled the name of the book correctly.')) return [] book = db_book.name if BibleDB.get_verse_count(self, book_id, reference[1]) == 0: @@ -658,8 +632,7 @@ class HTTPBible(BibleDB): """ Return the number of chapters in a particular book. - ``book`` - The book object to get the chapter count for. + :param book: The book object to get the chapter count for. """ log.debug('HTTPBible.get_chapter_count("%s")', book.name) return BiblesResourcesDB.get_chapter_count(book.book_reference_id) @@ -668,11 +641,8 @@ class HTTPBible(BibleDB): """ Return the number of verses for the specified chapter and book. - ``book`` - The name of the book. - - ``chapter`` - The chapter whose verses are being counted. + :param book_id: The name of the book. + :param chapter: The chapter whose verses are being counted. """ log.debug('HTTPBible.get_verse_count("%s", %s)', book_id, chapter) return BiblesResourcesDB.get_verse_count(book_id, chapter) @@ -696,18 +666,11 @@ def get_soup_for_bible_ref(reference_url, header=None, pre_parse_regex=None, pre """ Gets a webpage and returns a parsed and optionally cleaned soup or None. - ``reference_url`` - The URL to obtain the soup from. - - ``header`` - An optional HTTP header to pass to the bible web server. - - ``pre_parse_regex`` - A regular expression to run on the webpage. Allows manipulation of the webpage before passing to BeautifulSoup - for parsing. - - ``pre_parse_substitute`` - The text to replace any matches to the regular expression with. + :param reference_url: The URL to obtain the soup from. + :param header: An optional HTTP header to pass to the bible web server. + :param pre_parse_regex: A regular expression to run on the webpage. Allows manipulation of the webpage before + passing to BeautifulSoup for parsing. + :param pre_parse_substitute: The text to replace any matches to the regular expression with. """ if not reference_url: return None @@ -742,9 +705,10 @@ def send_error_message(error_type): critical_error_message_box( translate('BiblesPlugin.HTTPBible', 'Download Error'), translate('BiblesPlugin.HTTPBible', 'There was a problem downloading your verse selection. Please check ' - 'your Internet connection, and if this error continues to occur please consider reporting a bug.')) + 'your Internet connection, and if this error continues to occur please consider reporting a bug' + '.')) elif error_type == 'parse': critical_error_message_box( translate('BiblesPlugin.HTTPBible', 'Parse Error'), translate('BiblesPlugin.HTTPBible', 'There was a problem extracting your verse selection. If this error ' - 'continues to occur please consider reporting a bug.')) + 'continues to occur please consider reporting a bug.')) diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 888677a8d..e589b2eaa 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -40,7 +40,6 @@ from .opensong import OpenSongBible from .osis import OSISBible - log = logging.getLogger(__name__) @@ -57,7 +56,7 @@ class BibleFormat(object): @staticmethod def get_class(format): """ - Return the appropriate imeplementation class. + Return the appropriate implementation class. ``format`` The Bible format. @@ -146,7 +145,7 @@ class BibleManager(object): download_name = self.db_cache[name].get_object(BibleMeta, 'download_name').value meta_proxy = self.db_cache[name].get_object(BibleMeta, 'proxy_server') web_bible = HTTPBible(self.parent, path=self.path, file=filename, download_source=source.value, - download_name=download_name) + download_name=download_name) if meta_proxy: web_bible.proxy_server = meta_proxy.value self.db_cache[name] = web_bible @@ -156,8 +155,7 @@ class BibleManager(object): """ Sets the reference to the dialog with the progress bar on it. - ``dialog`` - The reference to the import wizard. + :param wizard: The reference to the import wizard. """ self.import_wizard = wizard @@ -165,11 +163,8 @@ class BibleManager(object): """ Register a bible in the bible cache, and then import the verses. - ``type`` - What type of Bible, one of the ``BibleFormat`` values. - - ``**kwargs`` - Keyword arguments to send to the actual importer class. + :param type: What type of Bible, one of the ``BibleFormat`` values. + :param kwargs: Keyword arguments to send to the actual importer class. """ class_ = BibleFormat.get_class(type) kwargs['path'] = self.path @@ -182,8 +177,7 @@ class BibleManager(object): """ Delete a bible completely. - ``name`` - The name of the bible. + :param name: The name of the bible. """ log.debug('BibleManager.delete_bible("%s")', name) bible = self.db_cache[name] @@ -202,8 +196,7 @@ class BibleManager(object): """ Returns a list of Bible books, and the number of chapters in that book. - ``bible`` - Unicode. The Bible to get the list of books from. + :param bible: Unicode. The Bible to get the list of books from. """ log.debug('BibleManager.get_books("%s")', bible) return [ @@ -219,11 +212,8 @@ class BibleManager(object): """ Returns a book object by given id. - ``bible`` - Unicode. The Bible to get the list of books from. - - ``id`` - Unicode. The book_reference_id to get the book for. + :param bible: Unicode. The Bible to get the list of books from. + :param id: Unicode. The book_reference_id to get the book for. """ log.debug('BibleManager.get_book_by_id("%s", "%s")', bible, id) return self.db_cache[bible].get_book_by_book_ref_id(id) @@ -232,22 +222,17 @@ class BibleManager(object): """ Returns the number of Chapters for a given book. - ``bible`` - Unicode. The Bible to get the list of books from. - - ``book`` - The book object to get the chapter count for. + :param bible: Unicode. The Bible to get the list of books from. + :param book: The book object to get the chapter count for. """ log.debug('BibleManager.get_book_chapter_count ("%s", "%s")', bible, book.name) return self.db_cache[bible].get_chapter_count(book) def get_verse_count(self, bible, book, chapter): """ - Returns all the number of verses for a given - book and chapterMaxBibleBookVerses. + Returns all the number of verses for a given book and chapterMaxBibleBookVerses. """ - log.debug('BibleManager.get_verse_count("%s", "%s", %s)', - bible, book, chapter) + log.debug('BibleManager.get_verse_count("%s", "%s", %s)', bible, book, chapter) language_selection = self.get_language_selection(bible) book_ref_id = self.db_cache[bible].get_book_ref_id_by_localised_name(book, language_selection) return self.db_cache[bible].get_verse_count(book_ref_id, chapter) @@ -260,16 +245,14 @@ class BibleManager(object): log.debug('BibleManager.get_verse_count_by_book_ref_id("%s", "%s", "%s")', bible, book_ref_id, chapter) return self.db_cache[bible].get_verse_count(book_ref_id, chapter) - def get_verses(self, bible, versetext, book_ref_id=False, show_error=True): + def get_verses(self, bible, verse_text, book_ref_id=False, show_error=True): """ Parses a scripture reference, fetches the verses from the Bible specified, and returns a list of ``Verse`` objects. - ``bible`` - Unicode. The Bible to use. - - ``versetext`` - Unicode. The scripture reference. Valid scripture references are: + :param bible: Unicode. The Bible to use. + :param verse_text: + Unicode. The scripture reference. Valid scripture references are: - Genesis 1 - Genesis 1-2 @@ -279,55 +262,53 @@ class BibleManager(object): - Genesis 1:1-2:10 - Genesis 1:1-10,2:1-10 - ``book_ref_id`` - Unicode. The book referece id from the book in versetext. + :param book_ref_id: Unicode. The book reference id from the book in verse_text. For second bible this is necessary. + :param show_error: """ - log.debug('BibleManager.get_verses("%s", "%s")', bible, versetext) + log.debug('BibleManager.get_verses("%s", "%s")', bible, verse_text) if not bible: if show_error: self.main_window.information_message( translate('BiblesPlugin.BibleManager', 'No Bibles Available'), - translate('BiblesPlugin.BibleManager', - 'There are no Bibles currently installed. Please use the ' - 'Import Wizard to install one or more Bibles.') - ) + translate('BiblesPlugin.BibleManager', 'There are no Bibles currently installed. Please use the ' + 'Import Wizard to install one or more Bibles.') + ) return None language_selection = self.get_language_selection(bible) - reflist = parse_reference(versetext, self.db_cache[bible], - language_selection, book_ref_id) + reflist = parse_reference(verse_text, self.db_cache[bible], language_selection, book_ref_id) if reflist: return self.db_cache[bible].get_verses(reflist, show_error) else: if show_error: - reference_seperators = { + reference_separators = { 'verse': get_reference_separator('sep_v_display'), 'range': get_reference_separator('sep_r_display'), 'list': get_reference_separator('sep_l_display')} self.main_window.information_message( translate('BiblesPlugin.BibleManager', 'Scripture Reference Error'), translate('BiblesPlugin.BibleManager', 'Your scripture reference is either not supported by ' - 'OpenLP or is invalid. Please make sure your reference ' - 'conforms to one of the following patterns or consult the manual:\n\n' - 'Book Chapter\n' - 'Book Chapter%(range)sChapter\n' - 'Book Chapter%(verse)sVerse%(range)sVerse\n' - 'Book Chapter%(verse)sVerse%(range)sVerse%(list)sVerse' - '%(range)sVerse\n' - 'Book Chapter%(verse)sVerse%(range)sVerse%(list)sChapter' - '%(verse)sVerse%(range)sVerse\n' - 'Book Chapter%(verse)sVerse%(range)sChapter%(verse)sVerse', - 'Please pay attention to the appended "s" of the wildcards ' - 'and refrain from translating the words inside the names in the brackets.') % reference_seperators - ) + 'OpenLP or is invalid. Please make sure your reference ' + 'conforms to one of the following patterns or consult the manual:\n\n' + 'Book Chapter\n' + 'Book Chapter%(range)sChapter\n' + 'Book Chapter%(verse)sVerse%(range)sVerse\n' + 'Book Chapter%(verse)sVerse%(range)sVerse%(list)sVerse' + '%(range)sVerse\n' + 'Book Chapter%(verse)sVerse%(range)sVerse%(list)sChapter' + '%(verse)sVerse%(range)sVerse\n' + 'Book Chapter%(verse)sVerse%(range)sChapter%(verse)sVerse', + 'Please pay attention to the appended "s" of the wildcards ' + 'and refrain from translating the words inside the names in the brackets.') + % reference_separators + ) return None def get_language_selection(self, bible): """ Returns the language selection of a bible. - ``bible`` - Unicode. The Bible to get the language selection from. + :param bible: Unicode. The Bible to get the language selection from. """ log.debug('BibleManager.get_language_selection("%s")', bible) language_selection = self.get_meta_data(bible, 'book_name_language') @@ -347,34 +328,29 @@ class BibleManager(object): """ Does a verse search for the given bible and text. - ``bible`` - The bible to search in (unicode). - - ``second_bible`` - The second bible (unicode). We do not search in this bible. - - ``text`` - The text to search for (unicode). + :param bible: The bible to search in (unicode). + :param second_bible: The second bible (unicode). We do not search in this bible. + :param text: The text to search for (unicode). """ log.debug('BibleManager.verse_search("%s", "%s")', bible, text) if not bible: self.main_window.information_message( translate('BiblesPlugin.BibleManager', 'No Bibles Available'), translate('BiblesPlugin.BibleManager', - 'There are no Bibles currently installed. Please use the Import Wizard to install one or more' - ' Bibles.') - ) + 'There are no Bibles currently installed. Please use the Import Wizard to install one or ' + 'more Bibles.') + ) return None # Check if the bible or second_bible is a web bible. - webbible = self.db_cache[bible].get_object(BibleMeta, 'download_source') + web_bible = self.db_cache[bible].get_object(BibleMeta, 'download_source') second_webbible = '' if second_bible: second_webbible = self.db_cache[second_bible].get_object(BibleMeta, 'download_source') - if webbible or second_webbible: + if web_bible or second_webbible: self.main_window.information_message( translate('BiblesPlugin.BibleManager', 'Web Bible cannot be used'), translate('BiblesPlugin.BibleManager', 'Text Search is not available with Web Bibles.') - ) + ) return None if text: return self.db_cache[bible].verse_search(text) @@ -382,23 +358,20 @@ class BibleManager(object): self.main_window.information_message( translate('BiblesPlugin.BibleManager', 'Scripture Reference Error'), translate('BiblesPlugin.BibleManager', 'You did not enter a search keyword.\nYou can separate ' - 'different keywords by a space to search for all of your keywords and you can separate ' - 'them by a comma to search for one of them.') - ) + 'different keywords by a space to search for all of your keywords and you can separate ' + 'them by a comma to search for one of them.') + ) return None - def save_meta_data(self, bible, version, copyright, permissions, - book_name_language=None): + def save_meta_data(self, bible, version, copyright, permissions, book_name_language=None): """ Saves the bibles meta data. """ - log.debug('save_meta data %s, %s, %s, %s', - bible, version, copyright, permissions) + log.debug('save_meta data %s, %s, %s, %s', bible, version, copyright, permissions) self.db_cache[bible].save_meta('name', version) self.db_cache[bible].save_meta('copyright', copyright) self.db_cache[bible].save_meta('permissions', permissions) - self.db_cache[bible].save_meta('book_name_language', - book_name_language) + self.db_cache[bible].save_meta('book_name_language', book_name_language) def get_meta_data(self, bible, key): """ diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 1817ac240..0bdd8aae6 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -86,19 +86,19 @@ class BibleMediaItem(MediaManagerItem): if not bitem.flags() & QtCore.Qt.ItemIsSelectable: # The item is the "No Search Results" item. self.list_view.clear() - self.displayResults(bible, second_bible) + self.display_results(bible, second_bible) return else: item_second_bible = self._decode_qt_object(bitem, 'second_bible') if item_second_bible and second_bible or not item_second_bible and not second_bible: - self.displayResults(bible, second_bible) + self.display_results(bible, second_bible) elif critical_error_message_box( message=translate('BiblesPlugin.MediaItem', - 'You cannot combine single and dual Bible verse search results. ' - 'Do you want to delete your search results and start a new search?'), - parent=self, question=True) == QtGui.QMessageBox.Yes: + 'You cannot combine single and dual Bible verse search results. ' + 'Do you want to delete your search results and start a new search?'), + parent=self, question=True) == QtGui.QMessageBox.Yes: self.list_view.clear() - self.displayResults(bible, second_bible) + self.display_results(bible, second_bible) def _decode_qt_object(self, bitem, key): reference = bitem.data(QtCore.Qt.UserRole) @@ -116,8 +116,8 @@ class BibleMediaItem(MediaManagerItem): self.has_delete_icon = True self.add_to_service_item = False - def addSearchTab(self, prefix, name): - self.searchTabBar.addTab(name) + def add_search_tab(self, prefix, name): + self.search_tab_bar.addTab(name) tab = QtGui.QWidget() tab.setObjectName(prefix + 'Tab') tab.setSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) @@ -126,15 +126,12 @@ class BibleMediaItem(MediaManagerItem): setattr(self, prefix + 'Tab', tab) setattr(self, prefix + 'Layout', layout) - def addSearchFields(self, prefix, name): + def add_search_fields(self, prefix, name): """ Creates and adds generic search tab. - ``prefix`` - The prefix of the tab, this is either ``quick`` or ``advanced``. - - ``name`` - The translated string to display. + :param prefix: The prefix of the tab, this is either ``quick`` or ``advanced``. + :param name: The translated string to display. """ if prefix == 'quick': idx = 2 @@ -142,124 +139,126 @@ class BibleMediaItem(MediaManagerItem): idx = 5 tab = getattr(self, prefix + 'Tab') layout = getattr(self, prefix + 'Layout') - versionLabel = QtGui.QLabel(tab) - versionLabel.setObjectName(prefix + 'VersionLabel') - layout.addWidget(versionLabel, idx, 0, QtCore.Qt.AlignRight) - versionComboBox = create_horizontal_adjusting_combo_box(tab, prefix + 'VersionComboBox') - versionLabel.setBuddy(versionComboBox) - layout.addWidget(versionComboBox, idx, 1, 1, 2) - secondLabel = QtGui.QLabel(tab) - secondLabel.setObjectName(prefix + 'SecondLabel') - layout.addWidget(secondLabel, idx + 1, 0, QtCore.Qt.AlignRight) - secondComboBox = create_horizontal_adjusting_combo_box(tab, prefix + 'SecondComboBox') - versionLabel.setBuddy(secondComboBox) - layout.addWidget(secondComboBox, idx + 1, 1, 1, 2) - styleLabel = QtGui.QLabel(tab) - styleLabel.setObjectName(prefix + 'StyleLabel') - layout.addWidget(styleLabel, idx + 2, 0, QtCore.Qt.AlignRight) - styleComboBox = create_horizontal_adjusting_combo_box(tab, prefix + 'StyleComboBox') - styleComboBox.addItems(['', '', '']) - layout.addWidget(styleComboBox, idx + 2, 1, 1, 2) + version_label = QtGui.QLabel(tab) + version_label.setObjectName(prefix + 'VersionLabel') + layout.addWidget(version_label, idx, 0, QtCore.Qt.AlignRight) + version_combo_box = create_horizontal_adjusting_combo_box(tab, prefix + 'VersionComboBox') + version_label.setBuddy(version_combo_box) + layout.addWidget(version_combo_box, idx, 1, 1, 2) + second_label = QtGui.QLabel(tab) + second_label.setObjectName(prefix + 'SecondLabel') + layout.addWidget(second_label, idx + 1, 0, QtCore.Qt.AlignRight) + second_combo_box = create_horizontal_adjusting_combo_box(tab, prefix + 'SecondComboBox') + version_label.setBuddy(second_combo_box) + layout.addWidget(second_combo_box, idx + 1, 1, 1, 2) + style_label = QtGui.QLabel(tab) + style_label.setObjectName(prefix + 'StyleLabel') + layout.addWidget(style_label, idx + 2, 0, QtCore.Qt.AlignRight) + style_combo_box = create_horizontal_adjusting_combo_box(tab, prefix + 'StyleComboBox') + style_combo_box.addItems(['', '', '']) + layout.addWidget(style_combo_box, idx + 2, 1, 1, 2) search_button_layout = QtGui.QHBoxLayout() search_button_layout.setObjectName(prefix + 'search_button_layout') search_button_layout.addStretch() - lockButton = QtGui.QToolButton(tab) - lockButton.setIcon(self.unlock_icon) - lockButton.setCheckable(True) - lockButton.setObjectName(prefix + 'LockButton') - search_button_layout.addWidget(lockButton) - searchButton = QtGui.QPushButton(tab) - searchButton.setObjectName(prefix + 'SearchButton') - search_button_layout.addWidget(searchButton) + lock_button = QtGui.QToolButton(tab) + lock_button.setIcon(self.unlock_icon) + lock_button.setCheckable(True) + lock_button.setObjectName(prefix + 'LockButton') + search_button_layout.addWidget(lock_button) + search_button = QtGui.QPushButton(tab) + search_button.setObjectName(prefix + 'SearchButton') + search_button_layout.addWidget(search_button) layout.addLayout(search_button_layout, idx + 3, 1, 1, 2) self.page_layout.addWidget(tab) tab.setVisible(False) - lockButton.toggled.connect(self.onLockButtonToggled) - setattr(self, prefix + 'VersionLabel', versionLabel) - setattr(self, prefix + 'VersionComboBox', versionComboBox) - setattr(self, prefix + 'SecondLabel', secondLabel) - setattr(self, prefix + 'SecondComboBox', secondComboBox) - setattr(self, prefix + 'StyleLabel', styleLabel) - setattr(self, prefix + 'StyleComboBox', styleComboBox) - setattr(self, prefix + 'LockButton', lockButton) + lock_button.toggled.connect(self.on_lock_button_toggled) + setattr(self, prefix + 'VersionLabel', version_label) + setattr(self, prefix + 'VersionComboBox', version_combo_box) + setattr(self, prefix + 'SecondLabel', second_label) + setattr(self, prefix + 'SecondComboBox', second_combo_box) + setattr(self, prefix + 'StyleLabel', style_label) + setattr(self, prefix + 'StyleComboBox', style_combo_box) + setattr(self, prefix + 'LockButton', lock_button) setattr(self, prefix + 'SearchButtonLayout', search_button_layout) - setattr(self, prefix + 'SearchButton', searchButton) + setattr(self, prefix + 'SearchButton', search_button) def add_end_header_bar(self): - self.searchTabBar = QtGui.QTabBar(self) - self.searchTabBar.setExpanding(False) - self.searchTabBar.setObjectName('searchTabBar') - self.page_layout.addWidget(self.searchTabBar) + self.search_tab_bar = QtGui.QTabBar(self) + self.search_tab_bar.setExpanding(False) + self.search_tab_bar.setObjectName('search_tab_bar') + self.page_layout.addWidget(self.search_tab_bar) # Add the Quick Search tab. - self.addSearchTab('quick', translate('BiblesPlugin.MediaItem', 'Quick')) - self.quickSearchLabel = QtGui.QLabel(self.quickTab) - self.quickSearchLabel.setObjectName('quickSearchLabel') - self.quickLayout.addWidget(self.quickSearchLabel, 0, 0, QtCore.Qt.AlignRight) - self.quickSearchEdit = SearchEdit(self.quickTab) - self.quickSearchEdit.setSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Fixed) - self.quickSearchEdit.setObjectName('quickSearchEdit') - self.quickSearchLabel.setBuddy(self.quickSearchEdit) - self.quickLayout.addWidget(self.quickSearchEdit, 0, 1, 1, 2) - self.addSearchFields('quick', translate('BiblesPlugin.MediaItem', 'Quick')) + self.add_search_tab('quick', translate('BiblesPlugin.MediaItem', 'Quick')) + self.quick_search_label = QtGui.QLabel(self.quickTab) + self.quick_search_label.setObjectName('quick_search_label') + self.quickLayout.addWidget(self.quick_search_label, 0, 0, QtCore.Qt.AlignRight) + self.quick_search_edit = SearchEdit(self.quickTab) + self.quick_search_edit.setSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Fixed) + self.quick_search_edit.setObjectName('quick_search_edit') + self.quick_search_label.setBuddy(self.quick_search_edit) + self.quickLayout.addWidget(self.quick_search_edit, 0, 1, 1, 2) + self.add_search_fields('quick', translate('BiblesPlugin.MediaItem', 'Quick')) self.quickTab.setVisible(True) # Add the Advanced Search tab. - self.addSearchTab('advanced', UiStrings().Advanced) - self.advancedBookLabel = QtGui.QLabel(self.advancedTab) - self.advancedBookLabel.setObjectName('advancedBookLabel') - self.advancedLayout.addWidget(self.advancedBookLabel, 0, 0, QtCore.Qt.AlignRight) - self.advancedBookComboBox = create_horizontal_adjusting_combo_box(self.advancedTab, 'advancedBookComboBox') - self.advancedBookLabel.setBuddy(self.advancedBookComboBox) - self.advancedLayout.addWidget(self.advancedBookComboBox, 0, 1, 1, 2) - self.advancedChapterLabel = QtGui.QLabel(self.advancedTab) - self.advancedChapterLabel.setObjectName('advancedChapterLabel') - self.advancedLayout.addWidget(self.advancedChapterLabel, 1, 1, 1, 2) - self.advancedVerseLabel = QtGui.QLabel(self.advancedTab) - self.advancedVerseLabel.setObjectName('advancedVerseLabel') - self.advancedLayout.addWidget(self.advancedVerseLabel, 1, 2) - self.advancedFromLabel = QtGui.QLabel(self.advancedTab) - self.advancedFromLabel.setObjectName('advancedFromLabel') - self.advancedLayout.addWidget(self.advancedFromLabel, 3, 0, QtCore.Qt.AlignRight) - self.advancedFromChapter = QtGui.QComboBox(self.advancedTab) - self.advancedFromChapter.setObjectName('advancedFromChapter') - self.advancedLayout.addWidget(self.advancedFromChapter, 3, 1) - self.advancedFromVerse = QtGui.QComboBox(self.advancedTab) - self.advancedFromVerse.setObjectName('advancedFromVerse') - self.advancedLayout.addWidget(self.advancedFromVerse, 3, 2) - self.advancedToLabel = QtGui.QLabel(self.advancedTab) - self.advancedToLabel.setObjectName('advancedToLabel') - self.advancedLayout.addWidget(self.advancedToLabel, 4, 0, QtCore.Qt.AlignRight) - self.advancedToChapter = QtGui.QComboBox(self.advancedTab) - self.advancedToChapter.setObjectName('advancedToChapter') - self.advancedLayout.addWidget(self.advancedToChapter, 4, 1) - self.advancedToVerse = QtGui.QComboBox(self.advancedTab) - self.advancedToVerse.setObjectName('advancedToVerse') - self.advancedLayout.addWidget(self.advancedToVerse, 4, 2) - self.addSearchFields('advanced', UiStrings().Advanced) + self.add_search_tab('advanced', UiStrings().Advanced) + self.advanced_book_label = QtGui.QLabel(self.advancedTab) + self.advanced_book_label.setObjectName('advanced_book_label') + self.advancedLayout.addWidget(self.advanced_book_label, 0, 0, QtCore.Qt.AlignRight) + self.advanced_book_combo_box = create_horizontal_adjusting_combo_box(self.advancedTab, + 'advanced_book_combo_box') + self.advanced_book_label.setBuddy(self.advanced_book_combo_box) + self.advancedLayout.addWidget(self.advanced_book_combo_box, 0, 1, 1, 2) + self.advanced_chapter_label = QtGui.QLabel(self.advancedTab) + self.advanced_chapter_label.setObjectName('advanced_chapter_label') + self.advancedLayout.addWidget(self.advanced_chapter_label, 1, 1, 1, 2) + self.advanced_verse_label = QtGui.QLabel(self.advancedTab) + self.advanced_verse_label.setObjectName('advanced_verse_label') + self.advancedLayout.addWidget(self.advanced_verse_label, 1, 2) + self.advanced_from_label = QtGui.QLabel(self.advancedTab) + self.advanced_from_label.setObjectName('advanced_from_label') + self.advancedLayout.addWidget(self.advanced_from_label, 3, 0, QtCore.Qt.AlignRight) + self.advanced_from_chapter = QtGui.QComboBox(self.advancedTab) + self.advanced_from_chapter.setObjectName('advanced_from_chapter') + self.advancedLayout.addWidget(self.advanced_from_chapter, 3, 1) + self.advanced_from_verse = QtGui.QComboBox(self.advancedTab) + self.advanced_from_verse.setObjectName('advanced_from_verse') + self.advancedLayout.addWidget(self.advanced_from_verse, 3, 2) + self.advanced_to_label = QtGui.QLabel(self.advancedTab) + self.advanced_to_label.setObjectName('advanced_to_label') + self.advancedLayout.addWidget(self.advanced_to_label, 4, 0, QtCore.Qt.AlignRight) + self.advanced_to_chapter = QtGui.QComboBox(self.advancedTab) + self.advanced_to_chapter.setObjectName('advanced_to_chapter') + self.advancedLayout.addWidget(self.advanced_to_chapter, 4, 1) + self.advanced_to_verse = QtGui.QComboBox(self.advancedTab) + self.advanced_to_verse.setObjectName('advanced_to_verse') + self.advancedLayout.addWidget(self.advanced_to_verse, 4, 2) + self.add_search_fields('advanced', UiStrings().Advanced) # Combo Boxes - self.quickVersionComboBox.activated.connect(self.updateAutoCompleter) - self.quickSecondComboBox.activated.connect(self.updateAutoCompleter) - self.advancedVersionComboBox.activated.connect(self.onAdvancedVersionComboBox) - self.advancedSecondComboBox.activated.connect(self.onAdvancedSecondComboBox) - self.advancedBookComboBox.activated.connect(self.onAdvancedBookComboBox) - self.advancedFromChapter.activated.connect(self.onAdvancedFromChapter) - self.advancedFromVerse.activated.connect(self.onAdvancedFromVerse) - self.advancedToChapter.activated.connect(self.onAdvancedToChapter) - QtCore.QObject.connect(self.quickSearchEdit, QtCore.SIGNAL('searchTypeChanged(int)'), self.updateAutoCompleter) - self.quickVersionComboBox.activated.connect(self.updateAutoCompleter) - self.quickStyleComboBox.activated.connect(self.onQuickStyleComboBoxChanged) - self.advancedStyleComboBox.activated.connect(self.onAdvancedStyleComboBoxChanged) + self.quickVersionComboBox.activated.connect(self.update_auto_completer) + self.quickSecondComboBox.activated.connect(self.update_auto_completer) + self.advancedVersionComboBox.activated.connect(self.on_advanced_version_combo_box) + self.advancedSecondComboBox.activated.connect(self.on_advanced_second_combo_box) + self.advanced_book_combo_box.activated.connect(self.on_advanced_book_combo_box) + self.advanced_from_chapter.activated.connect(self.on_advanced_from_chapter) + self.advanced_from_verse.activated.connect(self.on_advanced_from_verse) + self.advanced_to_chapter.activated.connect(self.on_advanced_to_chapter) + QtCore.QObject.connect(self.quick_search_edit, QtCore.SIGNAL('searchTypeChanged(int)'), + self.update_auto_completer) + self.quickVersionComboBox.activated.connect(self.update_auto_completer) + self.quickStyleComboBox.activated.connect(self.on_quick_style_combo_box_changed) + self.advancedStyleComboBox.activated.connect(self.on_advanced_style_combo_box_changed) # Buttons - self.advancedSearchButton.clicked.connect(self.onAdvancedSearchButton) - self.quickSearchButton.clicked.connect(self.onQuickSearchButton) + self.advancedSearchButton.clicked.connect(self.on_advanced_search_button) + self.quickSearchButton.clicked.connect(self.on_quick_search_button) # Other stuff - self.quickSearchEdit.returnPressed.connect(self.onQuickSearchButton) - self.searchTabBar.currentChanged.connect(self.onSearchTabBarCurrentChanged) + self.quick_search_edit.returnPressed.connect(self.on_quick_search_button) + self.search_tab_bar.currentChanged.connect(self.on_search_tab_bar_current_changed) def on_focus(self): if self.quickTab.isVisible(): - self.quickSearchEdit.setFocus() + self.quick_search_edit.setFocus() else: - self.advancedBookComboBox.setFocus() + self.advanced_book_combo_box.setFocus() def config_update(self): log.debug('config_update') @@ -278,7 +277,7 @@ class BibleMediaItem(MediaManagerItem): def retranslateUi(self): log.debug('retranslateUi') - self.quickSearchLabel.setText(translate('BiblesPlugin.MediaItem', 'Find:')) + self.quick_search_label.setText(translate('BiblesPlugin.MediaItem', 'Find:')) self.quickVersionLabel.setText('%s:' % UiStrings().Version) self.quickSecondLabel.setText(translate('BiblesPlugin.MediaItem', 'Second:')) self.quickStyleLabel.setText(UiStrings().LayoutStyle) @@ -286,13 +285,13 @@ class BibleMediaItem(MediaManagerItem): self.quickStyleComboBox.setItemText(LayoutStyle.VersePerLine, UiStrings().VersePerLine) self.quickStyleComboBox.setItemText(LayoutStyle.Continuous, UiStrings().Continuous) self.quickLockButton.setToolTip(translate('BiblesPlugin.MediaItem', - 'Toggle to keep or clear the previous results.')) + 'Toggle to keep or clear the previous results.')) self.quickSearchButton.setText(UiStrings().Search) - self.advancedBookLabel.setText(translate('BiblesPlugin.MediaItem', 'Book:')) - self.advancedChapterLabel.setText(translate('BiblesPlugin.MediaItem', 'Chapter:')) - self.advancedVerseLabel.setText(translate('BiblesPlugin.MediaItem', 'Verse:')) - self.advancedFromLabel.setText(translate('BiblesPlugin.MediaItem', 'From:')) - self.advancedToLabel.setText(translate('BiblesPlugin.MediaItem', 'To:')) + self.advanced_book_label.setText(translate('BiblesPlugin.MediaItem', 'Book:')) + self.advanced_chapter_label.setText(translate('BiblesPlugin.MediaItem', 'Chapter:')) + self.advanced_verse_label.setText(translate('BiblesPlugin.MediaItem', 'Verse:')) + self.advanced_from_label.setText(translate('BiblesPlugin.MediaItem', 'From:')) + self.advanced_to_label.setText(translate('BiblesPlugin.MediaItem', 'To:')) self.advancedVersionLabel.setText('%s:' % UiStrings().Version) self.advancedSecondLabel.setText(translate('BiblesPlugin.MediaItem', 'Second:')) self.advancedStyleLabel.setText(UiStrings().LayoutStyle) @@ -300,14 +299,14 @@ class BibleMediaItem(MediaManagerItem): self.advancedStyleComboBox.setItemText(LayoutStyle.VersePerLine, UiStrings().VersePerLine) self.advancedStyleComboBox.setItemText(LayoutStyle.Continuous, UiStrings().Continuous) self.advancedLockButton.setToolTip(translate('BiblesPlugin.MediaItem', - 'Toggle to keep or clear the previous results.')) + 'Toggle to keep or clear the previous results.')) self.advancedSearchButton.setText(UiStrings().Search) def initialise(self): log.debug('bible manager initialise') self.plugin.manager.media = self - self.loadBibles() - self.quickSearchEdit.set_search_types([ + self.load_bibles() + self.quick_search_edit.set_search_types([ (BibleSearch.Reference, ':/bibles/bibles_search_reference.png', translate('BiblesPlugin.MediaItem', 'Scripture Reference'), translate('BiblesPlugin.MediaItem', 'Search Scripture Reference...')), @@ -315,11 +314,11 @@ class BibleMediaItem(MediaManagerItem): translate('BiblesPlugin.MediaItem', 'Text Search'), translate('BiblesPlugin.MediaItem', 'Search Text...')) ]) - self.quickSearchEdit.set_current_search_type(Settings().value('%s/last search type' % self.settings_section)) + self.quick_search_edit.set_current_search_type(Settings().value('%s/last search type' % self.settings_section)) self.config_update() log.debug('bible manager initialise complete') - def loadBibles(self): + def load_bibles(self): log.debug('Loading Bibles') self.quickVersionComboBox.clear() self.quickSecondComboBox.clear() @@ -340,80 +339,73 @@ class BibleMediaItem(MediaManagerItem): bible = Settings().value(self.settings_section + '/advanced bible') if bible in bibles: find_and_set_in_combo_box(self.advancedVersionComboBox, bible) - self.initialiseAdvancedBible(str(bible)) + self.initialise_advanced_bible(str(bible)) elif bibles: - self.initialiseAdvancedBible(bibles[0]) + self.initialise_advanced_bible(bibles[0]) bible = Settings().value(self.settings_section + '/quick bible') find_and_set_in_combo_box(self.quickVersionComboBox, bible) def reload_bibles(self, process=False): log.debug('Reloading Bibles') self.plugin.manager.reload_bibles() - self.loadBibles() + self.load_bibles() # If called from first time wizard re-run, process any new bibles. if process: self.plugin.app_startup() - self.updateAutoCompleter() + self.update_auto_completer() - def initialiseAdvancedBible(self, bible, last_book_id=None): + def initialise_advanced_bible(self, bible, last_book_id=None): """ - This initialises the given bible, which means that its book names and - their chapter numbers is added to the combo boxes on the - 'Advanced Search' Tab. This is not of any importance of the - 'Quick Search' Tab. + This initialises the given bible, which means that its book names and their chapter numbers is added to the + combo boxes on the 'Advanced Search' Tab. This is not of any importance of the 'Quick Search' Tab. - ``bible`` - The bible to initialise (unicode). - - ``last_book_id`` - The "book reference id" of the book which is choosen at the moment. + :param bible: The bible to initialise (unicode). + :param last_book_id: The "book reference id" of the book which is chosen at the moment. (int) """ - log.debug('initialiseAdvancedBible %s, %s', bible, last_book_id) + log.debug('initialise_advanced_bible %s, %s', bible, last_book_id) book_data = self.plugin.manager.get_books(bible) - secondbible = self.advancedSecondComboBox.currentText() - if secondbible != '': - secondbook_data = self.plugin.manager.get_books(secondbible) + second_bible = self.advancedSecondComboBox.currentText() + if second_bible != '': + second_book_data = self.plugin.manager.get_books(second_bible) book_data_temp = [] for book in book_data: - for secondbook in secondbook_data: - if book['book_reference_id'] == \ - secondbook['book_reference_id']: + for second_book in second_book_data: + if book['book_reference_id'] == second_book['book_reference_id']: book_data_temp.append(book) book_data = book_data_temp - self.advancedBookComboBox.clear() + self.advanced_book_combo_box.clear() first = True initialise_chapter_verse = False language_selection = self.plugin.manager.get_language_selection(bible) book_names = BibleStrings().BookNames for book in book_data: - row = self.advancedBookComboBox.count() + row = self.advanced_book_combo_box.count() if language_selection == LanguageSelection.Bible: - self.advancedBookComboBox.addItem(book['name']) + self.advanced_book_combo_box.addItem(book['name']) elif language_selection == LanguageSelection.Application: data = BiblesResourcesDB.get_book_by_id(book['book_reference_id']) - self.advancedBookComboBox.addItem(book_names[data['abbreviation']]) + self.advanced_book_combo_box.addItem(book_names[data['abbreviation']]) elif language_selection == LanguageSelection.English: data = BiblesResourcesDB.get_book_by_id(book['book_reference_id']) - self.advancedBookComboBox.addItem(data['name']) - self.advancedBookComboBox.setItemData(row, book['book_reference_id']) + self.advanced_book_combo_box.addItem(data['name']) + self.advanced_book_combo_box.setItemData(row, book['book_reference_id']) if first: first = False first_book = book initialise_chapter_verse = True if last_book_id and last_book_id == int(book['book_reference_id']): - index = self.advancedBookComboBox.findData(book['book_reference_id']) + index = self.advanced_book_combo_box.findData(book['book_reference_id']) if index == -1: # Not Found. index = 0 - self.advancedBookComboBox.setCurrentIndex(index) + self.advanced_book_combo_box.setCurrentIndex(index) initialise_chapter_verse = False if initialise_chapter_verse: - self.initialiseChapterVerse(bible, first_book['name'], - first_book['book_reference_id']) + self.initialise_chapter_verse(bible, first_book['name'], first_book['book_reference_id']) - def initialiseChapterVerse(self, bible, book, book_ref_id): - log.debug('initialiseChapterVerse %s, %s, %s', bible, book, book_ref_id) + def initialise_chapter_verse(self, bible, book, book_ref_id): + log.debug('initialise_chapter_verse %s, %s, %s', bible, book, book_ref_id) book = self.plugin.manager.get_book_by_id(bible, book_ref_id) self.chapter_count = self.plugin.manager.get_chapter_count(bible, book) verse_count = self.plugin.manager.get_verse_count_by_book_ref_id(bible, book_ref_id, 1) @@ -422,36 +414,36 @@ class BibleMediaItem(MediaManagerItem): critical_error_message_box(message=translate('BiblesPlugin.MediaItem', 'Bible not fully loaded.')) else: self.advancedSearchButton.setEnabled(True) - self.adjustComboBox(1, self.chapter_count, self.advancedFromChapter) - self.adjustComboBox(1, self.chapter_count, self.advancedToChapter) - self.adjustComboBox(1, verse_count, self.advancedFromVerse) - self.adjustComboBox(1, verse_count, self.advancedToVerse) + self.adjust_combo_box(1, self.chapter_count, self.advanced_from_chapter) + self.adjust_combo_box(1, self.chapter_count, self.advanced_to_chapter) + self.adjust_combo_box(1, verse_count, self.advanced_from_verse) + self.adjust_combo_box(1, verse_count, self.advanced_to_verse) - def updateAutoCompleter(self): + def update_auto_completer(self): """ This updates the bible book completion list for the search field. The completion depends on the bible. It is only updated when we are doing a reference search, otherwise the auto completion list is removed. """ - log.debug('updateAutoCompleter') + log.debug('update_auto_completer') # Save the current search type to the configuration. - Settings().setValue('%s/last search type' % self.settings_section, self.quickSearchEdit.current_search_type()) + Settings().setValue('%s/last search type' % self.settings_section, self.quick_search_edit.current_search_type()) # Save the current bible to the configuration. Settings().setValue(self.settings_section + '/quick bible', self.quickVersionComboBox.currentText()) books = [] # We have to do a 'Reference Search'. - if self.quickSearchEdit.current_search_type() == BibleSearch.Reference: + if self.quick_search_edit.current_search_type() == BibleSearch.Reference: bibles = self.plugin.manager.get_bibles() bible = self.quickVersionComboBox.currentText() if bible: book_data = bibles[bible].get_books() - secondbible = self.quickSecondComboBox.currentText() - if secondbible != '': - secondbook_data = bibles[secondbible].get_books() + second_bible = self.quickSecondComboBox.currentText() + if second_bible != '': + second_book_data = bibles[second_bible].get_books() book_data_temp = [] for book in book_data: - for secondbook in secondbook_data: - if book.book_reference_id == secondbook.book_reference_id: + for second_book in second_book_data: + if book.book_reference_id == second_book.book_reference_id: book_data_temp.append(book) book_data = book_data_temp language_selection = self.plugin.manager.get_language_selection(bible) @@ -467,7 +459,7 @@ class BibleMediaItem(MediaManagerItem): data = BiblesResourcesDB.get_book_by_id(book.book_reference_id) books.append(data['name'] + ' ') books.sort(key=get_locale_key) - set_case_insensitive_completer(books, self.quickSearchEdit) + set_case_insensitive_completer(books, self.quick_search_edit) def on_import_click(self): if not hasattr(self, 'import_wizard'): @@ -482,9 +474,9 @@ class BibleMediaItem(MediaManagerItem): elif self.advancedTab.isVisible(): bible = self.advancedVersionComboBox.currentText() if bible: - self.editBibleForm = EditBibleForm(self, self.main_window, self.plugin.manager) - self.editBibleForm.loadBible(bible) - if self.editBibleForm.exec_(): + self.edit_bible_form = EditBibleForm(self, self.main_window, self.plugin.manager) + self.edit_bible_form.loadBible(bible) + if self.edit_bible_form.exec_(): self.reload_bibles() def on_delete_click(self): @@ -493,117 +485,113 @@ class BibleMediaItem(MediaManagerItem): elif self.advancedTab.isVisible(): bible = self.advancedVersionComboBox.currentText() if bible: - if QtGui.QMessageBox.question(self, UiStrings().ConfirmDelete, - translate('BiblesPlugin.MediaItem', 'Are you sure you want to completely delete "%s" Bible from ' - 'OpenLP?\n\nYou will need to re-import this Bible to use it again.') % bible, + if QtGui.QMessageBox.question( + self, UiStrings().ConfirmDelete, + translate('BiblesPlugin.MediaItem', 'Are you sure you want to completely delete "%s" Bible from ' + 'OpenLP?\n\nYou will need to re-import this Bible to use it again.') % bible, QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No), - QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No: + QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No: return self.plugin.manager.delete_bible(bible) self.reload_bibles() - def onSearchTabBarCurrentChanged(self, index): + def on_search_tab_bar_current_changed(self, index): if index == 0: self.advancedTab.setVisible(False) self.quickTab.setVisible(True) - self.quickSearchEdit.setFocus() + self.quick_search_edit.setFocus() else: self.quickTab.setVisible(False) self.advancedTab.setVisible(True) - self.advancedBookComboBox.setFocus() + self.advanced_book_combo_box.setFocus() - def onLockButtonToggled(self, checked): + def on_lock_button_toggled(self, checked): if checked: self.sender().setIcon(self.lock_icon) else: self.sender().setIcon(self.unlock_icon) - def onQuickStyleComboBoxChanged(self): + def on_quick_style_combo_box_changed(self): self.settings.layout_style = self.quickStyleComboBox.currentIndex() self.advancedStyleComboBox.setCurrentIndex(self.settings.layout_style) self.settings.layout_style_combo_box.setCurrentIndex(self.settings.layout_style) Settings().setValue(self.settings_section + '/verse layout style', self.settings.layout_style) - def onAdvancedStyleComboBoxChanged(self): + def on_advanced_style_combo_box_changed(self): self.settings.layout_style = self.advancedStyleComboBox.currentIndex() self.quickStyleComboBox.setCurrentIndex(self.settings.layout_style) self.settings.layout_style_combo_box.setCurrentIndex(self.settings.layout_style) Settings().setValue(self.settings_section + '/verse layout style', self.settings.layout_style) - def onAdvancedVersionComboBox(self): + def on_advanced_version_combo_box(self): Settings().setValue(self.settings_section + '/advanced bible', self.advancedVersionComboBox.currentText()) - self.initialiseAdvancedBible(self.advancedVersionComboBox.currentText(), - self.advancedBookComboBox.itemData(int(self.advancedBookComboBox.currentIndex()))) - - def onAdvancedSecondComboBox(self): - self.initialiseAdvancedBible(self.advancedVersionComboBox.currentText(), - self.advancedBookComboBox.itemData(int(self.advancedBookComboBox.currentIndex()))) - - def onAdvancedBookComboBox(self): - item = int(self.advancedBookComboBox.currentIndex()) - self.initialiseChapterVerse( + self.initialise_advanced_bible( self.advancedVersionComboBox.currentText(), - self.advancedBookComboBox.currentText(), - self.advancedBookComboBox.itemData(item)) + self.advanced_book_combo_box.itemData(int(self.advanced_book_combo_box.currentIndex()))) - def onAdvancedFromVerse(self): - chapter_from = int(self.advancedFromChapter.currentText()) - chapter_to = int(self.advancedToChapter.currentText()) + def on_advanced_second_combo_box(self): + self.initialise_advanced_bible( + self.advancedVersionComboBox.currentText(), + self.advanced_book_combo_box.itemData(int(self.advanced_book_combo_box.currentIndex()))) + + def on_advanced_book_combo_box(self): + item = int(self.advanced_book_combo_box.currentIndex()) + self.initialise_chapter_verse( + self.advancedVersionComboBox.currentText(), + self.advanced_book_combo_box.currentText(), + self.advanced_book_combo_box.itemData(item)) + + def on_advanced_from_verse(self): + chapter_from = int(self.advanced_from_chapter.currentText()) + chapter_to = int(self.advanced_to_chapter.currentText()) if chapter_from == chapter_to: bible = self.advancedVersionComboBox.currentText() - book_ref_id = self.advancedBookComboBox.itemData(int(self.advancedBookComboBox.currentIndex())) - verse_from = int(self.advancedFromVerse.currentText()) + book_ref_id = self.advanced_book_combo_box.itemData(int(self.advanced_book_combo_box.currentIndex())) + verse_from = int(self.advanced_from_verse.currentText()) verse_count = self.plugin.manager.get_verse_count_by_book_ref_id(bible, book_ref_id, chapter_to) - self.adjustComboBox(verse_from, verse_count, self.advancedToVerse, True) + self.adjust_combo_box(verse_from, verse_count, self.advanced_to_verse, True) - def onAdvancedToChapter(self): + def on_advanced_to_chapter(self): bible = self.advancedVersionComboBox.currentText() - book_ref_id = self.advancedBookComboBox.itemData(int(self.advancedBookComboBox.currentIndex())) - chapter_from = int(self.advancedFromChapter.currentText()) - chapter_to = int(self.advancedToChapter.currentText()) - verse_from = int(self.advancedFromVerse.currentText()) - verse_to = int(self.advancedToVerse.currentText()) + book_ref_id = self.advanced_book_combo_box.itemData(int(self.advanced_book_combo_box.currentIndex())) + chapter_from = int(self.advanced_from_chapter.currentText()) + chapter_to = int(self.advanced_to_chapter.currentText()) + verse_from = int(self.advanced_from_verse.currentText()) + verse_to = int(self.advanced_to_verse.currentText()) verse_count = self.plugin.manager.get_verse_count_by_book_ref_id(bible, book_ref_id, chapter_to) if chapter_from == chapter_to and verse_from > verse_to: - self.adjustComboBox(verse_from, verse_count, self.advancedToVerse) + self.adjust_combo_box(verse_from, verse_count, self.advanced_to_verse) else: - self.adjustComboBox(1, verse_count, self.advancedToVerse) + self.adjust_combo_box(1, verse_count, self.advanced_to_verse) - def onAdvancedFromChapter(self): + def on_advanced_from_chapter(self): bible = self.advancedVersionComboBox.currentText() - book_ref_id = self.advancedBookComboBox.itemData( - int(self.advancedBookComboBox.currentIndex())) - chapter_from = int(self.advancedFromChapter.currentText()) - chapter_to = int(self.advancedToChapter.currentText()) + book_ref_id = self.advanced_book_combo_box.itemData( + int(self.advanced_book_combo_box.currentIndex())) + chapter_from = int(self.advanced_from_chapter.currentText()) + chapter_to = int(self.advanced_to_chapter.currentText()) verse_count = self.plugin.manager.get_verse_count_by_book_ref_id(bible, book_ref_id, chapter_from) - self.adjustComboBox(1, verse_count, self.advancedFromVerse) + self.adjust_combo_box(1, verse_count, self.advanced_from_verse) if chapter_from > chapter_to: - self.adjustComboBox(1, verse_count, self.advancedToVerse) - self.adjustComboBox(chapter_from, self.chapter_count, self.advancedToChapter) + self.adjust_combo_box(1, verse_count, self.advanced_to_verse) + self.adjust_combo_box(chapter_from, self.chapter_count, self.advanced_to_chapter) elif chapter_from == chapter_to: - self.adjustComboBox(chapter_from, self.chapter_count, self.advancedToChapter) - self.adjustComboBox(1, verse_count, self.advancedToVerse, True) + self.adjust_combo_box(chapter_from, self.chapter_count, self.advanced_to_chapter) + self.adjust_combo_box(1, verse_count, self.advanced_to_verse, True) else: - self.adjustComboBox(chapter_from, self.chapter_count, self.advancedToChapter, True) + self.adjust_combo_box(chapter_from, self.chapter_count, self.advanced_to_chapter, True) - def adjustComboBox(self, range_from, range_to, combo, restore=False): + def adjust_combo_box(self, range_from, range_to, combo, restore=False): """ Adjusts the given como box to the given values. - ``range_from`` - The first number of the range (int). - - ``range_to`` - The last number of the range (int). - - ``combo`` - The combo box itself (QComboBox). - - ``restore`` - If True, then the combo's currentText will be restored after + :param range_from: The first number of the range (int). + :param range_to: The last number of the range (int). + :param combo: The combo box itself (QComboBox). + :param restore: If True, then the combo's currentText will be restored after adjusting (if possible). """ - log.debug('adjustComboBox %s, %s, %s', combo, range_from, range_to) + log.debug('adjust_combo_box %s, %s, %s', combo, range_from, range_to) if restore: old_text = combo.currentText() combo.clear() @@ -611,7 +599,7 @@ class BibleMediaItem(MediaManagerItem): if restore and combo.findText(old_text) != -1: combo.setCurrentIndex(combo.findText(old_text)) - def onAdvancedSearchButton(self): + def on_advanced_search_button(self): """ Does an advanced search and saves the search results. """ @@ -620,32 +608,32 @@ class BibleMediaItem(MediaManagerItem): self.application.process_events() bible = self.advancedVersionComboBox.currentText() second_bible = self.advancedSecondComboBox.currentText() - book = self.advancedBookComboBox.currentText() - book_ref_id = self.advancedBookComboBox.itemData(int(self.advancedBookComboBox.currentIndex())) - chapter_from = self.advancedFromChapter.currentText() - chapter_to = self.advancedToChapter.currentText() - verse_from = self.advancedFromVerse.currentText() - verse_to = self.advancedToVerse.currentText() + book = self.advanced_book_combo_box.currentText() + book_ref_id = self.advanced_book_combo_box.itemData(int(self.advanced_book_combo_box.currentIndex())) + chapter_from = self.advanced_from_chapter.currentText() + chapter_to = self.advanced_to_chapter.currentText() + verse_from = self.advanced_from_verse.currentText() + verse_to = self.advanced_to_verse.currentText() verse_separator = get_reference_separator('sep_v_display') range_separator = get_reference_separator('sep_r_display') verse_range = chapter_from + verse_separator + verse_from + range_separator + chapter_to + \ verse_separator + verse_to - versetext = '%s %s' % (book, verse_range) + verse_text = '%s %s' % (book, verse_range) self.application.set_busy_cursor() - self.search_results = self.plugin.manager.get_verses(bible, versetext, book_ref_id) + self.search_results = self.plugin.manager.get_verses(bible, verse_text, book_ref_id) if second_bible: - self.second_search_results = self.plugin.manager.get_verses(second_bible, versetext, book_ref_id) + self.second_search_results = self.plugin.manager.get_verses(second_bible, verse_text, book_ref_id) if not self.advancedLockButton.isChecked(): self.list_view.clear() if self.list_view.count() != 0: self.__check_second_bible(bible, second_bible) elif self.search_results: - self.displayResults(bible, second_bible) + self.display_results(bible, second_bible) self.advancedSearchButton.setEnabled(True) self.check_search_result() self.application.set_normal_cursor() - def onQuickSearchButton(self): + def on_quick_search_button(self): """ Does a quick search and saves the search results. Quick search can either be "Reference Search" or "Text Search". @@ -655,13 +643,13 @@ class BibleMediaItem(MediaManagerItem): self.application.process_events() bible = self.quickVersionComboBox.currentText() second_bible = self.quickSecondComboBox.currentText() - text = self.quickSearchEdit.text() - if self.quickSearchEdit.current_search_type() == BibleSearch.Reference: + text = self.quick_search_edit.text() + if self.quick_search_edit.current_search_type() == BibleSearch.Reference: # We are doing a 'Reference Search'. self.search_results = self.plugin.manager.get_verses(bible, text) if second_bible and self.search_results: - self.second_search_results = self.plugin.manager.get_verses(second_bible, text, - self.search_results[0].book.book_reference_id) + self.second_search_results = \ + self.plugin.manager.get_verses(second_bible, text, self.search_results[0].book.book_reference_id) else: # We are doing a 'Text Search'. self.application.set_busy_cursor() @@ -681,13 +669,13 @@ class BibleMediaItem(MediaManagerItem): count += 1 continue new_search_results.append(verse) - text.append((verse.book.book_reference_id, verse.chapter, - verse.verse, verse.verse)) + text.append((verse.book.book_reference_id, verse.chapter, verse.verse, verse.verse)) if passage_not_found: - QtGui.QMessageBox.information(self, translate('BiblesPlugin.MediaItem', 'Information'), + QtGui.QMessageBox.information( + self, translate('BiblesPlugin.MediaItem', 'Information'), translate('BiblesPlugin.MediaItem', 'The second Bible does not contain all the verses ' - 'that are in the main Bible. Only verses found in both Bibles will be shown. %d verses ' - 'have not been included in the results.') % count, + 'that are in the main Bible. Only verses found in both Bibles will be shown. %d ' + 'verses have not been included in the results.') % count, QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok)) self.search_results = new_search_results self.second_search_results = bibles[second_bible].get_verses(text) @@ -696,24 +684,24 @@ class BibleMediaItem(MediaManagerItem): if self.list_view.count() != 0 and self.search_results: self.__check_second_bible(bible, second_bible) elif self.search_results: - self.displayResults(bible, second_bible) + self.display_results(bible, second_bible) self.quickSearchButton.setEnabled(True) self.check_search_result() self.application.set_normal_cursor() - def displayResults(self, bible, second_bible=''): + def display_results(self, bible, second_bible=''): """ Displays the search results in the media manager. All data needed for further action is saved for/in each row. """ - items = self.buildDisplayResults(bible, second_bible, self.search_results) + items = self.build_display_results(bible, second_bible, self.search_results) for bible_verse in items: self.list_view.addItem(bible_verse) self.list_view.selectAll() self.search_results = {} self.second_search_results = {} - def buildDisplayResults(self, bible, second_bible, search_results): + def build_display_results(self, bible, second_bible, search_results): """ Displays the search results in the media manager. All data needed for further action is saved for/in each row. @@ -764,7 +752,7 @@ class BibleMediaItem(MediaManagerItem): log.exception('The second_search_results does not have as many verses as the search_results.') break bible_text = '%s %d%s%d (%s, %s)' % (book, verse.chapter, verse_separator, verse.verse, version, - second_version) + second_version) else: bible_text = '%s %d%s%d (%s)' % (book, verse.chapter, verse_separator, verse.verse, version) bible_verse = QtGui.QListWidgetItem(bible_text) @@ -772,11 +760,16 @@ class BibleMediaItem(MediaManagerItem): items.append(bible_verse) return items - def generate_slide_data(self, service_item, item=None, xmlVersion=False, - remote=False, context=ServiceItemContext.Service): + def generate_slide_data(self, service_item, item=None, xml_version=False, remote=False, + context=ServiceItemContext.Service): """ - Generates and formats the slides for the service item as well as the - service item's title. + Generate the slide data. Needs to be implemented by the plugin. + + :param service_item: The service item to be built on + :param item: The Song item to be used + :param xml_version: The xml version (not used) + :param remote: Triggered from remote + :param context: Why is it being generated """ log.debug('generating slide data') if item: @@ -806,7 +799,7 @@ class BibleMediaItem(MediaManagerItem): second_permissions = self._decode_qt_object(bitem, 'second_permissions') second_text = self._decode_qt_object(bitem, 'second_text') verses.add(book, chapter, verse, version, copyright, permissions) - verse_text = self.formatVerse(old_chapter, chapter, verse) + verse_text = self.format_verse(old_chapter, chapter, verse) if second_bible: bible_text = '%s%s\n\n%s %s' % (verse_text, text, verse_text, second_text) raw_slides.append(bible_text.rstrip()) @@ -825,8 +818,8 @@ class BibleMediaItem(MediaManagerItem): bible_text = bible_text.strip(' ') if not old_item: start_item = bitem - elif self.checkTitle(bitem, old_item): - raw_title.append(self.formatTitle(start_item, old_item)) + elif self.check_title(bitem, old_item): + raw_title.append(self.format_title(start_item, old_item)) start_item = bitem old_item = bitem old_chapter = chapter @@ -835,7 +828,7 @@ class BibleMediaItem(MediaManagerItem): if second_bible: verses.add_version(second_version, second_copyright, second_permissions) service_item.raw_footer.append(verses.format_versions()) - raw_title.append(self.formatTitle(start_item, bitem)) + raw_title.append(self.format_title(start_item, bitem)) # If there are no more items we check whether we have to add bible_text. if bible_text: raw_slides.append(bible_text.lstrip()) @@ -858,17 +851,14 @@ class BibleMediaItem(MediaManagerItem): service_item.add_from_text(slide) return True - def formatTitle(self, start_bitem, old_bitem): + def format_title(self, start_bitem, old_bitem): """ This method is called, when we have to change the title, because we are at the end of a verse range. E. g. if we want to add Genesis 1:1-6 as well as Daniel 2:14. - ``start_item`` - The first item of a range. - - ``old_item`` - The last item of a range. + :param start_bitem: The first item of a range. + :param old_bitem: The last item of a range. """ verse_separator = get_reference_separator('sep_v_display') range_separator = get_reference_separator('sep_r_display') @@ -893,17 +883,15 @@ class BibleMediaItem(MediaManagerItem): range_separator + old_chapter + verse_separator + old_verse return '%s %s (%s)' % (start_book, verse_range, bibles) - def checkTitle(self, bitem, old_bitem): + def check_title(self, bitem, old_bitem): """ This method checks if we are at the end of an verse range. If that is the case, we return True, otherwise False. E. g. if we added + Genesis 1:1-6, but the next verse is Daniel 2:14, we return True. - ``item`` - The item we are dealing with at the moment. - - ``old_item`` - The item we were previously dealing with. + :param bitem: The item we are dealing with at the moment. + :param old_bitem: The item we were previously dealing with. """ # Get all the necessary meta data. book = self._decode_qt_object(bitem, 'book') @@ -930,22 +918,18 @@ class BibleMediaItem(MediaManagerItem): return True return False - def formatVerse(self, old_chapter, chapter, verse): + def format_verse(self, old_chapter, chapter, verse): """ Formats and returns the text, each verse starts with, for the given chapter and verse. The text is either surrounded by round, square, + curly brackets or no brackets at all. For example:: u'{su}1:1{/su}' - ``old_chapter`` - The previous verse's chapter number (int). - - ``chapter`` - The chapter number (int). - - ``verse`` - The verse number (int). + :param old_chapter: The previous verse's chapter number (int). + :param chapter: The chapter number (int). + :param verse: The verse number (int). """ verse_separator = get_reference_separator('sep_v_display') if not self.settings.is_verse_number_visible: @@ -969,16 +953,15 @@ class BibleMediaItem(MediaManagerItem): bible = self.quickVersionComboBox.currentText() search_results = self.plugin.manager.get_verses(bible, string, False, showError) if search_results: - versetext = ' '.join([verse.text for verse in search_results]) - return [[string, versetext]] + verse_text = ' '.join([verse.text for verse in search_results]) + return [[string, verse_text]] return [] def create_item_from_id(self, item_id): """ Create a media item from an item id. """ - item = QtGui.QListWidgetItem() bible = self.quickVersionComboBox.currentText() search_results = self.plugin.manager.get_verses(bible, item_id, False) - items = self.buildDisplayResults(bible, '', search_results) + items = self.build_display_results(bible, '', search_results) return items diff --git a/openlp/plugins/bibles/lib/opensong.py b/openlp/plugins/bibles/lib/opensong.py index 03ed322e7..a522c1c57 100644 --- a/openlp/plugins/bibles/lib/opensong.py +++ b/openlp/plugins/bibles/lib/opensong.py @@ -55,8 +55,7 @@ class OpenSongBible(BibleDB): """ Recursively get all text in an objectify element and its child elements. - ``element`` - An objectify element to get the text from + :param element: An objectify element to get the text from """ verse_text = '' if element.text: @@ -122,14 +121,16 @@ class OpenSongBible(BibleDB): else: verse_number += 1 self.create_verse(db_book.id, chapter_number, verse_number, self.get_text(verse)) - self.wizard.increment_progress_bar(translate('BiblesPlugin.Opensong', 'Importing %s %s...', - 'Importing ...')) % (db_book.name, chapter_number) + self.wizard.increment_progress_bar( + translate('BiblesPlugin.Opensong', 'Importing %s %s...', + 'Importing ...')) % (db_book.name, chapter_number) self.session.commit() self.application.process_events() except etree.XMLSyntaxError as inst: - critical_error_message_box(message=translate('BiblesPlugin.OpenSongImport', - 'Incorrect Bible file type supplied. OpenSong Bibles may be ' - 'compressed. You must decompress them before import.')) + critical_error_message_box( + message=translate('BiblesPlugin.OpenSongImport', + 'Incorrect Bible file type supplied. OpenSong Bibles may be ' + 'compressed. You must decompress them before import.')) log.exception(inst) success = False except (IOError, AttributeError): diff --git a/openlp/plugins/bibles/lib/osis.py b/openlp/plugins/bibles/lib/osis.py index b606e9fc0..4f85bef1a 100644 --- a/openlp/plugins/bibles/lib/osis.py +++ b/openlp/plugins/bibles/lib/osis.py @@ -84,8 +84,8 @@ class OSISBible(BibleDB): success = True last_chapter = 0 match_count = 0 - self.wizard.increment_progress_bar(translate('BiblesPlugin.OsisImport', - 'Detecting encoding (this may take a few minutes)...')) + self.wizard.increment_progress_bar( + translate('BiblesPlugin.OsisImport', 'Detecting encoding (this may take a few minutes)...')) try: detect_file = open(self.filename, 'r') details = chardet.detect(detect_file.read(1048576)) @@ -101,7 +101,7 @@ class OSISBible(BibleDB): osis = codecs.open(self.filename, 'r', details['encoding']) repl = replacement language_id = False - # Decide if the bible propably contains only NT or AT and NT or + # Decide if the bible probably contains only NT or AT and NT or # AT, NT and Apocrypha if lines_in_file < 11500: book_count = 27 @@ -154,10 +154,11 @@ class OSISBible(BibleDB): if last_chapter != chapter: if last_chapter != 0: self.session.commit() - self.wizard.increment_progress_bar(translate('BiblesPlugin.OsisImport', 'Importing %s %s...', - 'Importing ...') % (book_details['name'], chapter)) + self.wizard.increment_progress_bar( + translate('BiblesPlugin.OsisImport', 'Importing %s %s...', + 'Importing ...') % (book_details['name'], chapter)) last_chapter = chapter - # All of this rigmarol below is because the mod2osis tool from the Sword library embeds XML in the + # All of this rigmarole below is because the mod2osis tool from the Sword library embeds XML in the # OSIS but neglects to enclose the verse text (with XML) in <[CDATA[ ]]> tags. verse_text = self.note_regex.sub('', verse_text) verse_text = self.title_regex.sub('', verse_text) diff --git a/openlp/plugins/bibles/lib/versereferencelist.py b/openlp/plugins/bibles/lib/versereferencelist.py index 1cd0fa3cb..1d3877d1d 100644 --- a/openlp/plugins/bibles/lib/versereferencelist.py +++ b/openlp/plugins/bibles/lib/versereferencelist.py @@ -42,18 +42,15 @@ class VerseReferenceList(object): def add(self, book, chapter, verse, version, copyright, permission): self.add_version(version, copyright, permission) if not self.verse_list or self.verse_list[self.current_index]['book'] != book: - self.verse_list.append({'version': version, 'book': book, - 'chapter': chapter, 'start': verse, 'end': verse}) + self.verse_list.append({'version': version, 'book': book, 'chapter': chapter, 'start': verse, 'end': verse}) self.current_index += 1 elif self.verse_list[self.current_index]['chapter'] != chapter: - self.verse_list.append({'version': version, 'book': book, - 'chapter': chapter, 'start': verse, 'end': verse}) + self.verse_list.append({'version': version, 'book': book, 'chapter': chapter, 'start': verse, 'end': verse}) self.current_index += 1 elif (self.verse_list[self.current_index]['end'] + 1) == verse: self.verse_list[self.current_index]['end'] = verse else: - self.verse_list.append({'version': version, 'book': book, - 'chapter': chapter, 'start': verse, 'end': verse}) + self.verse_list.append({'version': version, 'book': book, 'chapter': chapter, 'start': verse, 'end': verse}) self.current_index += 1 def add_version(self, version, copyright, permission):