~kanban/kanban/trunk

« back to all changes in this revision

Viewing changes to kanban/html.py

  • Committer: Jamu Kakar
  • Date: 2011-02-06 22:35:56 UTC
  • mfrom: (16.1.2 warning-signals)
  • Revision ID: jkakar@kakar.ca-20110206223556-d2p08upuigfoncwd
Merged warning-signals [f=713032]

Warning and danger icons are shown on bugs that have been in progress
or in the review queue for too long.  The warning icon is shown when a
bug has been in progress for more than three days or in the review
queue for more than one day.  The danger icon is shown when a bug has
been in progress for more than seven days or in the review queue for
more than three days.  Bugs related to the -o flag, that slipped in
with the last merge, have also been fixed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
from datetime import datetime
 
1
from datetime import datetime, timedelta
2
2
 
3
3
from jinja2 import Environment, PackageLoader
4
4
 
24
24
    return "%s-importance" % importance.lower()
25
25
 
26
26
 
 
27
def get_warn_date(start_date, age):
 
28
    """Get the warning date for this bug, if any."""
 
29
    while age:
 
30
        start_date += timedelta(days=1)
 
31
        if start_date.weekday() not in (5, 6):
 
32
            age -= 1
 
33
    return start_date
 
34
 
 
35
 
 
36
def warn(bug, in_progress_age, review_age, now=None):
 
37
    """Determine if C{bug} should have a warning badge shown for it.
 
38
 
 
39
    @param bug: A L{Bug} instance.
 
40
    @param in_progress_age: The number of days the bug must be in progress
 
41
        before a warning is shown.
 
42
    @param review_age: The number of days the bug must be in the review queue
 
43
        before a warning is shown.
 
44
    @param now: Optionally, the date to use when checking for warning status.
 
45
    """
 
46
    now = now if now else datetime.now(bug.in_progress_date.tzinfo)
 
47
    if bug.needs_review():
 
48
        warn_date = get_warn_date(bug.merge_proposal_creation_date, review_age)
 
49
        return now > warn_date
 
50
    elif bug.in_progress():
 
51
        warn_date = get_warn_date(bug.in_progress_date, in_progress_age)
 
52
        return now > warn_date
 
53
    return False
 
54
 
 
55
 
27
56
def generate_html(milestone):
28
57
    """Generate an HTML kanban board to represent L{Bug}s in C{milestone}."""
29
58
    environment = Environment(loader=PackageLoader("kanban", "templates"))
30
59
    environment.filters["branch_name"] = branch_name
31
60
    environment.filters["branch_url"] = branch_url
32
61
    environment.filters["importance_css_class"] = importance_css_class
 
62
    environment.filters["warn"] = lambda bug: warn(bug, 3, 1)
 
63
    environment.filters["danger"] = lambda bug: warn(bug, 7, 3)
33
64
    template = environment.get_template("kanban.html")
34
65
    data = {"milestone": milestone,
35
66
            "now": datetime.utcnow().strftime("%a %e %b at %H:%M UTC")}