diff --git a/bot/tasks/afc_statistics.py b/bot/tasks/afc_statistics.py index fc672f6..58f5402 100644 --- a/bot/tasks/afc_statistics.py +++ b/bot/tasks/afc_statistics.py @@ -143,18 +143,14 @@ class Task(BaseTask): 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 += "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}|" - 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"]) - 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"]: - row += "n=1{page_notes}" + row += "|n=1{page_notes}" return "".join(("{{", row.format(self.tl_row, **page), "}}")) @@ -313,18 +309,17 @@ class Task(BaseTask): short = self.get_short_title(title) 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) 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 (?, ?)" - query2 = "INSERT INTO page VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + query2 = "INSERT INTO page VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" cursor.execute(query1, (pageid, chart)) 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): """Update hook for when page is already in our database. @@ -352,7 +347,7 @@ class Task(BaseTask): size = self.get_size(content) 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"]: self.update_page_title(cursor, result, pageid, title) @@ -380,7 +375,8 @@ class Task(BaseTask): query = """UPDATE page SET page_size = ?, page_modify_user = ?, page_modify_time = ?, page_modify_oldid = ? 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 = 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) 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 = msg.format(pageid, result["page_special_user"], result["page_special_time"], @@ -477,14 +474,14 @@ class Task(BaseTask): elif "P" in statuses: status, chart = "p", CHART_PEND elif "T" in statuses: - status, chart = None, CHART_MISPLACE + status, chart = None, CHART_NONE elif "D" in statuses: status, chart = "d", CHART_DECLINE else: status, chart = None, CHART_NONE if namespace == wiki.NS_MAIN: - if chart == CHART_NONE: + if not statuses: status, chart = "a", CHART_ACCEPT else: status, chart = None, CHART_MISPLACE @@ -559,19 +556,6 @@ class Task(BaseTask): """Return a page's size in a short, pretty format.""" 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): """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 cause confusion. It is merely a short way of saying "the edit in which 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 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 it was "special"-ed more than 250 edits ago. """ - if chart in [CHART_NONE, CHART_MISPLACE]: + if chart ==CHART_NONE: return None, None, None + elif chart == CHART_MISPLACE: + return self.get_create(pageid) elif chart == CHART_ACCEPT: search_for = None search_not = ["R", "H", "P", "T", "D"] @@ -642,7 +628,20 @@ class Task(BaseTask): 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. resubmit: submission was resubmitted after a previous decline @@ -676,7 +675,7 @@ class Task(BaseTask): if time_since_modify > max_time: 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: if creator.blockinfo(): notes += "|nb=1" # Submitter is blocked