From 567338d75d9eb75df8de66ad5fc91d1f811b7030 Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Mon, 7 Nov 2011 22:02:43 -0500 Subject: [PATCH] get_notes() and update() --- bot/tasks/afc_statistics.py | 89 +++++++++++++++++++++++++++++++-------------- 1 file changed, 62 insertions(+), 27 deletions(-) diff --git a/bot/tasks/afc_statistics.py b/bot/tasks/afc_statistics.py index 7921dd4..f15934d 100644 --- a/bot/tasks/afc_statistics.py +++ b/bot/tasks/afc_statistics.py @@ -72,6 +72,8 @@ class Task(BaseTask): self.save(**kwargs) elif action == "sync": self.sync(**kwargs) + elif action == "update": + self.update(**kwargs) finally: self.conn.close() @@ -258,6 +260,24 @@ class Task(BaseTask): AND ADDTIME(page_special_time, '36:00:00') < NOW()""" cursor.execute(query, (CHART_ACCEPT, CHART_DECLINE)) + def update(self, **kwargs): + title = kwargs.get(page) + if not title: + return + + query = "SELECT page_id, page_modify_oldid FROM page WHERE page_title = ?" + with self.conn.cursor() as cursor: + cursor.execute(query, (title,)) + try: + pageid, oldid = cursor.fetchall()[0] + except IndexError: + msg = "Page [[{0}]] not found in database".format(title) + self.logger.error(msg) + + msg = "Updating page [[{0}]] (id: {1}) @ {2}" + self.logger.info(msg.format(title, pageid, oldid)) + self.update_page(cursor, pageid, title) + def untrack_page(self, cursor, pageid): """Remove a page, given by ID, from our database.""" self.logger.debug("Untracking page (id: {0})".format(pageid)) @@ -280,7 +300,7 @@ class Task(BaseTask): status, chart = self.get_status_and_chart(content) if not status: msg = "Could not find a status for [[{0}]]".format(title) - self.logger.error(msg) + self.logger.warn(msg) return short = self.get_short_title(title) @@ -288,7 +308,7 @@ class Task(BaseTask): 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(content, m_time, c_user) + notes = self.get_notes(chart, content, m_time, c_user) query1 = "INSERT INTO row VALUES (?, ?)" query2 = "INSERT INTO page VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" @@ -351,7 +371,7 @@ class Task(BaseTask): size = len(content) m_user, m_time, m_id = self.get_modify(pageid) - notes = self.get_notes(content, m_time, result["page_create_user"]) + notes = self.get_notes(chart, content, m_time, result["page_create_user"]) if title != result["page_title"]: self.update_page_title(cursor, result, pageid, title) @@ -467,15 +487,16 @@ class Task(BaseTask): use (revision history search to find the most recent isn't a viable idea :P). """ - if re.search("\{\{afc submission\|r\|(.*?)\}\}", content, re.I): + flags = re.I|re.S + if re.search("\{\{afc submission\|r\|(.*?)\}\}", content, flags): return "r", CHART_REVIEW - elif re.search("\{\{afc submission\|h\|(.*?)\}\}", content, re.I): + elif re.search("\{\{afc submission\|h\|(.*?)\}\}", content, flags): return "p", CHART_DRAFT - elif re.search("\{\{afc submission\|\|(.*?)\}\}", content, re.I): + elif re.search("\{\{afc submission\|\|(.*?)\}\}", content, flags): return "p", CHART_PEND - elif re.search("\{\{afc submission\|t\|(.*?)\}\}", content, re.I): + elif re.search("\{\{afc submission\|t\|(.*?)\}\}", content, flags): return None, CHART_NONE - elif re.search("\{\{afc submission\|d\|(.*?)\}\}", content, re.I): + elif re.search("\{\{afc submission\|d\|(.*?)\}\}", content, flags): return "d", CHART_DECLINE return None, CHART_NONE @@ -555,30 +576,44 @@ class Task(BaseTask): self.logger.warn(msg.format(pageid, chart)) return None, None, None content = self.get_revision_content(revid) - if content and not re.search(search, content, re.I): + if content and not re.search(search, content, re.I|re.S): return last last = (user, datetime.strptime(ts, "%Y%m%d%H%M%S"), revid) return last - def get_notes(self, content, m_time, c_user): + def get_notes(self, chart, content, m_time, c_user): """Return any special notes or warnings about this page. - Currently unimplemented, so always returns None. + resubmit: submission was resubmitted after a previous decline + short: submission is less than 500 bytes + no-inline: submission has no inline citations + unsourced: submission lacks references completely + old: submission has not been touched in > 4 days + blocked: submitter is currently blocked """ - # accepted subs - # rebuild action - - # resubmit submission was resubmitted after a previous decline - # re.search("\{\{afc submission\|d\|(.*?)\}\}", content, re.I) - # short submission is less than X bytes - # len(content) < X - # no-inline submission has no inline citations - # not re.search("\(.*?)\", content, re.I|re.S) - # unsourced submission lacks references completely - # not re.search(references, content, re.I|re.S) and search(hyperlinks) - # old submission has not been touched in > 4 days - # m_time < now - 4 hours - # blocked submitter is currently blocked - # c_user is blocked via API - return "" + notes = "" + + if re.search("\{\{afc submission\|d\|(.*?)\}\}", content, re.I|re.S): + notes += "|nr=1" # Submission was resubmitted + + if len(content) < 500: + notes += "|ns=1" # Submission is short + + if not re.search("\(.*?)\", content, re.I|re.S): + if re.search("https?:\/\/(.*?)\.", content, re.I|re.S): + notes += "|ni=1" # Submission has no inline citations + else: + notes += "|nu=1" # Submission is completely unsourced + + pending_charts = [CHART_PEND, CHART_DRAFT, CHART_REVIEW] + time_since_modify = (datetime.now() - m_time).seconds + max_time = 4 * 24 * 60 * 60 + if chart in pending_charts and time_since_modify > max_time: + notes += "|no=1" # Submission hasn't been touched in over 4 days + + creator = self.site.get_user(c_user) + if creator.blockinfo(): + notes += "|nb=1" # Submitter is blocked + + return notes