| @@ -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 | |||