diff --git a/ietf/doc/templatetags/ballot_icon.py b/ietf/doc/templatetags/ballot_icon.py
index 8bf0a5961..6d3ddba44 100644
--- a/ietf/doc/templatetags/ballot_icon.py
+++ b/ietf/doc/templatetags/ballot_icon.py
@@ -162,23 +162,27 @@ def ballotposition(doc, user):
@register.filter
def state_age_colored(doc):
- if doc.type_id == 'draft':
+ if doc.type_id == "draft":
if not doc.get_state_slug() in ["active", "rfc"]:
# Don't show anything for expired/withdrawn/replaced drafts
return ""
- iesg_state = doc.get_state_slug('draft-iesg')
+ iesg_state = doc.get_state_slug("draft-iesg")
if not iesg_state:
return ""
if iesg_state in ["dead", "watching", "pub", "idexists"]:
return ""
try:
- state_date = doc.docevent_set.filter(
- Q(type="started_iesg_process")|
- Q(type="changed_state", statedocevent__state_type="draft-iesg")
- ).order_by('-time')[0].time.date()
+ state_date = (
+ doc.docevent_set.filter(
+ Q(type="started_iesg_process")
+ | Q(type="changed_state", statedocevent__state_type="draft-iesg")
+ )
+ .order_by("-time")[0]
+ .time.date()
+ )
except IndexError:
- state_date = datetime.date(1990,1,1)
+ state_date = datetime.date(1990, 1, 1)
days = (datetime.date.today() - state_date).days
# loosely based on
# https://trac.ietf.org/trac/iesg/wiki/PublishPath
@@ -191,7 +195,7 @@ def state_age_colored(doc):
elif iesg_state in ["lc-req", "ann"]:
goal1 = 4
goal2 = 7
- elif 'need-rev' in [x.slug for x in doc.tags.all()]:
+ elif "need-rev" in [x.slug for x in doc.tags.all()]:
goal1 = 14
goal2 = 28
elif iesg_state == "pub-req":
@@ -204,21 +208,29 @@ def state_age_colored(doc):
goal1 = 14
goal2 = 28
if days > goal2:
- class_name = "text-danger"
+ class_name = "bg-danger"
elif days > goal1:
- class_name = "text-warning"
+ class_name = "bg-warning"
else:
# don't show a badge when things are in the green; clutters display
# class_name = "text-success"
return ""
if days > goal1:
- title = ' title="In state for %d day%s; goal is <%d days."' % (days, 's' if days != 1 else '', goal1,)
+ title = ' title="In state for %d day%s; goal is <%d days."' % (
+ days,
+ "s" if days != 1 else "",
+ goal1,
+ )
else:
- title = ''
- return mark_safe('' % (class_name, title))
+ title = ""
+ return mark_safe(
+ ' %d'
+ % (class_name, title, days)
+ )
else:
return ""
+
@register.filter
def auth48_alert_badge(doc):
"""Return alert badge, if any, for a document"""
diff --git a/ietf/doc/templatetags/ietf_filters.py b/ietf/doc/templatetags/ietf_filters.py
index 21b5288eb..27487dd60 100644
--- a/ietf/doc/templatetags/ietf_filters.py
+++ b/ietf/doc/templatetags/ietf_filters.py
@@ -705,36 +705,38 @@ def can_ballot(user,doc):
else:
return user.person.role_set.filter(name="ad", group__type="area", group__state="active")
+
@register.filter
def action_holder_badge(action_holder):
"""Add a warning tag if action holder age exceeds limit
-
+
>>> from ietf.doc.factories import DocumentActionHolderFactory
>>> old_limit = settings.DOC_ACTION_HOLDER_AGE_LIMIT_DAYS
>>> settings.DOC_ACTION_HOLDER_AGE_LIMIT_DAYS = 15
>>> action_holder_badge(DocumentActionHolderFactory())
''
-
+
>>> action_holder_badge(DocumentActionHolderFactory(time_added=datetime.datetime.now() - datetime.timedelta(days=15)))
''
>>> action_holder_badge(DocumentActionHolderFactory(time_added=datetime.datetime.now() - datetime.timedelta(days=16)))
- ''
+ ' 16'
>>> action_holder_badge(DocumentActionHolderFactory(time_added=datetime.datetime.now() - datetime.timedelta(days=30)))
- ''
+ ' 30'
>>> settings.DOC_ACTION_HOLDER_AGE_LIMIT_DAYS = old_limit
"""
age_limit = settings.DOC_ACTION_HOLDER_AGE_LIMIT_DAYS
age = (datetime.datetime.now() - action_holder.time_added).days
if age > age_limit:
- return mark_safe('' % (
- age,
- 's' if age != 1 else '',
- age_limit))
+ return mark_safe(
+ ' %d'
+ % (age, "s" if age != 1 else "", age_limit, age)
+ )
else:
- return '' # no alert needed
+ return "" # no alert needed
+
@register.filter
def is_regular_agenda_item(assignment):
diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py
index 79a787e27..7a04d3e75 100644
--- a/ietf/doc/tests.py
+++ b/ietf/doc/tests.py
@@ -356,8 +356,8 @@ class SearchTests(TestCase):
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
self.assertEqual(len(q('td.doc')),3)
- self.assertTrue(q('td.status span.text-warning *[title*="%s"]' % "for 15 days"))
- self.assertTrue(q('td.status span.text-danger *[title*="%s"]' % "for 29 days"))
+ self.assertTrue(q('td.status span.bg-warning[title*="%s"]' % "for 15 days"))
+ self.assertTrue(q('td.status span.bg-danger[title*="%s"]' % "for 29 days"))
for ah in [draft.action_holders.first() for draft in drafts]:
self.assertContains(r, escape(ah.name))