Преглед на файлове

Fixes in Unicode, status determination; removed created.

tags/v0.1^2
Ben Kurtovic преди 13 години
родител
ревизия
1c850764d7
променени са 1 файла, в които са добавени 35 реда и са изтрити 36 реда
  1. +35
    -36
      bot/tasks/afc_statistics.py

+ 35
- 36
bot/tasks/afc_statistics.py Целия файл

@@ -143,18 +143,14 @@ class Task(BaseTask):
table, where keys are column names and values are their cell contents. table, where keys are column names and values are their cell contents.
""" """
row = "{0}|s={page_status}|t={page_title}|h={page_short}|z={page_size}|" row = "{0}|s={page_status}|t={page_title}|h={page_short}|z={page_size}|"
row += "cr={page_create_user}|cd={page_create_time}|ci={page_create_oldid}|"
row += "sr={page_special_user}|sd={page_special_time}|si={page_special_oldid}"
row += "mr={page_modify_user}|md={page_modify_time}|mi={page_modify_oldid}|" row += "mr={page_modify_user}|md={page_modify_time}|mi={page_modify_oldid}|"


page["page_create_time"] = self.format_time(page["page_create_time"])
page["page_special_time"] = self.format_time(page["page_special_time"])
page["page_modify_time"] = self.format_time(page["page_modify_time"]) page["page_modify_time"] = self.format_time(page["page_modify_time"])


if page["page_special_user"]:
row += "sr={page_special_user}|sd={page_special_time}|si={page_special_oldid}|"
page["page_special_time"] = self.format_time(page["page_special_time"])

if page["page_notes"]: if page["page_notes"]:
row += "n=1{page_notes}"
row += "|n=1{page_notes}"


return "".join(("{{", row.format(self.tl_row, **page), "}}")) return "".join(("{{", row.format(self.tl_row, **page), "}}"))


@@ -313,18 +309,17 @@ class Task(BaseTask):


short = self.get_short_title(title) short = self.get_short_title(title)
size = self.get_size(content) size = self.get_size(content)
c_user, c_time, c_id = self.get_create(pageid)
m_user, m_time, m_id = self.get_modify(pageid) m_user, m_time, m_id = self.get_modify(pageid)
s_user, s_time, s_id = self.get_special(pageid, chart) s_user, s_time, s_id = self.get_special(pageid, chart)
notes = self.get_notes(chart, content, m_time, c_user)
notes = self.get_notes(chart, content, m_time, s_user)


query1 = "INSERT INTO row VALUES (?, ?)" query1 = "INSERT INTO row VALUES (?, ?)"
query2 = "INSERT INTO page VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
query2 = "INSERT INTO page VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
cursor.execute(query1, (pageid, chart)) cursor.execute(query1, (pageid, chart))
cursor.execute(query2, (pageid, status, title.decode("utf8"), cursor.execute(query2, (pageid, status, title.decode("utf8"),
short.decode("utf8"), size, notes, c_user,
c_time, c_id, m_user, m_time, m_id, s_user,
s_time, s_id))
short.decode("utf8"), size, notes,
m_user.decode("utf8"), m_time, m_id,
s_user.decode("utf8"), s_time, s_id))


def update_page(self, cursor, pageid, title): def update_page(self, cursor, pageid, title):
"""Update hook for when page is already in our database. """Update hook for when page is already in our database.
@@ -352,7 +347,7 @@ class Task(BaseTask):


size = self.get_size(content) size = self.get_size(content)
m_user, m_time, m_id = self.get_modify(pageid) m_user, m_time, m_id = self.get_modify(pageid)
notes = self.get_notes(chart, content, m_time, result["page_create_user"])
notes = self.get_notes(chart, content, m_time, result["page_special_user"])


if title != result["page_title"]: if title != result["page_title"]:
self.update_page_title(cursor, result, pageid, title) self.update_page_title(cursor, result, pageid, title)
@@ -380,7 +375,8 @@ class Task(BaseTask):
query = """UPDATE page SET page_size = ?, page_modify_user = ?, query = """UPDATE page SET page_size = ?, page_modify_user = ?,
page_modify_time = ?, page_modify_oldid = ? page_modify_time = ?, page_modify_oldid = ?
WHERE page_id = ?""" WHERE page_id = ?"""
cursor.execute(query, (size, m_user, m_time, m_id, pageid))
cursor.execute(query, (size, m_user.decode("utf8"), m_time, m_id,
pageid))


