Browse Source

Sites use their own logger instead of sharing one with the toolset

tags/v0.1^2
Ben Kurtovic 12 years ago
parent
commit
dc82a2f8a6
5 changed files with 24 additions and 17 deletions
  1. +1
    -1
      earwigbot/bot.py
  2. +0
    -4
      earwigbot/wiki/__init__.py
  3. +13
    -5
      earwigbot/wiki/site.py
  4. +8
    -5
      earwigbot/wiki/sitesdb.py
  5. +2
    -2
      tests/__init__.py

+ 1
- 1
earwigbot/bot.py View File

@@ -57,7 +57,7 @@ class Bot(object):
self.logger = logging.getLogger("earwigbot")
self.commands = CommandManager(self)
self.tasks = TaskManager(self)
self.wiki = SitesDB(self.config)
self.wiki = SitesDB(self)
self.frontend = None
self.watcher = None



+ 0
- 4
earwigbot/wiki/__init__.py View File

@@ -35,10 +35,6 @@ add_site, and remove_site that should handle all of your Site (and thus, Page,
Category, and User) needs.
"""

import logging as _log
logger = _log.getLogger("earwigbot.wiki")
logger.addHandler(_log.NullHandler())

from earwigbot.wiki.category import *
from earwigbot.wiki.constants import *
from earwigbot.wiki.exceptions import *


+ 13
- 5
earwigbot/wiki/site.py View File

@@ -23,6 +23,7 @@
from cookielib import CookieJar
from gzip import GzipFile
from json import loads
from logging import getLogger, NullHandler
from os.path import expanduser
from re import escape as re_escape, match as re_match
from StringIO import StringIO
@@ -36,7 +37,6 @@ try:
except ImportError:
oursql = None

from earwigbot.wiki import logger
from earwigbot.wiki.category import Category
from earwigbot.wiki.constants import *
from earwigbot.wiki.exceptions import *
@@ -74,7 +74,7 @@ class Site(object):
article_path=None, script_path=None, sql=None,
namespaces=None, login=(None, None), cookiejar=None,
user_agent=None, use_https=False, assert_edit=None,
maxlag=None, wait_between_queries=5,
maxlag=None, wait_between_queries=5, logger=None,
search_config=(None, None)):
"""Constructor for new Site instances.

@@ -132,6 +132,13 @@ class Site(object):
# Get all of the above attributes that were not specified as arguments:
self._load_attributes()

# Set up our internal logger:
if logger:
self._logger = logger
else: # Just set up a null logger to eat up our messages:
self._logger = getLogger("earwigbot.wiki").getChild(self._name)
self._logger.addHandler(NullHandler())

# If we have a name/pass and the API says we're not logged in, log in:
self._login_info = name, password = login
if name and password:
@@ -193,12 +200,13 @@ class Site(object):
since_last_query = time() - self._last_query_time # Throttling support
if since_last_query < self._wait_between_queries:
wait_time = self._wait_between_queries - since_last_query
logger.debug("Throttled: waiting {0} seconds".format(wait_time))
log = "Throttled: waiting {0} seconds".format(wait_time)
self._logger.debug(log)
sleep(wait_time)
self._last_query_time = time()

url, data = self._build_api_query(params)
logger.debug("{0} -> {1}".format(url, data))
self._logger.debug("{0} -> {1}".format(url, data))

try:
response = self._opener.open(url, data)
@@ -263,7 +271,7 @@ class Site(object):
raise SiteAPIError(e.format(self._max_retries))
tries += 1
msg = 'Server says "{0}"; retrying in {1} seconds ({2}/{3})'
logger.info(msg.format(info, wait, tries, self._max_retries))
self._logger.info(msg.format(info, wait, tries, self._max_retries))
sleep(wait)
return self._api_query(params, tries=tries, wait=wait*3)
else: # Some unknown error occurred


+ 8
- 5
earwigbot/wiki/sitesdb.py View File

@@ -52,9 +52,10 @@ class SitesDB(object):
by importing the manager class (`from earwigbot.wiki import SitesDB`).
"""

def __init__(self, config):
"""Set up the manager with an attribute for the BotConfig object."""
self.config = config
def __init__(self, bot):
"""Set up the manager with an attribute for the base Bot object."""
self.config = bot.config
self._logger = bot.logger.getChild("wiki")
self._sites = {} # Internal site cache
self._sitesdb = path.join(config.root_dir, "sites.db")
self._cookie_file = path.join(config.root_dir, ".cookies")
@@ -173,6 +174,7 @@ class SitesDB(object):
assert_edit = config.wiki.get("assert")
maxlag = config.wiki.get("maxlag")
wait_between_queries = config.wiki.get("waitTime", 5)
logger = self._logger.getChild(name)
search_config = config.wiki.get("search")

if user_agent:
@@ -185,7 +187,7 @@ class SitesDB(object):
cookiejar=cookiejar, user_agent=user_agent,
use_https=use_https, assert_edit=assert_edit,
maxlag=maxlag, wait_between_queries=wait_between_queries,
search_config=search_config)
logger=logger, search_config=search_config)

def _get_site_name_from_sitesdb(self, project, lang):
"""Return the name of the first site with the given project and lang.
@@ -342,6 +344,7 @@ class SitesDB(object):
assert_edit = config.wiki.get("assert")
maxlag = config.wiki.get("maxlag")
wait_between_queries = config.wiki.get("waitTime", 5)
logger = self._logger.getChild(name)
search_config = config.wiki.get("search")

# Create a Site object to log in and load the other attributes:
@@ -349,7 +352,7 @@ class SitesDB(object):
login=login, cookiejar=cookiejar, user_agent=user_agent,
use_https=use_https, assert_edit=assert_edit,
maxlag=maxlag, wait_between_queries=wait_between_queries,
search_config=search_config)
logger=logger, search_config=search_config)

self._add_site_to_sitesdb(site)
self._sites[site.name()] = site


+ 2
- 2
tests/__init__.py View File

@@ -49,7 +49,7 @@ from earwigbot.commands import CommandManager
from earwigbot.config import BotConfig
from earwigbot.irc import IRCConnection, Data
from earwigbot.tasks import TaskManager
from earwigbot.wiki import SitesDBManager
from earwigbot.wiki import SitesDB

class CommandTestCase(TestCase):
re_sender = re.compile(":(.*?)!(.*?)@(.*?)\Z")
@@ -114,7 +114,7 @@ class FakeBot(Bot):
self.logger = logging.getLogger("earwigbot")
self.commands = CommandManager(self)
self.tasks = TaskManager(self)
self.wiki = SitesDBManager(self.config)
self.wiki = SitesDB(self)
self.frontend = FakeIRCConnection(self)
self.watcher = FakeIRCConnection(self)



Loading…
Cancel
Save