From 66898bad84f86dbdb693d0ef55ec8a2485aeb898 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Tue, 7 Jul 2009 22:18:36 +0200 Subject: [PATCH 1/2] Made some fixes to the common Bible import classes. --- openlp/plugins/bibles/lib/common.py | 159 ++++++++++++++++++---------- 1 file changed, 103 insertions(+), 56 deletions(-) diff --git a/openlp/plugins/bibles/lib/common.py b/openlp/plugins/bibles/lib/common.py index c63fc5e71..f8d37649e 100644 --- a/openlp/plugins/bibles/lib/common.py +++ b/openlp/plugins/bibles/lib/common.py @@ -19,93 +19,140 @@ import os import os.path import sys import urllib2 - +import chardet import logging class SearchResults: + """ + Encapsulate a set of search results. This is Bible-type independant. + """ def __init__(self, book, chapter, verselist): + """ + Create the search result object. + + ``book`` + The book of the Bible. + + ``chapter`` + The chapter of the book. + + ``verselist`` + The list of verses for this reading + """ self.book = book self.chapter = chapter self.verselist = verselist - def get_verselist(self): - return self.verselist - def get_book(self): - return self.book - def get_chapter(self): - return self.chapter - def has_verselist(self): - if self.verselist == {}: - return False - else: - return True -class BibleCommon: + def get_verselist(self): + """ + Returns the list of verses. + """ + return self.verselist + + def get_book(self): + """ + Returns the book of the Bible. + """ + return self.book + + def get_chapter(self): + """ + Returns the chapter of the book. + """ + return self.chapter + + def has_verselist(self): + """ + Returns whether or not the verse list contains verses. + """ + return len(self.verselist) > 0 + + +class BibleCommon(object): + """ + A common ancestor for bible download sites. + """ global log log = logging.getLogger(u'BibleCommon') log.info(u'BibleCommon') + def __init__(self): """ + An empty constructor... not sure why I'm here. """ + pass + def _get_web_text(self, urlstring, proxyurl): + """ + Get the HTML from the web page. + + ``urlstring`` + The URL of the page to open. + + ``proxyurl`` + The URL of a proxy server used to access the Internet. + """ log.debug(u'get_web_text %s %s', proxyurl, urlstring) - if not proxyurl == None: - proxy_support = urllib2.ProxyHandler({'http': self.proxyurl}) + if proxyurl is not None: + proxy_support = urllib2.ProxyHandler({'http': self.proxyurl}) http_support = urllib2.HTTPHandler() - opener= urllib2.build_opener(proxy_support, http_support) + opener = urllib2.build_opener(proxy_support, http_support) urllib2.install_opener(opener) xml_string = u'' req = urllib2.Request(urlstring) - req.add_header(u'User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)') + req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)') try: handle = urllib2.urlopen(req) - xml_string = unicode(handle.read()) + html = handle.read() + details = chardet.detect(html) + xml_string = unicode(html, details['encoding']) except IOError, e: if hasattr(e, u'reason'): - log.error(u'Reason : ') - log.error( e.reason) + log.error(u'Reason : %s', e.reason) return xml_string def _clean_text(self, text): """ - Clean up text and remove extra characters - after been downloaded from web + Clean up text and remove extra characters after been downloaded from + the Internet. + + ``text`` + The text from the web page that needs to be cleaned up. """ #return text.rstrip() # Remove Headings from the Text - i = text.find(u' -1: - j=text.find(u' -1: + end_tag = text.find(u'') - while x > -1: - y = text.find(u'') - text= text[:x] + text[y + 6:len(text)] - x = text.find(u'') - + start_tag = text.find(u'') + while start_tag > -1: + end_tag = text.find(u'') + text = text[:start_tag] + text[end_tag + 6:len(text)] + start_tag = text.find(u'') # Static Clean ups - text= text.replace(u'\n', u'') - text= text.replace(u'\r', u'') - text= text.replace(u' ', u'') - text= text.replace(u'

', u'') - text= text.replace(u'', u'') - text= text.replace(u'', u'') - text= text.replace(u'

', u'') - text= text.replace(u'

', u'') - text= text.replace(u'

', u'') - text= text.replace(u'
', u'') - text= text.replace(u'
', u'') - #text= text.replace(chr(189), u'1/2');print "l" - text= text.replace(u'"', "'") - text= text.replace(u''', "'") - - i = text.find(u'<') - while i > -1 : - j = text.find(u'>', i) - text= text[:i] + text[j+1:] - i = text.find(u'<') - - text= text.replace(u'>', u'') + text = text.replace(u'\n', u'') + text = text.replace(u'\r', u'') + text = text.replace(u' ', u'') + text = text.replace(u'

', u'') + text = text.replace(u'', u'') + text = text.replace(u'', u'') + text = text.replace(u'

', u'') + text = text.replace(u'

', u'') + text = text.replace(u'

', u'') + text = text.replace(u'
', u'') + text = text.replace(u'
', u'') + #text = text.replace(chr(189), u'1/2');print "l" + text = text.replace(u'"', u'\"') + text = text.replace(u''', u'\'') + # Remove some other tags + start_tag = text.find(u'<') + while start_tag > -1 : + end_tag = text.find(u'>', start_tag) + text = text[:start_tag] + text[end_tag + 1:] + start_tag = text.find(u'<') + text = text.replace(u'>', u'') return text.rstrip() + From f12949eb0ca70727e8728eba2048c576c6ac3cf5 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 8 Jul 2009 07:12:16 +0200 Subject: [PATCH 2/2] Fixed up a few logging things, a few bits of indentation, and resolved some conflicts from the last update. bzr-revno: 484 --- openlp/core/lib/pluginconfig.py | 2 +- openlp/core/lib/pluginmanager.py | 25 ++++++++++++++----- .../presentations/presentationplugin.py | 5 ++-- openlp/plugins/songs/lib/manager.py | 11 +++++--- 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/openlp/core/lib/pluginconfig.py b/openlp/core/lib/pluginconfig.py index e966fb2ed..519e4e255 100644 --- a/openlp/core/lib/pluginconfig.py +++ b/openlp/core/lib/pluginconfig.py @@ -51,7 +51,7 @@ class PluginConfig(object): return ConfigHelper.set_config(self.section, key, value) def get_data_path(self): - app_data = ConfigHelper.get_data_path() + #app_data = ConfigHelper.get_data_path() app_data = ConfigHelper.get_data_path() safe_name = self.section.replace(u' ',u'-') plugin_data = self.get_config(u'data path', safe_name) diff --git a/openlp/core/lib/pluginmanager.py b/openlp/core/lib/pluginmanager.py index 38cb9b477..b557400b9 100644 --- a/openlp/core/lib/pluginmanager.py +++ b/openlp/core/lib/pluginmanager.py @@ -53,7 +53,7 @@ class PluginManager(object): """ self.plugin_helpers = plugin_helpers startdepth = len(os.path.abspath(dir).split(os.sep)) - log.debug(u'find plugins %s at depth %d' %( unicode(dir), startdepth)) + log.debug(u'find plugins %s at depth %d', unicode(dir), startdepth) for root, dirs, files in os.walk(dir): for name in files: @@ -69,34 +69,46 @@ class PluginManager(object): modulename = modulename[len(prefix) + 1:] modulename = modulename.replace(os.path.sep, '.') # import the modules - log.debug(u'Importing %s from %s. Depth %d' % (modulename, path, thisdepth)) + log.debug(u'Importing %s from %s. Depth %d', modulename, path, thisdepth) try: __import__(modulename, globals(), locals(), []) except ImportError, e: - log.error(u'Failed to import module %s on path %s for reason %s', modulename, path, sys.exc_info()[1]) + log.error(u'Failed to import module %s on path %s for reason %s', modulename, path, e.args[0]) self.plugin_classes = Plugin.__subclasses__() self.plugins = [] plugin_objects = [] for p in self.plugin_classes: try: plugin = p(self.plugin_helpers) - log.debug(u'loaded plugin %s with helpers'%unicode(p)) + log.debug(u'loaded plugin %s with helpers', unicode(p)) log.debug(u'Plugin: %s', unicode(p)) if plugin.check_pre_conditions(): - log.debug(u'Appending %s ', unicode(p)) + log.debug(u'Appending %s ', unicode(p)) plugin_objects.append(plugin) eventmanager.register(plugin) except TypeError: - log.error(u'loaded plugin %s has no helpers'%unicode(p)) + log.error(u'loaded plugin %s has no helpers', unicode(p)) self.plugins = sorted(plugin_objects, self.order_by_weight) def order_by_weight(self, x, y): + """ + Sort two plugins and order them by their weight. + + ``x`` + The first plugin. + + ``y`` + The second plugin. + """ return cmp(x.weight, y.weight) def hook_media_manager(self, mediatoolbox): """ Loop through all the plugins. If a plugin has a valid media manager item, add it to the media manager. + + ``mediatoolbox`` + The Media Manager itself. """ for plugin in self.plugins: media_manager_item = plugin.get_media_manager_item() @@ -140,3 +152,4 @@ class PluginManager(object): """ for plugin in self.plugins: plugin.initialise() + diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index 1bc95ef26..42f5930bf 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -42,8 +42,8 @@ class PresentationPlugin(Plugin): QtGui.QIcon.Normal, QtGui.QIcon.Off) def get_settings_tab(self): - self.presentation_tab = PresentationTab() - return self.presentation_tab + #self.presentation_tab = PresentationTab() + return None #self.presentation_tab def get_media_manager_item(self): # Create the MediaManagerItem object @@ -54,3 +54,4 @@ class PresentationPlugin(Plugin): log.debug('check_pre_conditions') self.openoffice = Openoffice() return self.openoffice.checkOoPid() + diff --git a/openlp/plugins/songs/lib/manager.py b/openlp/plugins/songs/lib/manager.py index c4c7a1fa6..bfe795f6e 100644 --- a/openlp/plugins/songs/lib/manager.py +++ b/openlp/plugins/songs/lib/manager.py @@ -47,8 +47,7 @@ class SongManager(): self.db_url = u'' db_type = self.config.get_config(u'db type', u'sqlite') if db_type == u'sqlite': - self.db_url = u'sqlite:///' + self.config.get_data_path() + \ - u'/songs.sqlite' + self.db_url = u'sqlite:///%s/songs.sqlite' % self.config.get_data_path() else: self.db_url = db_type + 'u://' + \ self.config.get_config(u'db username') + u':' + \ @@ -73,13 +72,17 @@ class SongManager(): """ Searches the song title for keywords. """ - return self.session.query(Song).filter(Song.search_title.like(u'%' + keywords + u'%')).order_by(Song.search_title.asc()).all() + return self.session.query(Song).filter( + Song.search_title.like(u'%' + keywords + u'%')).order_by( + Song.search_title.asc()).all() def search_song_lyrics(self, keywords): """ Searches the song lyrics for keywords. """ - return self.session.query(Song).filter(Song.search_lyrics.like(u'%' + keywords + u'%')).order_by(Song.search_lyrics.asc()).all() + return self.session.query(Song).filter( + Song.search_lyrics.like(u'%' + keywords + u'%')).order_by( + Song.search_lyrics.asc()).all() def get_song_from_author(self, keywords): """