msg = " {0}: modify: {1} / {2} / {3} -> {4} / {5} / {6}" msg = " {0}: modify: {1} / {2} / {3} -> {4} / {5} / {6}"
msg = msg.format(pageid, result["page_modify_user"], msg = msg.format(pageid, result["page_modify_user"],
@@ -404,7 +400,8 @@ class Task(BaseTask):
s_user, s_time, s_id = self.get_special(pageid, chart) s_user, s_time, s_id = self.get_special(pageid, chart)


if s_id != result["page_special_oldid"]: if s_id != result["page_special_oldid"]:
cursor.execute(query2, (s_user, s_time, s_id, pageid))
cursor.execute(query2, (s_user.decode("utf8"), s_time, s_id,
pageid))
msg = "{0}: special: {1} / {2} / {3} -> {4} / {5} / {6}" msg = "{0}: special: {1} / {2} / {3} -> {4} / {5} / {6}"
msg = msg.format(pageid, result["page_special_user"], msg = msg.format(pageid, result["page_special_user"],
result["page_special_time"], result["page_special_time"],
@@ -477,14 +474,14 @@ class Task(BaseTask):
elif "P" in statuses: elif "P" in statuses:
status, chart = "p", CHART_PEND status, chart = "p", CHART_PEND
elif "T" in statuses: elif "T" in statuses:
status, chart = None, CHART_MISPLACE
status, chart = None, CHART_NONE
elif "D" in statuses: elif "D" in statuses:
status, chart = "d", CHART_DECLINE status, chart = "d", CHART_DECLINE
else: else:
status, chart = None, CHART_NONE status, chart = None, CHART_NONE


if namespace == wiki.NS_MAIN: if namespace == wiki.NS_MAIN:
if chart == CHART_NONE:
if not statuses:
status, chart = "a", CHART_ACCEPT status, chart = "a", CHART_ACCEPT
else: else:
status, chart = None, CHART_MISPLACE status, chart = None, CHART_MISPLACE
@@ -559,19 +556,6 @@ class Task(BaseTask):
"""Return a page's size in a short, pretty format.""" """Return a page's size in a short, pretty format."""
return "{0} kB".format(round(len(content) / 1000.0, 2)) return "{0} kB".format(round(len(content) / 1000.0, 2))


def get_create(self, pageid):
"""Return information about a page's first edit ("creation").

This consists of the page creator, creation time, and the earliest
revision ID.
"""
query = """SELECT rev_user_text, rev_timestamp, rev_id
FROM revision WHERE rev_id =
(SELECT MIN(rev_id) FROM revision WHERE rev_page = ?)"""
result = self.site.sql_query(query, (pageid,))
c_user, c_time, c_id = list(result)[0]
return c_user, datetime.strptime(c_time, "%Y%m%d%H%M%S"), c_id

def get_modify(self, pageid): def get_modify(self, pageid):
"""Return information about a page's last edit ("modification"). """Return information about a page's last edit ("modification").


@@ -590,8 +574,8 @@ class Task(BaseTask):
I tend to use the term "special" as a verb a lot, which is bound to I tend to use the term "special" as a verb a lot, which is bound to
cause confusion. It is merely a short way of saying "the edit in which cause confusion. It is merely a short way of saying "the edit in which
a declined submission was declined, an accepted submission was a declined submission was declined, an accepted submission was
accepted, a submission in review was set as such, and a pending draft
was submitted."
accepted, a submission in review was set as such, a pending submission
was submitted, and a "misplaced" submission was created."


This "information" consists of the special edit's editor, its time, and This "information" consists of the special edit's editor, its time, and
its revision ID. If the page's status is not something that involves its revision ID. If the page's status is not something that involves
@@ -599,8 +583,10 @@ class Task(BaseTask):
returned if we cannot determine when the page was "special"-ed, or if returned if we cannot determine when the page was "special"-ed, or if
it was "special"-ed more than 250 edits ago. it was "special"-ed more than 250 edits ago.
""" """
if chart in [CHART_NONE, CHART_MISPLACE]:
if chart ==CHART_NONE:
return None, None, None return None, None, None
elif chart == CHART_MISPLACE:
return self.get_create(pageid)
elif chart == CHART_ACCEPT: elif chart == CHART_ACCEPT:
search_for = None search_for = None
search_not = ["R", "H", "P", "T", "D"] search_not = ["R", "H", "P", "T", "D"]
@@ -642,7 +628,20 @@ class Task(BaseTask):


return last return last


def get_notes(self, chart, content, m_time, c_user):
def get_create(self, pageid):
"""Return information about a page's first edit ("creation").

This consists of the page creator, creation time, and the earliest
revision ID.
"""
query = """SELECT rev_user_text, rev_timestamp, rev_id
FROM revision WHERE rev_id =
(SELECT MIN(rev_id) FROM revision WHERE rev_page = ?)"""
result = self.site.sql_query(query, (pageid,))
c_user, c_time, c_id = list(result)[0]
return c_user, datetime.strptime(c_time, "%Y%m%d%H%M%S"), c_id

def get_notes(self, chart, content, m_time, s_user):
"""Return any special notes or warnings about this page. """Return any special notes or warnings about this page.


resubmit: submission was resubmitted after a previous decline resubmit: submission was resubmitted after a previous decline
@@ -676,7 +675,7 @@ class Task(BaseTask):
if time_since_modify > max_time: if time_since_modify > max_time:
notes += "|no=1" # Submission hasn't been touched in over 4 days notes += "|no=1" # Submission hasn't been touched in over 4 days


creator = self.site.get_user(c_user)
creator = self.site.get_user(s_user)
try: try:
if creator.blockinfo(): if creator.blockinfo():
notes += "|nb=1" # Submitter is blocked notes += "|nb=1" # Submitter is blocked


Зареждане…
Отказ
Запис