Browse Source

Implement last_volunteer_size.

tags/v0.1^2
Ben Kurtovic 12 years ago
parent
commit
d086f03c2c
2 changed files with 20 additions and 12 deletions
  1. +19
    -12
      earwigbot/tasks/drn_clerkbot.py
  2. +1
    -0
      earwigbot/tasks/schema/drn_clerkbot.sql

+ 19
- 12
earwigbot/tasks/drn_clerkbot.py View File

@@ -150,7 +150,7 @@ class DRNClerkBot(Task):
with conn.cursor() as cursor: with conn.cursor() as cursor:
cursor.execute("SELECT * FROM case") cursor.execute("SELECT * FROM case")
for row in cursor: for row in cursor:
case = _Case(*row, new=False)
case = _Case(*row)
cases.append(case) cases.append(case)
return cases return cases


@@ -179,7 +179,7 @@ class DRNClerkBot(Task):
repl = ur"\1 <!-- Bot Case ID (please don't modify): {0} -->" repl = ur"\1 <!-- Bot Case ID (please don't modify): {0} -->"
body = re.sub(re_id2, repl.format(id_), body) body = re.sub(re_id2, repl.format(id_), body)
case = _Case(id_, title, status, self.STATUS_UNKNOWN, time(), case = _Case(id_, title, status, self.STATUS_UNKNOWN, time(),
0, False, False, new=True)
0, False, False, 0, new=True)
cases.append(case) cases.append(case)
else: else:
case.status = status case.status = status
@@ -231,15 +231,18 @@ class DRNClerkBot(Task):
notices = [] notices = []
signatures = self.read_signatures(case.body) signatures = self.read_signatures(case.body)
storedsigs = self.get_signatures_from_db(conn, case) storedsigs = self.get_signatures_from_db(conn, case)
newsigs = set(signatures) - set(storedsigs)
if any([editor in volunteers for (editor, timestamp) in newsigs]):
case.last_volunteer_size = len(case.body)

if case.status == self.STATUS_NEW: if case.status == self.STATUS_NEW:
notices = self.clerk_new_case(case, volunteers, signatures) notices = self.clerk_new_case(case, volunteers, signatures)
elif case.status == self.STATUS_OPEN: elif case.status == self.STATUS_OPEN:
notices = self.clerk_open_case(case, signatures) notices = self.clerk_open_case(case, signatures)
elif case.status == self.STATUS_NEEDASSIST: elif case.status == self.STATUS_NEEDASSIST:
notices = self.clerk_needassist_case(case, volunteers, signatures,
storedsigs)
notices = self.clerk_needassist_case(case, volunteers, newsigs)
elif case.status == self.STATUS_STALE: elif case.status == self.STATUS_STALE:
notices = self.clerk_stale_case(case, signatures, storedsigs)
notices = self.clerk_stale_case(case, newsigs)
elif case.status == self.STATUS_REVIEW: elif case.status == self.STATUS_REVIEW:
notices = self.clerk_review_case(case) notices = self.clerk_review_case(case)
elif case.status in [self.STATUS_RESOLVED, self.STATUS_CLOSED]: elif case.status in [self.STATUS_RESOLVED, self.STATUS_CLOSED]:
@@ -263,7 +266,7 @@ class DRNClerkBot(Task):
if flagged: if flagged:
return flagged return flagged


if len(case.body) - SIZE_WHEN_LAST_VOLUNTEER_EDIT > 15000: # TODO
if len(case.body) - case.last_volunteer_size > 15000:
if case.last_action != self.STATUS_NEEDASSIST: if case.last_action != self.STATUS_NEEDASSIST:
case.status = self.STATUS_NEEDASSIST case.status = self.STATUS_NEEDASSIST
return self.build_talk_notice(self.STATUS_NEEDASSIST) return self.build_talk_notice(self.STATUS_NEEDASSIST)
@@ -275,23 +278,22 @@ class DRNClerkBot(Task):
return self.build_talk_notice(self.STATUS_STALE) return self.build_talk_notice(self.STATUS_STALE)
return [] return []


