浏览代码

Thanks, mwparserfromhell!

pull/15/head
Ben Kurtovic 10 年前
父节点
当前提交
c02f2dbc6e
共有 1 个文件被更改,包括 29 次插入60 次删除
  1. +29
    -60
      tasks/afc_statistics.py

+ 29
- 60
tasks/afc_statistics.py 查看文件

@@ -26,6 +26,7 @@ from os.path import expanduser
from threading import Lock
from time import sleep

import mwparserfromhell
import oursql

from earwigbot import exceptions
@@ -508,75 +509,43 @@ class AFCStatistics(Task):
idea :P).
"""
statuses = self.get_statuses(content)

if "R" in statuses:
status, chart = "r", self.CHART_REVIEW
if namespace == wiki.NS_MAIN:
if statuses:
return None, self.CHART_MISPLACE
return "a", self.CHART_ACCEPT
elif "R" in statuses:
return "r", self.CHART_REVIEW
elif "P" in statuses:
status, chart = "p", self.CHART_PEND
return "p", self.CHART_PEND
elif "T" in statuses:
status, chart = None, self.CHART_NONE
return None, self.CHART_NONE
elif "D" in statuses:
status, chart = "d", self.CHART_DECLINE
else:
status, chart = None, self.CHART_NONE

if namespace == wiki.NS_MAIN:
if not statuses:
status, chart = "a", self.CHART_ACCEPT
else:
status, chart = None, self.CHART_MISPLACE

return status, chart
return "d", self.CHART_DECLINE
return None, self.CHART_NONE

def get_statuses(self, content):
"""Return a list of all AFC submission statuses in a page's text."""
re_has_templates = "\{\{[aA][fF][cC] submission\s*(\}\}|\||/)"
re_template = "\{\{[aA][fF][cC] submission\s*(.*?)\}\}"
re_remove_embed = "(\{\{[aA][fF][cC] submission\s*(.*?))\{\{(.*?)\}\}(.*?)\}\}"
valid = ["R", "P", "T", "D"]
subtemps = {
"/reviewing": "R",
"/pending": "P",
"/draft": "T",
"/declined": "D"
valid = ["P", "R", "T", "D"]
aliases = {
"submit": "P",
"afc submission/submit": "P",
"afc submission/reviewing": "R",
"afc submission/pending": "P",
"afc submission/draft": "T",
"afc submission/declined": "D"
}
statuses = []

while re.search(re_has_templates, content):
status = "P"
match = re.search(re_template, content, re.S)
if not match:
return statuses
temp = match.group(1)
limit = 0
while "{{" in temp and limit < 50:
content = re.sub(re_remove_embed, "\\1\\4}}", content, 1, re.S)
match = re.search(re_template, content, re.S)
temp = match.group(1)
limit += 1
params = temp.split("|")
try:
subtemp, params = params[0].strip(), params[1:]
except IndexError:
status = "P"
params = []
else:
if subtemp:
status = subtemps.get(subtemp)
params = []
for param in params:
param = param.strip().upper()
if "=" in param:
key, value = param.split("=", 1)
if key.strip() == "1":
status = value if value in valid else "P"
break
code = mwparserfromhell.parse(content)
for template in code.filter_templates():
name = template.name.strip().lower()
if name == "afc submission":
if template.has(1):
status = template.get(1).value.strip().upper()
statuses.append(status if status in valid else "P")
else:
status = param if param in valid else "P"
break
statuses.append(status)
content = re.sub(re_template, "", content, 1, re.S)

statuses.append("P")
elif name in aliases:
statuses.append(aliases[name])
return statuses

def get_size(self, content):


正在加载...
取消
保存