def crosswalk_extract_books_test(self): """ Test Crosswalk retrieval of book list for NIV bible """ # GIVEN: A new Bible Gateway extraction class handler = CWExtract() # WHEN: The Books list is called books = handler.get_books_from_http('niv') # THEN: We should get back a valid service item assert len(books) == 66, 'The bible should not have had any books added or removed'
def crosswalk_extract_verse_test(self): """ Test Crosswalk retrieval of verse list for NIV bible John 3 """ # GIVEN: A new Bible Gateway extraction class handler = CWExtract() # WHEN: The Books list is called results = handler.get_bible_chapter('niv', 'john', 3) # THEN: We should get back a valid service item assert len(results.verse_list) == 36, 'The book of John should not have had any verses added or removed'
def crosswalk_get_bibles_test(self): """ Test getting list of bibles from Crosswalk.com """ # GIVEN: A new Crosswalk extraction class handler = CWExtract() # WHEN: downloading bible list from Crosswalk bibles = handler.get_bibles_from_http() # THEN: The list should not be None, and some known bibles should be there self.assertIsNotNone(bibles) self.assertIn(('Giovanni Diodati 1649 (Italian)', 'gdb', 'it'), bibles)
def on_web_update_button_clicked(self): """ Download list of bibles from Crosswalk, BibleServer and BibleGateway. """ # Download from Crosswalk, BiblesGateway, BibleServer self.web_bible_list = {} self.web_source_combo_box.setEnabled(False) self.web_translation_combo_box.setEnabled(False) self.web_update_button.setEnabled(False) self.web_progress_bar.setVisible(True) self.web_progress_bar.setValue(0) proxy_server = self.field('proxy_server') for (download_type, extractor) in ((WebDownload.Crosswalk, CWExtract(proxy_server)), (WebDownload.BibleGateway, BGExtract(proxy_server)), (WebDownload.Bibleserver, BSExtract(proxy_server))): try: bibles = extractor.get_bibles_from_http() except (urllib.error.URLError, ConnectionError) as err: critical_error_message_box(translate('BiblesPlugin.ImportWizardForm', 'Error during download'), translate('BiblesPlugin.ImportWizardForm', 'An error occurred while downloading the list of bibles from %s.')) bibles = None if bibles: self.web_bible_list[download_type] = {} for (bible_name, bible_key, language_code) in bibles: self.web_bible_list[download_type][bible_name] = (bible_key, language_code) self.web_progress_bar.setValue(download_type + 1) # Update combo box if something got into the list if self.web_bible_list: self.on_web_source_combo_box_index_changed(0) self.web_source_combo_box.setEnabled(True) self.web_translation_combo_box.setEnabled(True) self.web_update_button.setEnabled(True) self.web_progress_bar.setVisible(False)
def performWizard(self): """ Perform the actual upgrade. """ self.includeWebBible = False proxy_server = None if not self.files: self.progress_label.setText(translate('BiblesPlugin.UpgradeWizardForm', 'There are no Bibles that need to be upgraded.')) self.progress_bar.hide() return max_bibles = 0 for number, file in enumerate(self.files): if self.checkBox[number].checkState() == QtCore.Qt.Checked: max_bibles += 1 old_bible = None for number, filename in enumerate(self.files): # Close the previous bible's connection. if old_bible is not None: old_bible.close_connection() # Set to None to make obvious that we have already closed the # database. old_bible = None if self.stop_import_flag: self.success[number] = False break if not self.checkBox[number].checkState() == QtCore.Qt.Checked: self.success[number] = False continue self.progress_bar.reset() old_bible = OldBibleDB(self.media_item, path=self.temp_dir, file=filename[0]) name = filename[1] self.progress_label.setText(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading ...') % (number + 1, max_bibles, name)) self.new_bibles[number] = BibleDB(self.media_item, path=self.path, name=name, file=filename[0]) self.new_bibles[number].register(self.plugin.upgrade_wizard) metadata = old_bible.get_metadata() web_bible = False meta_data = {} for meta in metadata: # Upgrade the names of the metadata keys if meta['key'] == 'Version': meta['key'] = 'name' if meta['key'] == 'Bookname language': meta['key'] = 'book_name_language' meta['key'] = meta['key'].lower().replace(' ', '_') # Copy the metadata meta_data[meta['key']] = meta['value'] if meta['key'] != 'name' and meta['key'] != 'dbversion': self.new_bibles[number].save_meta(meta['key'], meta['value']) if meta['key'] == 'download_source': web_bible = True self.includeWebBible = True proxy_server = meta.get('proxy_server') if web_bible: if meta_data['download_source'].lower() == 'crosswalk': handler = CWExtract(proxy_server) elif meta_data['download_source'].lower() == 'biblegateway': handler = BGExtract(proxy_server) elif meta_data['download_source'].lower() == 'bibleserver': handler = BSExtract(proxy_server) books = handler.get_books_from_http(meta_data['download_name']) if not books: log.error('Upgrading books from %s - download name: "%s" failed' % ( meta_data['download_source'], meta_data['download_name'])) self.new_bibles[number].session.close() del self.new_bibles[number] critical_error_message_box( translate('BiblesPlugin.UpgradeWizardForm', 'Download Error'), translate('BiblesPlugin.UpgradeWizardForm', 'To upgrade your Web Bibles an Internet connection is required.')) self.increment_progress_bar(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) self.success[number] = False continue bible = BiblesResourcesDB.get_webbible( meta_data['download_name'], meta_data['download_source'].lower()) if bible and bible['language_id']: language_id = bible['language_id'] self.new_bibles[number].save_meta('language_id', language_id) else: language_id = self.new_bibles[number].get_language(name) if not language_id: log.warn('Upgrading from "%s" failed' % filename[0]) self.new_bibles[number].session.close() del self.new_bibles[number] self.increment_progress_bar(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) self.success[number] = False continue self.progress_bar.setMaximum(len(books)) for book in books: if self.stop_import_flag: self.success[number] = False break self.increment_progress_bar(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading %s ...') % (number + 1, max_bibles, name, book)) book_ref_id = self.new_bibles[number].\ get_book_ref_id_by_name(book, len(books), language_id) if not book_ref_id: log.warn('Upgrading books from %s - download name: "%s" aborted by user' % ( meta_data['download_source'], meta_data['download_name'])) self.new_bibles[number].session.close() del self.new_bibles[number] self.success[number] = False break book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) db_book = self.new_bibles[number].create_book(book, book_ref_id, book_details['testament_id']) # Try to import already downloaded verses. oldbook = old_bible.get_book(book) if oldbook: verses = old_bible.get_verses(oldbook['id']) if not verses: log.warn('No verses found to import for book "%s"', book) continue for verse in verses: if self.stop_import_flag: self.success[number] = False break self.new_bibles[number].create_verse(db_book.id, int(verse['chapter']), int(verse['verse']), str(verse['text'])) self.application.process_events() self.new_bibles[number].session.commit() else: language_id = self.new_bibles[number].get_object(BibleMeta, 'language_id') if not language_id: language_id = self.new_bibles[number].get_language(name) if not language_id: log.warn('Upgrading books from "%s" failed' % name) self.new_bibles[number].session.close() del self.new_bibles[number] self.increment_progress_bar(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) self.success[number] = False continue books = old_bible.get_books() self.progress_bar.setMaximum(len(books)) for book in books: if self.stop_import_flag: self.success[number] = False break self.increment_progress_bar(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading %s ...') % (number + 1, max_bibles, name, book['name'])) book_ref_id = self.new_bibles[number].get_book_ref_id_by_name(book['name'], len(books), language_id) if not book_ref_id: log.warn('Upgrading books from %s " failed - aborted by user' % name) self.new_bibles[number].session.close() del self.new_bibles[number] self.success[number] = False break book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) db_book = self.new_bibles[number].create_book(book['name'], book_ref_id, book_details['testament_id']) verses = old_bible.get_verses(book['id']) if not verses: log.warn('No verses found to import for book "%s"', book['name']) self.new_bibles[number].delete_book(db_book) continue for verse in verses: if self.stop_import_flag: self.success[number] = False break self.new_bibles[number].create_verse(db_book.id, int(verse['chapter']), int(verse['verse']), str(verse['text'])) self.application.process_events() self.new_bibles[number].session.commit() if not self.success.get(number, True): self.increment_progress_bar(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) else: self.success[number] = True self.new_bibles[number].save_meta('name', name) self.increment_progress_bar(translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nComplete') % (number + 1, max_bibles, name)) if number in self.new_bibles: self.new_bibles[number].session.close() # Close the last bible's connection if possible. if old_bible is not None: old_bible.close_connection()
def perform_wizard(self): """ Perform the actual upgrade. """ self.includeWebBible = False proxy_server = None if not self.files: self.progress_label.setText( translate('BiblesPlugin.UpgradeWizardForm', 'There are no Bibles that need to be upgraded.')) self.progress_bar.hide() return max_bibles = 0 for number, file in enumerate(self.files): if self.checkBox[number].checkState() == QtCore.Qt.Checked: max_bibles += 1 old_bible = None for number, filename in enumerate(self.files): # Close the previous bible's connection. if old_bible is not None: old_bible.close_connection() # Set to None to make obvious that we have already closed the # database. old_bible = None if self.stop_import_flag: self.success[number] = False break if not self.checkBox[number].checkState() == QtCore.Qt.Checked: self.success[number] = False continue self.progress_bar.reset() old_bible = OldBibleDB(self.media_item, path=self.temp_dir, file=filename[0]) name = filename[1] self.progress_label.setText( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading ...') % (number + 1, max_bibles, name)) self.new_bibles[number] = BibleDB(self.media_item, path=self.path, name=name, file=filename[0]) self.new_bibles[number].register(self.plugin.upgrade_wizard) metadata = old_bible.get_metadata() web_bible = False meta_data = {} for meta in metadata: # Upgrade the names of the metadata keys if meta['key'] == 'Version': meta['key'] = 'name' if meta['key'] == 'Bookname language': meta['key'] = 'book_name_language' meta['key'] = meta['key'].lower().replace(' ', '_') # Copy the metadata meta_data[meta['key']] = meta['value'] if meta['key'] != 'name' and meta['key'] != 'dbversion': self.new_bibles[number].save_meta(meta['key'], meta['value']) if meta['key'] == 'download_source': web_bible = True self.includeWebBible = True proxy_server = meta.get('proxy_server') if web_bible: if meta_data['download_source'].lower() == 'crosswalk': handler = CWExtract(proxy_server) elif meta_data['download_source'].lower() == 'biblegateway': handler = BGExtract(proxy_server) elif meta_data['download_source'].lower() == 'bibleserver': handler = BSExtract(proxy_server) books = handler.get_books_from_http(meta_data['download_name']) if not books: log.error( 'Upgrading books from %s - download name: "%s" failed' % (meta_data['download_source'], meta_data['download_name'])) self.new_bibles[number].session.close() del self.new_bibles[number] critical_error_message_box( translate('BiblesPlugin.UpgradeWizardForm', 'Download Error'), translate( 'BiblesPlugin.UpgradeWizardForm', 'To upgrade your Web Bibles an Internet connection is required.' )) self.increment_progress_bar( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) self.success[number] = False continue bible = BiblesResourcesDB.get_webbible( meta_data['download_name'], meta_data['download_source'].lower()) if bible and bible['language_id']: language_id = bible['language_id'] self.new_bibles[number].save_meta('language_id', language_id) else: language_id = self.new_bibles[number].get_language(name) if not language_id: log.warning('Upgrading from "%s" failed' % filename[0]) self.new_bibles[number].session.close() del self.new_bibles[number] self.increment_progress_bar( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) self.success[number] = False continue self.progress_bar.setMaximum(len(books)) for book in books: if self.stop_import_flag: self.success[number] = False break self.increment_progress_bar( translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading %s ...') % (number + 1, max_bibles, name, book)) book_ref_id = self.new_bibles[number].\ get_book_ref_id_by_name(book, len(books), language_id) if not book_ref_id: log.warning( 'Upgrading books from %s - download name: "%s" aborted by user' % (meta_data['download_source'], meta_data['download_name'])) self.new_bibles[number].session.close() del self.new_bibles[number] self.success[number] = False break book_details = BiblesResourcesDB.get_book_by_id( book_ref_id) db_book = self.new_bibles[number].create_book( book, book_ref_id, book_details['testament_id']) # Try to import already downloaded verses. oldbook = old_bible.get_book(book) if oldbook: verses = old_bible.get_verses(oldbook['id']) if not verses: log.warning( 'No verses found to import for book "%s"', book) continue for verse in verses: if self.stop_import_flag: self.success[number] = False break self.new_bibles[number].create_verse( db_book.id, int(verse['chapter']), int(verse['verse']), str(verse['text'])) self.application.process_events() self.new_bibles[number].session.commit() else: language_id = self.new_bibles[number].get_object( BibleMeta, 'language_id') if not language_id: language_id = self.new_bibles[number].get_language(name) if not language_id: log.warning('Upgrading books from "%s" failed' % name) self.new_bibles[number].session.close() del self.new_bibles[number] self.increment_progress_bar( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) self.success[number] = False continue books = old_bible.get_books() self.progress_bar.setMaximum(len(books)) for book in books: if self.stop_import_flag: self.success[number] = False break self.increment_progress_bar( translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nUpgrading %s ...') % (number + 1, max_bibles, name, book['name'])) book_ref_id = self.new_bibles[ number].get_book_ref_id_by_name( book['name'], len(books), language_id) if not book_ref_id: log.warning( 'Upgrading books from %s " failed - aborted by user' % name) self.new_bibles[number].session.close() del self.new_bibles[number] self.success[number] = False break book_details = BiblesResourcesDB.get_book_by_id( book_ref_id) db_book = self.new_bibles[number].create_book( book['name'], book_ref_id, book_details['testament_id']) verses = old_bible.get_verses(book['id']) if not verses: log.warning('No verses found to import for book "%s"', book['name']) self.new_bibles[number].delete_book(db_book) continue for verse in verses: if self.stop_import_flag: self.success[number] = False break self.new_bibles[number].create_verse( db_book.id, int(verse['chapter']), int(verse['verse']), str(verse['text'])) self.application.process_events() self.new_bibles[number].session.commit() if not self.success.get(number, True): self.increment_progress_bar( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed') % (number + 1, max_bibles, name), self.progress_bar.maximum() - self.progress_bar.value()) else: self.success[number] = True self.new_bibles[number].save_meta('name', name) self.increment_progress_bar( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nComplete') % (number + 1, max_bibles, name)) if number in self.new_bibles: self.new_bibles[number].session.close() # Close the last bible's connection if possible. if old_bible is not None: old_bible.close_connection()