Przeglądaj źródła

Cleanup; support shutoff.

tags/v0.1^2
Ben Kurtovic 12 lat temu
rodzic
commit
588d3fb696
1 zmienionych plików z 34 dodań i 9 usunięć
  1. +34
    -9
      earwigbot/tasks/wikiproject_tagger.py

+ 34
- 9
earwigbot/tasks/wikiproject_tagger.py Wyświetl plik

@@ -105,6 +105,7 @@ class WikiProjectTagger(Task):
self.logger.error(log)
return

site = self.bot.wiki.get_site(name=kwargs.get("site"))
banner = kwargs["banner"]
summary = kwargs.get("summary", "Adding WikiProject banner $3.")
append = kwargs.get("append")
@@ -115,11 +116,16 @@ class WikiProjectTagger(Task):
if not names:
return
job = _Job(banner, names, summary, append, autoassess, nocreate)
site = self.bot.wiki.get_site(name=kwargs.get("site"))

try:
self.run_job(kwargs, site, job, recursive)
except _ShutoffEnabled:
return

def run_job(self, kwargs, site, job, recursive):
if "category" in kwargs:
title = kwargs["category"]
title = self.guess_namespace(title, constants.NS_CATEGORY)
title = self.guess_namespace(site, title, constants.NS_CATEGORY)
self.process_category(site.get_page(title), job, recursive)

if "file" in kwargs:
@@ -135,7 +141,7 @@ class WikiProjectTagger(Task):
else:
self.process_page(page, job)

def guess_namespace(self, title, assumed):
def guess_namespace(self, site, title, assumed):
prefix = title.split(":", 1)[0]
if prefix == title:
return u":".join((site.namespace_id_to_name(assumed), title))
@@ -146,12 +152,12 @@ class WikiProjectTagger(Task):
return title

def get_names(self, site, banner):
title = self.guess_namespace(banner, constants.NS_TEMPLATE)
title = self.guess_namespace(site, banner, constants.NS_TEMPLATE)
if title == banner:
banner = banner.split(":", 1)[1]
page = site.get_page(title)
if page.exists != page.PAGE_EXISTS:
self.logger.error("Banner [[{0}]] does not exist".format(title))
self.logger.error(u"Banner [[{0}]] does not exist".format(title))
return banner, None

names = [banner] if banner == title else [banner, title]
@@ -162,12 +168,12 @@ class WikiProjectTagger(Task):
if backlink["ns"] == constants.NS_TEMPLATE:
names.append(backlink["title"].split(":", 1)[1])

log = "Found {0} aliases for banner [[{1}]]".format(len(names), title)
log = u"Found {0} aliases for banner [[{1}]]".format(len(names), title)
self.logger.debug(log)
return banner, names

def process_category(self, page, job, recursive):
self.logger.info("Processing category: [[{0]]".format(page.title))
self.logger.info(u"Processing category: [[{0]]".format(page.title))
for member in page.get_members():
if member.namespace == constants.NS_CATEGORY:
if recursive is True:
@@ -178,16 +184,21 @@ class WikiProjectTagger(Task):
self.process_page(member, job)

def process_page(self, page, job):
if job.counter % 10 == 0: # Do a shutoff check every ten pages
if self.shutoff_enabled(page.site):
raise _ShutoffEnabled()
job.counter += 1

if not page.is_talkpage:
page = page.toggle_talk()
try:
code = page.parse()
except exceptions.PageNotFoundError:
if job.nocreate:
log = "Skipping nonexistent page: [[{0}]]".format(page.title)
log = u"Skipping nonexistent page: [[{0}]]".format(page.title)
self.logger.info(log)
else:
log = "Tagging new page: [[{0}]]".format(page.title)
log = u"Tagging new page: [[{0}]]".format(page.title)
self.logger.info(log)
banner = "{{" + job.banner + job.append + "}}"
summary = job.summary.replace("$3", banner)
@@ -202,11 +213,18 @@ class WikiProjectTagger(Task):

text = unicode(code)
if page.get() != text:
self.logger.info(u"Tagging page: [[{0}]]".format(page.title))
summary = job.summary.replace("$3", banner)
page.edit(text, self.make_summary(summary))


class _Job(object):
"""Represents a single wikiproject-tagging task.

Stores information on the banner to add, the edit summary to use, whether
or not to autoassess and create new pages from scratch, and a counter of
the number of pages edited.
"""
def __init__(self, banner, names, summary, append, autoassess, nocreate):
self.banner = banner
self.names = names
@@ -214,3 +232,10 @@ class _Job(object):
self.append = append
self.autoassess = autoassess
self.nocreate = nocreate
self.counter = 0


class _ShutoffEnabled(Exception):
"""Raised by process_page() if shutoff is enabled. Caught by run(), which
will then stop the task."""
pass

Ładowanie…
Anuluj
Zapisz