From 7403edf2c043c940dcb21040d5cdbb63e45bad82 Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Sun, 13 Oct 2013 15:50:59 -0400 Subject: [PATCH] More work on afc_undated; fix a unicode bug in afc_dailycats. --- tasks/afc_dailycats.py | 4 +-- tasks/afc_undated.py | 75 +++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 70 insertions(+), 9 deletions(-) diff --git a/tasks/afc_dailycats.py b/tasks/afc_dailycats.py index 16cb6fa..e7d5c4c 100644 --- a/tasks/afc_dailycats.py +++ b/tasks/afc_dailycats.py @@ -57,6 +57,6 @@ class AFCDailyCats(Task): page = self.site.get_page(self.prefix + suffix) if page.exists == page.PAGE_MISSING: page.edit(self.content, self.summary.format(word)) - self.logger.info("Creating [[{0}]]".format(page.title)) + self.logger.info(u"Creating [[{0}]]".format(page.title)) else: - self.logger.debug("Skipping [[{0}]], exists".format(page.title)) + self.logger.debug(u"Skipping [[{0}]], exists".format(page.title)) diff --git a/tasks/afc_undated.py b/tasks/afc_undated.py index 24e2982..378b586 100644 --- a/tasks/afc_undated.py +++ b/tasks/afc_undated.py @@ -23,6 +23,7 @@ import mwparserfromhell from earwigbot.tasks import Task +from earwigbot.wiki.constants import * class AFCUndated(Task): """A task to clear [[Category:Undated AfC submissions]].""" @@ -34,12 +35,72 @@ class AFCUndated(Task): self.category = cfg.get("category", "Undated AfC submissions") default_summary = "Adding timestamp to undated [[WP:AFC|Articles for creation]] submission." self.summary = self.make_summary(cfg.get("summary", default_summary)) + self.namespaces = { + "submission": [NS_USER, NS_PROJECT, NS_PROJECT_TALK], + "talk": [NS_TALK, NS_FILE_TALK, NS_TEMPLATE_TALK, NS_HELP_TALK, + NS_CATEGORY_TALK] + } + self.aliases = {"submission": ["AFC submission"], "talk": ["WPAFC"]} def run(self, **kwargs): - counter = 0 - for page in cat: - if counter % 10: - if self.shutoff_enabled(): - return True - ### - counter += 1 + self.site = self.bot.wiki.get_site() + category = self.site.get_category(self.category) + logmsg = u"Undated category [[{0}]] has {1} members" + self.logger.info(logmsg.format(category.title, category.size)) + if category.size: + self.build_aliases() + counter = 0 + for page in category: + if counter % 10: + if self.shutoff_enabled(): + return + self.process_page(page) + counter += 1 + + def build_aliases(self): + """Build template name aliases for the AFC templates.""" + pass + + def process_page(self, page): + """Date the necessary templates inside a page object.""" + is_sub = page.namespace in self.namespaces["submission"] + is_talk = page.namespace in self.namespaces["talk"] + if is_sub: + aliases = self.aliases["subission"] + timestamp = self.get_timestamp(page) + elif is_talk: + aliases = self.aliases["talk"] + timestamp, reviewer = self.get_talkdata(page) + else: + msg = u"[[{0}]] is undated, but in a namespace we don't know how to process" + self.logger.warn(msg.format(page.title)) + return + + code = mwparserfromhell.parse(page.get()) + changes = 0 + for template in code.filter_templates(): + if template.name.matches(aliases) and not template.has("ts"): + template.add("ts", timestamp) + if is_talk and not template.has("reviewer"): + template.add("reviewer", reviewer) + changes += 1 + + if changes: + msg = u"Dating [[{0}]]: {1}x {2}" + self.logger.info(msg.format(page.title, changes, aliases[0])) + page.edit(unicode(code), self.summary) + else: + msg = u"[[{0}]] is undated, but I can't figure out what to replace" + self.logger.warn(msg.format(page.title)) + + def get_timestamp(self, page): + """Get the timestamp associated with a particular submission.""" + return timestamp + + def get_talkdata(self, page): + """Get the timestamp and reviewer associated with a talkpage. + + This is the mover for a normal article submission, and the uploader for + a file page. + """ + return timestamp, reviewer