|
@@ -43,7 +43,6 @@ class DRNClerkBot(Task): |
|
|
STATUS_OPEN = 2 |
|
|
STATUS_OPEN = 2 |
|
|
STATUS_STALE = 3 |
|
|
STATUS_STALE = 3 |
|
|
STATUS_NEEDASSIST = 4 |
|
|
STATUS_NEEDASSIST = 4 |
|
|
STATUS_REVIEW = 5 |
|
|
|
|
|
STATUS_RESOLVED = 6 |
|
|
STATUS_RESOLVED = 6 |
|
|
STATUS_CLOSED = 7 |
|
|
STATUS_CLOSED = 7 |
|
|
STATUS_FAILED = 8 |
|
|
STATUS_FAILED = 8 |
|
@@ -52,8 +51,7 @@ class DRNClerkBot(Task): |
|
|
STATUS_NEW: ("",), |
|
|
STATUS_NEW: ("",), |
|
|
STATUS_OPEN: ("open", "active", "inprogress"), |
|
|
STATUS_OPEN: ("open", "active", "inprogress"), |
|
|
STATUS_STALE: ("stale",), |
|
|
STATUS_STALE: ("stale",), |
|
|
STATUS_NEEDASSIST: ("needassist", "relist", "relisted"), |
|
|
|
|
|
STATUS_REVIEW: ("review",), |
|
|
|
|
|
|
|
|
STATUS_NEEDASSIST: ("needassist", "review", "relist", "relisted"), |
|
|
STATUS_RESOLVED: ("resolved", "resolve"), |
|
|
STATUS_RESOLVED: ("resolved", "resolve"), |
|
|
STATUS_CLOSED: ("closed", "close"), |
|
|
STATUS_CLOSED: ("closed", "close"), |
|
|
STATUS_FAILED: ("failed", "fail"), |
|
|
STATUS_FAILED: ("failed", "fail"), |
|
@@ -312,8 +310,6 @@ class DRNClerkBot(Task): |
|
|
notices = self.clerk_needassist_case(case, volunteers, newsigs) |
|
|
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, newsigs) |
|
|
notices = self.clerk_stale_case(case, newsigs) |
|
|
elif case.status == self.STATUS_REVIEW: |
|
|
|
|
|
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, |
|
|
self.STATUS_FAILED]: |
|
|
self.STATUS_FAILED]: |
|
|
self.clerk_closed_case(case, signatures) |
|
|
self.clerk_closed_case(case, signatures) |
|
@@ -342,10 +338,10 @@ class DRNClerkBot(Task): |
|
|
"""Clerk an open case (has been edited by a reviewer). |
|
|
"""Clerk an open case (has been edited by a reviewer). |
|
|
|
|
|
|
|
|
The case will be set to "needassist" if 15,000 bytes have been added |
|
|
The case will be set to "needassist" if 15,000 bytes have been added |
|
|
since a volunteer last edited, "stale" if no edits have occured in two |
|
|
|
|
|
days, or "review" if it has been open for over four days. |
|
|
|
|
|
|
|
|
since a volunteer last edited or if it has been open for over seven |
|
|
|
|
|
days, or "stale" if no edits at all have occurred in two days. |
|
|
""" |
|
|
""" |
|
|
if self.check_for_review(case): |
|
|
|
|
|
|
|
|
if self.check_for_needassist(case): |
|
|
return [] |
|
|
return [] |
|
|
if len(case.body) - case.last_volunteer_size > 15000: |
|
|
if len(case.body) - case.last_volunteer_size > 15000: |
|
|
self.update_status(case, self.STATUS_NEEDASSIST) |
|
|
self.update_status(case, self.STATUS_NEEDASSIST) |
|
@@ -357,38 +353,19 @@ class DRNClerkBot(Task): |
|
|
return [] |
|
|
return [] |
|
|
|
|
|
|
|
|
def clerk_needassist_case(self, case, volunteers, newsigs): |
|
|
def clerk_needassist_case(self, case, volunteers, newsigs): |
|
|
"""Clerk a "needassist" case (no volunteer edits in 15,000 bytes). |
|
|
|
|
|
|
|
|
"""Clerk a "needassist" case (no volunteers in 15kb or >= 7 days old). |
|
|
|
|
|
|
|
|
The case will be set to "open" if a volunteer edits, or "review" if it |
|
|
|
|
|
has been open for over four days. |
|
|
|
|
|
""" |
|
|
|
|
|
if self.check_for_review(case): |
|
|
|
|
|
return [] |
|
|
|
|
|
if any([editor in volunteers for (editor, timestamp) in newsigs]): |
|
|
|
|
|
self.update_status(case, self.STATUS_OPEN) |
|
|
|
|
|
return [] |
|
|
|
|
|
|
|
|
|
|
|
def clerk_stale_case(self, case, newsigs): |
|
|
|
|
|
"""Clerk a stale case (no edits in two days). |
|
|
|
|
|
|
|
|
|
|
|
The case will be set to "open" if anyone edits, or "review" if it has |
|
|
|
|
|
been open for over four days. |
|
|
|
|
|
""" |
|
|
|
|
|
if self.check_for_review(case): |
|
|
|
|
|
return [] |
|
|
|
|
|
if newsigs: |
|
|
|
|
|
self.update_status(case, self.STATUS_OPEN) |
|
|
|
|
|
return [] |
|
|
|
|
|
|
|
|
|
|
|
def clerk_review_case(self, case): |
|
|
|
|
|
"""Clerk a "review" case (open for more than four days). |
|
|
|
|
|
|
|
|
|
|
|
A message will be set to the "very old notifiee", which is generally |
|
|
|
|
|
[[User talk:Szhang (WMF)]], if the case has been open for more than |
|
|
|
|
|
five days. |
|
|
|
|
|
|
|
|
The case will be set to "open" if a volunteer edits and the case is |
|
|
|
|
|
less than a week old. A message will be set to the "very old notifiee", |
|
|
|
|
|
which is generally [[User talk:Szhang (WMF)]], if the case has been |
|
|
|
|
|
open for more than ten days. |
|
|
""" |
|
|
""" |
|
|
age = (datetime.utcnow() - case.file_time).total_seconds() |
|
|
age = (datetime.utcnow() - case.file_time).total_seconds() |
|
|
if age > 60 * 60 * 24 * 5: |
|
|
|
|
|
|
|
|
if age <= 60 * 60 * 24 * 7: |
|
|
|
|
|
if any([editor in volunteers for (editor, timestamp) in newsigs]): |
|
|
|
|
|
self.update_status(case, self.STATUS_OPEN) |
|
|
|
|
|
|
|
|
|
|
|
elif age > 60 * 60 * 24 * 10: |
|
|
if not case.very_old_notified: |
|
|
if not case.very_old_notified: |
|
|
tmpl = self.tl_notify_stale |
|
|
tmpl = self.tl_notify_stale |
|
|
title = case.title.replace("|", "|") |
|
|
title = case.title.replace("|", "|") |
|
@@ -400,6 +377,19 @@ class DRNClerkBot(Task): |
|
|
log = msg.format(case.id, self.very_old_title, template) |
|
|
log = msg.format(case.id, self.very_old_title, template) |
|
|
self.logger.debug(log) |
|
|
self.logger.debug(log) |
|
|
return [notice] |
|
|
return [notice] |
|
|
|
|
|
|
|
|
|
|
|
return [] |
|
|
|
|
|
|
|
|
|
|
|
def clerk_stale_case(self, case, newsigs): |
|
|
|
|
|
"""Clerk a stale case (no edits in two days). |
|
|
|
|
|
|
|
|
|
|
|
The case will be set to "open" if anyone edits, or "needassist" if it |
|
|
|
|
|
has been open for over seven days. |
|
|
|
|
|
""" |
|
|
|
|
|
if self.check_for_needassist(case): |
|
|
|
|
|
return [] |
|
|
|
|
|
if newsigs: |
|
|
|
|
|
self.update_status(case, self.STATUS_OPEN) |
|
|
return [] |
|
|
return [] |
|
|
|
|
|
|
|
|
def clerk_closed_case(self, case, signatures): |
|
|
def clerk_closed_case(self, case, signatures): |
|
@@ -432,11 +422,11 @@ class DRNClerkBot(Task): |
|
|
case.archived = True |
|
|
case.archived = True |
|
|
self.logger.debug(u" {0}: archived case".format(case.id)) |
|
|
self.logger.debug(u" {0}: archived case".format(case.id)) |
|
|
|
|
|
|
|
|
def check_for_review(self, case): |
|
|
|
|
|
"""Check whether a case is old enough to be set to "review".""" |
|
|
|
|
|
|
|
|
def check_for_needassist(self, case): |
|
|
|
|
|
"""Check whether a case is old enough to be set to "needassist".""" |
|
|
age = (datetime.utcnow() - case.file_time).total_seconds() |
|
|
age = (datetime.utcnow() - case.file_time).total_seconds() |
|
|
if age > 60 * 60 * 24 * 4: |
|
|
|
|
|
self.update_status(case, self.STATUS_REVIEW) |
|
|
|
|
|
|
|
|
if age > 60 * 60 * 24 * 7: |
|
|
|
|
|
self.update_status(case, self.STATUS_NEEDASSIST) |
|
|
return True |
|
|
return True |
|
|
return False |
|
|
return False |
|
|
|
|
|
|
|
@@ -728,7 +718,7 @@ class DRNClerkBot(Task): |
|
|
return row + "|sm={{{small|}}}}}\n" |
|
|
return row + "|sm={{{small|}}}}}\n" |
|
|
|
|
|
|
|
|
def format_time(self, dt): |
|
|
def format_time(self, dt): |
|
|
"""Return a string telling the time since datetime occured.""" |
|
|
|
|
|
|
|
|
"""Return a string telling the time since datetime occurred.""" |
|
|
parts = [("year", 31536000), ("day", 86400), ("hour", 3600)] |
|
|
parts = [("year", 31536000), ("day", 86400), ("hour", 3600)] |
|
|
seconds = int((datetime.utcnow() - dt).total_seconds()) |
|
|
seconds = int((datetime.utcnow() - dt).total_seconds()) |
|
|
msg = [] |
|
|
msg = [] |
|
|