@@ -21,6 +21,7 @@ | |||||
# SOFTWARE. | # SOFTWARE. | ||||
from hashlib import md5 | from hashlib import md5 | ||||
from logging import getLogger, NullHandler | |||||
import re | import re | ||||
from time import gmtime, strftime | from time import gmtime, strftime | ||||
from urllib import quote | from urllib import quote | ||||
@@ -82,7 +83,8 @@ class Page(CopyvioMixIn): | |||||
PAGE_MISSING = 2 | PAGE_MISSING = 2 | ||||
PAGE_EXISTS = 3 | PAGE_EXISTS = 3 | ||||
def __init__(self, site, title, follow_redirects=False, pageid=None): | |||||
def __init__(self, site, title, follow_redirects=False, pageid=None, | |||||
logger=None): | |||||
"""Constructor for new Page instances. | """Constructor for new Page instances. | ||||
Takes four arguments: a Site object, the Page's title (or pagename), | Takes four arguments: a Site object, the Page's title (or pagename), | ||||
@@ -101,6 +103,14 @@ class Page(CopyvioMixIn): | |||||
self._follow_redirects = self._keep_following = follow_redirects | self._follow_redirects = self._keep_following = follow_redirects | ||||
self._pageid = pageid | self._pageid = pageid | ||||
# 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") | |||||
self._logger.addHandler(NullHandler()) | |||||
# Attributes to be loaded through the API: | |||||
self._exists = self.PAGE_UNKNOWN | self._exists = self.PAGE_UNKNOWN | ||||
self._is_redirect = None | self._is_redirect = None | ||||
self._lastrevid = None | self._lastrevid = None | ||||
@@ -789,8 +789,9 @@ class Site(object): | |||||
prefix = title.split(":", 1)[0] | prefix = title.split(":", 1)[0] | ||||
if prefix != title: # Avoid a page that is simply "Category" | if prefix != title: # Avoid a page that is simply "Category" | ||||
if prefix in prefixes: | if prefix in prefixes: | ||||
return Category(self, title, follow_redirects, pageid) | |||||
return Page(self, title, follow_redirects, pageid) | |||||
return Category(self, title, follow_redirects, pageid, | |||||
self._logger) | |||||
return Page(self, title, follow_redirects, pageid, self._logger) | |||||
def get_category(self, catname, follow_redirects=False, pageid=None): | def get_category(self, catname, follow_redirects=False, pageid=None): | ||||
"""Return a :py:class:`Category` object for the given category name. | """Return a :py:class:`Category` object for the given category name. | ||||
@@ -802,7 +803,7 @@ class Site(object): | |||||
catname = self._unicodeify(catname) | catname = self._unicodeify(catname) | ||||
prefix = self.namespace_id_to_name(constants.NS_CATEGORY) | prefix = self.namespace_id_to_name(constants.NS_CATEGORY) | ||||
pagename = u':'.join((prefix, catname)) | pagename = u':'.join((prefix, catname)) | ||||
return Category(self, pagename, follow_redirects, pageid) | |||||
return Category(self, pagename, follow_redirects, pageid, self._logger) | |||||
def get_user(self, username=None): | def get_user(self, username=None): | ||||
"""Return a :py:class:`User` object for the given username. | """Return a :py:class:`User` object for the given username. | ||||
@@ -815,7 +816,7 @@ class Site(object): | |||||
username = self._unicodeify(username) | username = self._unicodeify(username) | ||||
else: | else: | ||||
username = self._get_username() | username = self._get_username() | ||||
return User(self, username) | |||||
return User(self, username, self._logger) | |||||
def delegate(self, services, args=None, kwargs=None): | def delegate(self, services, args=None, kwargs=None): | ||||
"""Delegate a task to either the API or SQL depending on conditions. | """Delegate a task to either the API or SQL depending on conditions. | ||||
@@ -20,6 +20,7 @@ | |||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
# SOFTWARE. | # SOFTWARE. | ||||
from logging import getLogger, NullHandler | |||||
from time import gmtime, strptime | from time import gmtime, strptime | ||||
from earwigbot.exceptions import UserNotFoundError | from earwigbot.exceptions import UserNotFoundError | ||||
@@ -60,7 +61,7 @@ class User(object): | |||||
talkpage | talkpage | ||||
""" | """ | ||||
def __init__(self, site, name): | |||||
def __init__(self, site, name, logger=None): | |||||
"""Constructor for new User instances. | """Constructor for new User instances. | ||||
Takes two arguments, a Site object (necessary for doing API queries), | Takes two arguments, a Site object (necessary for doing API queries), | ||||
@@ -76,6 +77,13 @@ class User(object): | |||||
self._site = site | self._site = site | ||||
self._name = name | self._name = name | ||||
# 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") | |||||
self._logger.addHandler(NullHandler()) | |||||
def __repr__(self): | def __repr__(self): | ||||
"""Return the canonical string representation of the User.""" | """Return the canonical string representation of the User.""" | ||||
return "User(name={0!r}, site={1!r})".format(self._name, self._site) | return "User(name={0!r}, site={1!r})".format(self._name, self._site) | ||||