def clerk_needassist_case(self, case, volunteers, signatures, storedsigs):
def clerk_needassist_case(self, case, volunteers, newsigs):
flagged = self.check_for_review(case): flagged = self.check_for_review(case):
if flagged: if flagged:
return flagged return flagged


newsigs = set(signatures) - set(storedsigs)
if any([editor in volunteers for (editor, timestamp) in newsigs]): if any([editor in volunteers for (editor, timestamp) in newsigs]):
if case.last_action != self.STATUS_OPEN: if case.last_action != self.STATUS_OPEN:
case.status = self.STATUS_OPEN case.status = self.STATUS_OPEN
return [] return []


def clerk_stale_case(self, case, signatures, storedsigs):
def clerk_stale_case(self, case, newsigs):
flagged = self.check_for_review(case): flagged = self.check_for_review(case):
if flagged: if flagged:
return flagged return flagged


if set(signatures) - set(storedsigs)
if newsigs:
if case.last_action != self.STATUS_OPEN: if case.last_action != self.STATUS_OPEN:
case.status = self.STATUS_OPEN case.status = self.STATUS_OPEN
return [] return []
@@ -340,6 +342,8 @@ class DRNClerkBot(Task):
def notify_parties(self, case): def notify_parties(self, case):
if case.parties_notified: if case.parties_notified:
return return
template = "{{subst:" + self.tl_notify_party
template += "|thread=" + case.title + "}} ~~~~"
raise NotImplementedError() # TODO raise NotImplementedError() # TODO
case.parties_notified = True case.parties_notified = True


@@ -394,7 +398,8 @@ class DRNClerkBot(Task):
("case_last_action", case.last_action), ("case_last_action", case.last_action),
("case_close_time", case.close_time), ("case_close_time", case.close_time),
("case_parties_notified", case.parties_notified), ("case_parties_notified", case.parties_notified),
("case_very_old_notified", case.very_old_notified)
("case_very_old_notified", case.very_old_notified),
("case_last_volunteer_size", case.last_volunteer_size)
] ]
for column, data in fields_to_check: for column, data in fields_to_check:
if data != stored[column]: if data != stored[column]:
@@ -461,7 +466,8 @@ class DRNClerkBot(Task):
class _Case(object): class _Case(object):
"""A object representing a dispute resolution case.""" """A object representing a dispute resolution case."""
def __init__(self, id_, title, status, last_action, file_time, close_time, def __init__(self, id_, title, status, last_action, file_time, close_time,
parties_notified, very_old_notified, new):
parties_notified, very_old_notified, last_volunteer_size,
new=False):
self.id = id_ self.id = id_
self.title = title self.title = title
self.status = status self.status = status
@@ -470,6 +476,7 @@ class _Case(object):
self.close_time = close_time self.close_time = close_time
self.parties_notified = parties_notified self.parties_notified = parties_notified
self.very_old_notified = very_old_notified self.very_old_notified = very_old_notified
self.last_volunteer_size = last_volunteer_size
self.new = new self.new = new


self.original_status = status self.original_status = status


+ 1
- 0
earwigbot/tasks/schema/drn_clerkbot.sql View File

@@ -22,6 +22,7 @@ CREATE TABLE `case` (
`case_close_time` int(10) unsigned DEFAULT NULL, `case_close_time` int(10) unsigned DEFAULT NULL,
`case_parties_notified` tinyint(1) unsigned DEFAULT NULL, `case_parties_notified` tinyint(1) unsigned DEFAULT NULL,
`case_very_old_notified` tinyint(1) unsigned DEFAULT NULL, `case_very_old_notified` tinyint(1) unsigned DEFAULT NULL,
`case_last_volunteer_size` int(9) unsigned DEFAULT NULL,
PRIMARY KEY (`case_id`) PRIMARY KEY (`case_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;




Loading…
Cancel
Save