@@ -11,7 +11,7 @@ one that contains its config file). | |||
IRC Commands | |||
------------ | |||
- **AFC-related commands** (*afc_pending*, *afc_report*, *afc_status*, | |||
- **AfC-related commands** (*afc_pending*, *afc_report*, *afc_status*, | |||
*afc_submissions*): implements various services for | |||
[Articles for creation](http://en.wikipedia.org/wiki/WP:AFC). It has no | |||
dependencies, but `afc_report` requires the `afc_statistics` task plugin for | |||
@@ -67,24 +67,24 @@ Bot Tasks | |||
--------- | |||
- **afc_catdelink**: delinks mainspace categories (or templates, if necessary) | |||
in declined [AFC](http://en.wikipedia.org/wiki/WP:AFC) submissions. | |||
in declined [AfC](http://en.wikipedia.org/wiki/WP:AFC) submissions. | |||
- **afc_copyvios**: checks newly-edited AFC submissions for copyright | |||
- **afc_copyvios**: checks newly-edited AfC submissions for copyright | |||
violations using the bot's built-in copyvio checking support. Takes multiple | |||
config values, including connection info for a MySQL database to store | |||
processed pages and a cache (disabled by default; usable by the | |||
[web interface](https://tools.wmflabs.org/copyvios)). A script to create the | |||
database is in `tasks/schema/afc_copyvios.sql`. | |||
- **afc_dailycats**: creates daily, monthly, and yearly categories for AFC. | |||
- **afc_dailycats**: creates daily, monthly, and yearly categories for AfC. | |||
- **afc_history**: generates charts about AFC submissions over time, including | |||
- **afc_history**: generates charts about AfC submissions over time, including | |||
number of pending submissions throughout the project's history as well as | |||
counts for individual reviewers. Takes multiple config values, including | |||
MySQL database info. A script to create the database is in | |||
`tasks/schema/afc_history.sql`. | |||
- **afc_statistics**: generates statistics for AFC on the current number of | |||
- **afc_statistics**: generates statistics for AfC on the current number of | |||
pending submissions and recently declined or accepted ones. Takes multiple | |||
config values, including MySQL database info. A script to create the database | |||
is in `tasks/schema/afc_statistics.sql`. | |||
@@ -22,8 +22,8 @@ | |||
from earwigbot.commands import Command | |||
class AFCPending(Command): | |||
"""Link the user to the pending AFC submissions page and category.""" | |||
class AfCPending(Command): | |||
"""Link the user to the pending AfC submissions page and category.""" | |||
name = "pending" | |||
commands = ["pending", "pend"] | |||
@@ -23,8 +23,8 @@ | |||
from earwigbot import wiki | |||
from earwigbot.commands import Command | |||
class AFCReport(Command): | |||
"""Get information about an AFC submission by name.""" | |||
class AfCReport(Command): | |||
"""Get information about an AfC submission by name.""" | |||
name = "report" | |||
def process(self, data): | |||
@@ -24,7 +24,7 @@ import re | |||
from earwigbot.commands import Command | |||
class AFCStatus(Command): | |||
class AfCStatus(Command): | |||
"""Get the number of pending AfC submissions, open redirect requests, and | |||
open file upload requests.""" | |||
name = "status" | |||
@@ -143,7 +143,7 @@ class AFCStatus(Command): | |||
return self.site.get_category(catname).pages | |||
def count_submissions(self): | |||
"""Returns the number of open AFC submissions (count of CAT:PEND).""" | |||
"""Returns the number of open AfC submissions (count of CAT:PEND).""" | |||
minus = len(self.ignore_list) | |||
return self.site.get_category("Pending AfC submissions").pages - minus | |||
@@ -167,9 +167,9 @@ class AFCStatus(Command): | |||
return files | |||
def get_aggregate(self, num): | |||
"""Returns a human-readable AFC status based on the number of pending | |||
AFC submissions, open redirect requests, and open FFU requests. This | |||
does not match {{AFC status}} directly because the algorithm factors in | |||
"""Returns a human-readable AfC status based on the number of pending | |||
AfC submissions, open redirect requests, and open FFU requests. This | |||
does not match {{AfC status}} directly because the algorithm factors in | |||
WP:AFC/R and WP:FFU while the template only looks at the main | |||
submissions. The reasoning is that AFC/R and FFU are still part of | |||
the project, so even if there are no pending submissions, a backlog at | |||
@@ -23,8 +23,8 @@ | |||
from earwigbot import wiki | |||
from earwigbot.commands import Command | |||
class AFCSubmissions(Command): | |||
"""Link the user directly to some pending AFC submissions.""" | |||
class AfCSubmissions(Command): | |||
"""Link the user directly to some pending AfC submissions.""" | |||
name = "submissions" | |||
commands = ["submissions", "subs"] | |||
@@ -22,7 +22,7 @@ | |||
from earwigbot.tasks import Task | |||
class AFCCatDelink(Task): | |||
class AfCCatDelink(Task): | |||
"""A task to delink mainspace categories in declined [[WP:AFC]] | |||
submissions.""" | |||
name = "afc_catdelink" | |||
@@ -30,7 +30,7 @@ import oursql | |||
from earwigbot.tasks import Task | |||
class AFCCopyvios(Task): | |||
class AfCCopyvios(Task): | |||
"""A task to check newly-edited [[WP:AFC]] submissions for copyright | |||
violations.""" | |||
name = "afc_copyvios" | |||
@@ -153,7 +153,7 @@ class AFCCopyvios(Task): | |||
return tag | |||
def is_pending(self, code): | |||
"""Return whether a page is a pending AFC submission.""" | |||
"""Return whether a page is a pending AfC submission.""" | |||
other_statuses = ["r", "t", "d"] | |||
tmpls = ["submit", "afc submission/submit", "afc submission/pending"] | |||
for template in code.ifilter_templates(): | |||
@@ -24,7 +24,7 @@ from datetime import datetime, timedelta | |||
from earwigbot.tasks import Task | |||
class AFCDailyCats(Task): | |||
class AfCDailyCats(Task): | |||
"""A task to create daily categories for [[WP:AFC]].""" | |||
name = "afc_dailycats" | |||
number = 3 | |||
@@ -32,7 +32,7 @@ class AFCDailyCats(Task): | |||
def setup(self): | |||
cfg = self.config.tasks.get(self.name, {}) | |||
self.prefix = cfg.get("prefix", "Category:AfC submissions by date/") | |||
self.content = cfg.get("content", "{{AFC submission category header}}") | |||
self.content = cfg.get("content", "{{AfC submission category header}}") | |||
default_summary = "Creating {0} category page for [[WP:AFC|Articles for creation]]." | |||
self.summary = self.make_summary(cfg.get("summary", default_summary)) | |||
@@ -22,7 +22,7 @@ | |||
from earwigbot.tasks import Task | |||
class AFCHistory(Task): | |||
class AfCHistory(Task): | |||
"""A task to generate information about AfC submissions over time.""" | |||
name = "afc_history" | |||
@@ -37,7 +37,7 @@ from earwigbot.tasks import Task | |||
_DEFAULT_PAGE_TEXT = """<noinclude><!-- You can edit anything on this page \ | |||
except for content inside of <!-- stat begin/end -> and <!-- sig begin/end -> \ | |||
without causing problems. Most of the chart can be modified by editing the \ | |||
templates it uses, documented in [[Template:AFC statistics/doc]]. --> | |||
templates it uses, documented in [[Template:AfC statistics/doc]]. --> | |||
{{NOINDEX}}</noinclude>\ | |||
<!-- stat begin --><!-- stat end --> | |||
<span style="font-style: italic; font-size: 85%%;">Last updated by \ | |||
@@ -47,13 +47,13 @@ templates it uses, documented in [[Template:AFC statistics/doc]]. --> | |||
_PER_CHART_LIMIT = 1000 | |||
class AFCStatistics(Task): | |||
class AfCStatistics(Task): | |||
"""A task to generate statistics for WikiProject Articles for Creation. | |||
Statistics are stored in a MySQL database ("u_earwig_afc_statistics") | |||
accessed with oursql. Statistics are synchronied with the live database | |||
every four minutes and saved once an hour, on the hour, to subpages of | |||
self.pageroot. In the live bot, this is "Template:AFC statistics". | |||
self.pageroot. In the live bot, this is "Template:AfC statistics". | |||
""" | |||
name = "afc_statistics" | |||
number = 2 | |||
@@ -72,7 +72,7 @@ class AFCStatistics(Task): | |||
self.revision_cache = {} | |||
# Set some wiki-related attributes: | |||
self.pageroot = cfg.get("page", "Template:AFC statistics") | |||
self.pageroot = cfg.get("page", "Template:AfC statistics") | |||
self.pending_cat = cfg.get("pending", "Pending AfC submissions") | |||
self.ignore_list = cfg.get("ignoreList", []) | |||
default_summary = "Updating statistics for [[WP:WPAFC|WikiProject Articles for creation]]." | |||
@@ -80,9 +80,9 @@ class AFCStatistics(Task): | |||
# Templates used in chart generation: | |||
templates = cfg.get("templates", {}) | |||
self.tl_header = templates.get("header", "AFC statistics/header") | |||
self.tl_header = templates.get("header", "AfC statistics/header") | |||
self.tl_row = templates.get("row", "#invoke:AfC|row") | |||
self.tl_footer = templates.get("footer", "AFC statistics/footer") | |||
self.tl_footer = templates.get("footer", "AfC statistics/footer") | |||
# Connection data for our SQL database: | |||
kwargs = cfg.get("sql", {}) | |||
@@ -544,12 +544,12 @@ class AFCStatistics(Task): | |||
return content | |||
def _get_status_and_chart(self, content, namespace): | |||
"""Determine the status and chart number of an AFC submission. | |||
"""Determine the status and chart number of an AfC submission. | |||
The methodology used here is the same one I've been using for years | |||
(see also commands.afc_report), but with the new draft system taken | |||
into account. The order here is important: if there is more than one | |||
{{AFC submission}} template on a page, we need to know which one to | |||
{{AfC submission}} template on a page, we need to know which one to | |||
use (revision history search to find the most recent isn't a viable | |||
idea :P). | |||
""" | |||
@@ -569,7 +569,7 @@ class AFCStatistics(Task): | |||
return None, self.CHART_NONE | |||
def get_statuses(self, content): | |||
"""Return a list of all AFC submission statuses in a page's text.""" | |||
"""Return a list of all AfC submission statuses in a page's text.""" | |||
valid = ["P", "R", "T", "D"] | |||
aliases = { | |||
"submit": "P", | |||
@@ -29,7 +29,7 @@ from earwigbot.wiki.constants import * | |||
NS_DRAFT = 118 | |||
class AFCUndated(Task): | |||
class AfCUndated(Task): | |||
"""A task to clear [[Category:Undated AfC submissions]].""" | |||
name = "afc_undated" | |||
number = 5 | |||
@@ -45,7 +45,7 @@ class AFCUndated(Task): | |||
NS_CATEGORY_TALK] | |||
} | |||
self.aliases = { | |||
"submission": ["AFC submission"], | |||
"submission": ["AfC submission"], | |||
"talk": ["WikiProject Articles for creation"] | |||
} | |||
@@ -72,7 +72,7 @@ class AFCUndated(Task): | |||
counter += 1 | |||
def _build_aliases(self): | |||
"""Build template name aliases for the AFC templates.""" | |||
"""Build template name aliases for the AfC templates.""" | |||
for key in self.aliases: | |||
base = self.aliases[key][0] | |||
aliases = [base, "Template:" + base] | |||