From 17df270bdf4b30b6ed3234df401e1bb011288f98 Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Sat, 6 May 2017 12:21:26 -0500 Subject: [PATCH] fix category class tagging --- earwigbot/tasks/wikiproject_tagger.py | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/earwigbot/tasks/wikiproject_tagger.py b/earwigbot/tasks/wikiproject_tagger.py index b53dcc5..97cbda3 100644 --- a/earwigbot/tasks/wikiproject_tagger.py +++ b/earwigbot/tasks/wikiproject_tagger.py @@ -68,8 +68,7 @@ class WikiProjectTagger(Task): recursively go through subcategories up to a maximum depth of ``NUM``, or if ``NUM`` isn't provided, go infinitely (this can be dangerous) ``--tag-categories`` - also tag category pages; will autoassess with ``|class=category`` if - ``--autoassess`` is given + also tag category pages ``--site SITE`` the ID of the site to tag pages on, defaulting to the default site ``--dry-run`` @@ -223,7 +222,7 @@ class WikiProjectTagger(Task): job.processed_cats.add(page.title) if job.tag_categories: - self.process_page(page, job, is_category=True) + self.process_page(page, job) for member in page.get_members(): if member.namespace == constants.NS_CATEGORY: if recursive is True: @@ -231,11 +230,11 @@ class WikiProjectTagger(Task): elif recursive > 0: self.process_category(member, job, recursive - 1) elif job.tag_categories: - self.process_page(member, job, is_category=True) + self.process_page(member, job) else: self.process_page(member, job) - def process_page(self, page, job, is_category=False): + def process_page(self, page, job): """Try to tag a specific *page* using the *job* description.""" if not page.is_talkpage: page = page.toggle_talk() @@ -281,7 +280,7 @@ class WikiProjectTagger(Task): if is_update: old_banner = unicode(banner) - self.update_banner(banner, job, code, is_category=is_category) + self.update_banner(banner, job, code) if banner == old_banner: log = u"Skipping page: [[%s]]; already tagged and no updates" self.logger.info(log, page.title) @@ -290,7 +289,7 @@ class WikiProjectTagger(Task): banner = banner.encode("utf8") else: self.logger.info(u"Tagging page: [[%s]]", page.title) - banner = self.make_banner(job, code, is_category=is_category) + banner = self.make_banner(job, code) shell = self.get_banner_shell(code) if shell: self.add_banner_to_shell(shell, banner) @@ -317,12 +316,11 @@ class WikiProjectTagger(Task): summary = job.summary.replace("$3", banner) page.edit(text, self.make_summary(summary), minor=True) - def make_banner(self, job, code=None, is_category=False): + def make_banner(self, job, code=None): """Return banner text to add based on a *job* and a page's *code*.""" banner = job.banner if code is not None and job.autoassess is not False: - assess, reason = self.get_autoassessment( - code, job.autoassess, is_category=is_category) + assess, reason = self.get_autoassessment(code, job.autoassess) if assess: banner += "|class=" + assess if reason: @@ -331,15 +329,14 @@ class WikiProjectTagger(Task): banner += "|" + "|".join(job.append.split(",")) return "{{" + banner + "}}" - def update_banner(self, banner, job, code, is_category=False): + def update_banner(self, banner, job, code): """Update an existing *banner* based on a *job* and a page's *code*.""" has = lambda key: (banner.has(key) and banner.get(key).value.strip() not in ("", "?")) if job.autoassess is not False: if not has("class"): - assess, reason = self.get_autoassessment( - code, job.autoassess, is_category=is_category) + assess, reason = self.get_autoassessment(code, job.autoassess) if assess: banner.add("class", assess) if reason: @@ -350,22 +347,18 @@ class WikiProjectTagger(Task): if not has(key): banner.add(key, value) - def get_autoassessment(self, code, only_classes=None, is_category=False): + def get_autoassessment(self, code, only_classes=None): """Get an autoassessment for a page. Return (assessed class as a string or None, assessment reason or None). """ if only_classes is None: - classnames = ["a", "b", "book", "c", "category", "dab", "fa", - "fl", "ga", "list", "redirect", "start", "stub", - "template"] + classnames = ["a", "b", "book", "c", "dab", "fa", "fl", "ga", + "list", "redirect", "start", "stub"] else: classnames = [klass.strip().lower() for klass in only_classes.split(",")] - if is_category: - return ("category" if "category" in classnames else None), None - classes = {klass: 0 for klass in classnames} for template in code.ifilter_templates(recursive=True): if template.has("class"):