Revision: 6311 Author: russblau Date: 2009-01-29 20:08:52 +0000 (Thu, 29 Jan 2009)
Log Message: ----------- Output formatting tweaks.
Modified Paths: -------------- branches/rewrite/pywikibot/comms/http.py branches/rewrite/pywikibot/comms/threadedhttp.py branches/rewrite/pywikibot/config2.py branches/rewrite/pywikibot/data/api.py branches/rewrite/pywikibot/login.py branches/rewrite/pywikibot/page.py branches/rewrite/pywikibot/pagegenerators.py branches/rewrite/pywikibot/site.py
Modified: branches/rewrite/pywikibot/comms/http.py =================================================================== --- branches/rewrite/pywikibot/comms/http.py 2009-01-29 11:59:34 UTC (rev 6310) +++ branches/rewrite/pywikibot/comms/http.py 2009-01-29 20:08:52 UTC (rev 6311) @@ -27,7 +27,8 @@ import logging import atexit
-from pywikibot import config, VERBOSE +from pywikibot import config +import pywikibot import cookielib import threadedhttp
@@ -54,7 +55,8 @@
# Build up HttpProcessors -logger.log(VERBOSE, 'Starting %(numthreads)i threads...', locals()) +pywikibot.output('Starting %(numthreads)i threads...' % locals(), + level=pywikibot.VERBOSE) for i in range(numthreads): proc = threadedhttp.HttpProcessor(http_queue, cookie_jar, connection_pool) proc.setDaemon(True) @@ -65,7 +67,8 @@ def _flush(): for i in threads: http_queue.put(None) - logger.log(VERBOSE, 'Waiting for threads to finish... ') + pywikibot.output(u'Waiting for threads to finish... ', + level=pywikibot.VERBOSE) for i in threads: i.join() logger.debug('All threads finished.')
Modified: branches/rewrite/pywikibot/comms/threadedhttp.py =================================================================== --- branches/rewrite/pywikibot/comms/threadedhttp.py 2009-01-29 11:59:34 UTC (rev 6310) +++ branches/rewrite/pywikibot/comms/threadedhttp.py 2009-01-29 20:08:52 UTC (rev 6311) @@ -30,6 +30,8 @@ import cookielib import sys
+import pywikibot + logger = logging.getLogger("comms.threadedhttp")
@@ -37,8 +39,9 @@ try: import pkg_resources except ImportError: - logger.critical( - "Error: You need the python module setuptools to use this module") + pywikibot.output( + u"Error: You need the python module setuptools to use this module", + level=pywikibot.CRITICAL) sys.exit(1) pkg_resources.require("httplib2") import httplib2
Modified: branches/rewrite/pywikibot/config2.py =================================================================== --- branches/rewrite/pywikibot/config2.py 2009-01-29 11:59:34 UTC (rev 6310) +++ branches/rewrite/pywikibot/config2.py 2009-01-29 20:08:52 UTC (rev 6311) @@ -504,7 +504,7 @@ del nt,ot else: logger.warn( - "Configuration variable %(_key)r is defined but unknown. Misspelled?" + "Configuration variable %(_key)r is defined but unknown. Misspelled?\n" % locals())
# Fix up default console_encoding
Modified: branches/rewrite/pywikibot/data/api.py =================================================================== --- branches/rewrite/pywikibot/data/api.py 2009-01-29 11:59:34 UTC (rev 6310) +++ branches/rewrite/pywikibot/data/api.py 2009-01-29 20:08:52 UTC (rev 6311) @@ -172,7 +172,7 @@ self.params[key] = self.params[key].encode( self.site.encoding()) except Exception: - logger.exception("key=%s, params=%s" % (key, self.params[key])) + logger.exception("key=%s, params=%s\n" % (key, self.params[key])) params = urllib.urlencode(self.params) while True: # TODO catch http errors @@ -194,11 +194,14 @@ uri = uri + "?" + params rawdata = http.request(self.site, uri) except Exception, e: #TODO: what exceptions can occur here? - logger.warning(traceback.format_exc()) - logger.warning("%s, %s", uri, params) + pywikibot.output(traceback.format_exc(), + level=pywikibot.ERROR) + pywikibot.output("%s, %s" % (uri, params), + level=pywikibot.VERBOSE) self.wait() continue - logger.debug("API response received:\n%s", rawdata) + pywikibot.output("API response received:\n%s" % rawdata, + level=pywikibot.DEBUG) if not isinstance(rawdata, unicode): rawdata = rawdata.decode(self.site.encoding()) if rawdata.startswith(u"unknown_action"): @@ -208,10 +211,10 @@ except ValueError: # if the result isn't valid JSON, there must be a server # problem. Wait a few seconds and try again - logger.warning( + pywikibot.output( "Non-JSON response received from server %s; the server may be down." - % self.site) - logger.debug(rawdata) + % self.site, level=pywikibot.WARNING) + pywikibot.output(rawdata, level=pywikibot.DEBUG) self.wait() continue if not result: @@ -231,9 +234,10 @@ if "warnings" in result: modules = [k for k in result["warnings"] if k != "info"] for mod in modules: - logger.warning( - "API warning (%s): %s" - % (mod, result["warnings"][mod]["*"])) + pywikibot.output( + u"API warning (%s): %s" + % (mod, result["warnings"][mod]["*"]), + level=pywikibot.WARNING) if "error" not in result: return result if "*" in result["error"]: @@ -262,7 +266,9 @@ self.max_retries -= 1 if self.max_retries < 0: raise TimeoutError("Maximum retries attempted without success.") - logger.warn("Waiting %s seconds before retrying." % self.retry_wait) + pywikibot.output(u"Waiting %s seconds before retrying." + % self.retry_wait, + level=pywikibot.WARNING) time.sleep(self.retry_wait) # double the next wait, but do not exceed 120 seconds self.retry_wait = min(120, self.retry_wait * 2) @@ -354,8 +360,10 @@ else: self.query_limit = int(param["max"]) self.prefix = _modules[mod]["prefix"] - logger.debug("%s: Set query_limit to %i." - % (self.__class__.__name__, self.query_limit)) + pywikibot.output(u"%s: Set query_limit to %i." + % (self.__class__.__name__, + self.query_limit), + level=pywikibot.DEBUG) return
def __iter__(self): @@ -377,27 +385,31 @@ self.request[self.prefix+"limit"] = str(new_limit) self.data = self.request.submit() if not self.data or not isinstance(self.data, dict): - logger.debug( - "%s: stopped iteration because no dict retrieved from api." - % self.__class__.__name__) + pywikibot.output( + u"%s: stopped iteration because no dict retrieved from api." + % self.__class__.__name__, + level=pywikibot.DEBUG) return if not ("query" in self.data and self.resultkey in self.data["query"]): - logger.debug( -"%s: stopped iteration because 'query' and '%s' not found in api response.", - self.__class__.__name__, self.resultkey) - logger.debug(self.data) + pywikibot.output( +u"%s: stopped iteration because 'query' and '%s' not found in api response." + % (self.__class__.__name__, self.resultkey), + level=pywikibot.DEBUG) + pywikibot.output(unicode(self.data), level=pywikibot.DEBUG) return pagedata = self.data["query"][self.resultkey] if isinstance(pagedata, dict): - logger.debug("%s received %s; limit=%s" - % (self.__class__.__name__, pagedata.keys(), - self.limit)) + pywikibot.output(u"%s received %s; limit=%s" + % (self.__class__.__name__, pagedata.keys(), + self.limit), + level=pywikibot.DEBUG) pagedata = pagedata.values() else: - logger.debug("%s received %s; limit=%s" - % (self.__class__.__name__, pagedata, - self.limit)) + pywikibot.output(u"%s received %s; limit=%s" + % (self.__class__.__name__, pagedata, + self.limit), + level=pywikibot.DEBUG) for item in pagedata: yield self.result(item) count += 1
Modified: branches/rewrite/pywikibot/login.py =================================================================== --- branches/rewrite/pywikibot/login.py 2009-01-29 11:59:34 UTC (rev 6310) +++ branches/rewrite/pywikibot/login.py 2009-01-29 20:08:52 UTC (rev 6311) @@ -194,7 +194,8 @@ try: cookiedata = self.getCookie() except pywikibot.data.api.APIError, e: - logger.error("Login failed (%s).", e.code) + pywikibot.output("Login failed (%s)." % e.code, + level=pywikibot.ERROR) if retry: self.password = None return self.login(retry = True)
Modified: branches/rewrite/pywikibot/page.py =================================================================== --- branches/rewrite/pywikibot/page.py 2009-01-29 11:59:34 UTC (rev 6310) +++ branches/rewrite/pywikibot/page.py 2009-01-29 20:08:52 UTC (rev 6311) @@ -659,7 +659,7 @@ else: pywikibot.output("Page %s saved" % self.title(asLink=True)) except pywikibot.Error, err: - logger.exception("Error saving page %s" % self.title(asLink=True)) + logger.exception("Error saving page %s\n" % self.title(asLink=True)) if callback: callback(self, err)
@@ -1139,31 +1139,33 @@
def encoding(self): """DEPRECATED: use Site.encoding() instead""" - logger.debug(u"Page.encoding() is deprecated; use Site.encoding().") + pywikibot.output(u"Page.encoding() is deprecated; use Site.encoding().", + level=pywikibot.DEBUG) return self.site().encoding()
def titleWithoutNamespace(self, underscore=False): """DEPRECATED: use self.title(withNamespace=False) instead.""" - logger.debug( - u"Page.titleWithoutNamespace() method is deprecated.") + pywikibot.output(u"Page.titleWithoutNamespace() method is deprecated.", + level=pywikibot.DEBUG) return self.title(underscore=underscore, withNamespace=False, withSection=False)
def titleForFilename(self): """DEPRECATED: use self.title(as_filename=True) instead.""" - logger.debug( - u"Page.titleForFilename() method is deprecated.") + pywikibot.output(u"Page.titleForFilename() method is deprecated.", + level=pywikibot.DEBUG) return self.title(as_filename=True)
def sectionFreeTitle(self, underscore=False): """DEPRECATED: use self.title(withSection=False) instead.""" - logger.debug( - u"Page.sectionFreeTitle() method is deprecated.") + pywikibot.output(u"Page.sectionFreeTitle() method is deprecated.", + level=pywikibot.DEBUG) return self.title(underscore=underscore, withSection=False)
def aslink(self, forceInterwiki=False, textlink=False, noInterwiki=False): """DEPRECATED: use self.title(asLink=True) instead.""" - logger.debug(u"Page.aslink() method is deprecated.") + pywikibot.output(u"Page.aslink() method is deprecated.", + level=pywikibot.DEBUG) return self.title(asLink=True, forceInterwiki=forceInterwiki, allowInterwiki=not noInterwiki, textlink=textlink)
@@ -1173,7 +1175,8 @@ DEPRECATED: use self.title(asUrl=True) instead.
""" - logger.debug(u"Page.urlname() method is deprecated.") + pywikibot.output(u"Page.urlname() method is deprecated.", + level=pywikibot.DEBUG) return self.title(asUrl=True)
####### DISABLED METHODS (warnings provided) ###### @@ -1182,12 +1185,14 @@
def removeImage(self, image, put=False, summary=None, safe=True): """Old method to remove all instances of an image from page.""" - logger.warning(u"Page.removeImage() is no longer supported.") + pywikibot.output(u"Page.removeImage() is no longer supported.", + level=pywikibot.WARNING)
def replaceImage(self, image, replacement=None, put=False, summary=None, safe=True): """Old method to replace all instances of an image with another.""" - logger.warning(u"Page.replaceImage() is no longer supported.") + pywikibot.output(u"Page.replaceImage() is no longer supported.", + level=pywikibot.WARNING)
class ImagePage(Page): @@ -1250,8 +1255,9 @@
def getFileMd5Sum(self): """Return image file's MD5 checksum.""" - logger.debug( - "ImagePage.getFileMd5Sum() is deprecated; use getFileSHA1Sum().") + pywikibot.output( + u"ImagePage.getFileMd5Sum() is deprecated; use getFileSHA1Sum().", + level=pywikibot.DEBUG) # FIXME: MD5 might be performed on incomplete file due to server disconnection # (see bug #1795683). import md5, urllib @@ -1399,8 +1405,9 @@ catname = self.site().category_namespace() + ':' + catname targetCat = Category(self.site(), catname) if targetCat.exists(): - logger.warn('Target page %s already exists!' - % targetCat.title()) + pywikibot.output(u'Target page %s already exists!' + % targetCat.title(), + level=pywikibot.WARNING) return False else: pywikibot.output('Moving text from %s to %s.' @@ -1435,8 +1442,9 @@ catname = self.site().category_namespace() + ':' + catname targetCat = Category(self.site(), catname) if targetCat.exists(): - logger.warn('Target page %s already exists!' - % targetCat.title()) + pywikibot.output(u'Target page %s already exists!' + % targetCat.title(), + level=pywikibot.WARNING) return False else: pywikibot.output('Moving text from %s to %s.' @@ -1463,22 +1471,26 @@ #### DEPRECATED METHODS #### def subcategoriesList(self, recurse=False): """DEPRECATED: Equivalent to list(self.subcategories(...))""" - logger.debug("Category.subcategoriesList() method is deprecated.") + pywikibot.output(u"Category.subcategoriesList() method is deprecated.", + level=pywikibot.DEBUG) return sorted(list(set(self.subcategories(recurse))))
def articlesList(self, recurse=False): """DEPRECATED: equivalent to list(self.articles(...))""" - logger.debug("Category.articlesList() method is deprecated.") + pywikibot.output(u"Category.articlesList() method is deprecated.", + level=pywikibot.DEBUG) return sorted(list(set(self.articles(recurse))))
def supercategories(self): """DEPRECATED: equivalent to self.categories()""" - logger.debug("Category.supercategories() method is deprecated.") + pywikibot.output(u"Category.supercategories() method is deprecated.", + level=pywikibot.DEBUG) return self.categories()
def supercategoriesList(self): """DEPRECATED: equivalent to list(self.categories(...))""" - logger.debug("Category.articlesList() method is deprecated.") + pywikibot.output(u"Category.articlesList() method is deprecated.", + level=pywikibot.DEBUG) return sorted(list(set(self.categories())))
Modified: branches/rewrite/pywikibot/pagegenerators.py =================================================================== --- branches/rewrite/pywikibot/pagegenerators.py 2009-01-29 11:59:34 UTC (rev 6310) +++ branches/rewrite/pywikibot/pagegenerators.py 2009-01-29 20:08:52 UTC (rev 6311) @@ -167,7 +167,8 @@ gensList = CombinedPageGenerator(self.gens) genToReturn = DuplicateFilterPageGenerator(gensList) if self.namespaces: - genToReturn = NamespaceFilterPageGenerator(genToReturn, map(int, self.namespaces)) + genToReturn = NamespaceFilterPageGenerator( + genToReturn, map(int, self.namespaces)) return genToReturn
def getCategoryGen(self, arg, length, recurse = False):
Modified: branches/rewrite/pywikibot/site.py =================================================================== --- branches/rewrite/pywikibot/site.py 2009-01-29 11:59:34 UTC (rev 6310) +++ branches/rewrite/pywikibot/site.py 2009-01-29 20:08:52 UTC (rev 6311) @@ -1851,7 +1851,8 @@ srgen = api.PageGenerator("search", gsrsearch=searchstring, gsrwhat=where, site=self) if not namespaces: - logger.warning("search: namespaces cannot be empty; using [0].") + pywikibot.output(u"search: namespaces cannot be empty; using [0].", + level=pywikibot.WARNING) namespaces = [0] if isinstance(namespaces, list): srgen.request["gsrnamespace"] = u"|".join(unicode(ns) @@ -2219,21 +2220,24 @@ continue else: self.unlock_page(page) - logger.error( -"editpage: unknown CAPTCHA response %s, page not saved" - % captcha) + pywikibot.output( + u"editpage: unknown CAPTCHA response %s, page not saved" + % captcha, + level=pywikibot.ERROR) return False else: self.unlock_page(page) - logger.error("editpage: unknown failure reason %s" - % str(result)) + pywikibot.output(u"editpage: unknown failure reason %s" + % str(result), + level=pywikibot.ERROR) return False else: self.unlock_page(page) - logger.error( -"editpage: Unknown result code '%s' received; page not saved" - % result["edit"]["result"]) - logger.error(str(result)) + pywikibot.output( +u"editpage: Unknown result code '%s' received; page not saved" + % result["edit"]["result"], + level=pywikibot.ERROR) + pywikibot.output(str(result), level=pywikibot.VERBOSE) return False
# catalog of move errors for use in error messages @@ -2320,12 +2324,13 @@ finally: self.unlock_page(page) if "move" not in result: - logger.error("movepage: %s" % result) + pywikibot.output(u"movepage: %s" % result, level=pywikibot.ERROR) raise Error("movepage: unexpected response") # TODO: Check for talkmove-error messages if "talkmove-error-code" in result["move"]: - logger.warning(u"movepage: Talk page %s not moved" - % (page.toggleTalkPage().title(asLink=True))) + pywikibot.output(u"movepage: Talk page %s not moved" + % (page.toggleTalkPage().title(asLink=True)), + level=pywikibot.WARNING) return pywikibot.Page(page, newtitle)
# catalog of rollback errors for use in error messages