Merge ubuntu-sponsoring:json-extra-details into ubuntu-sponsoring:master

Proposed by Sebastien Bacher
Status: Merged
Merged at revision: dccda0d304c2fa44772e1c7aec208267fc744dd1
Proposed branch: ubuntu-sponsoring:json-extra-details
Merge into: ubuntu-sponsoring:master
Diff against target: 156 lines (+32/-22)
2 files modified
sponsors-page.py (+31/-21)
template.html (+1/-1)
Reviewer Review Type Date Requested Status
Brian Murray Approve
Review via email: mp+399914@code.launchpad.net

Commit message

Include extra details in the json reports

Description of the change

The change has some special casing since set types can't be used with json so we convert those to lists or strings for dates.
The extra information are going to be useful for some KPI and reports.

To post a comment you must log in.
Revision history for this message
Sebastien Bacher (seb128) wrote :

One example of entry generated with the change is on https://paste.ubuntu.com/p/HsXP9D42Jx/

Revision history for this message
Brian Murray (brian-murray) wrote :

Thanks for providing the example of the output that was useful and it seems weird to me that "time_in_queue" is not actually a time but a date. Is there some better way to represent this either by changing the key or value?

review: Needs Fixing
Revision history for this message
Sebastien Bacher (seb128) wrote :

Thanks for the review, I fixing the spacing and renamed the variable

Revision history for this message
Brian Murray (brian-murray) wrote :

This looks good to me now, thanks for making those changes.

review: Approve
Revision history for this message
Sebastien Bacher (seb128) wrote :

Thanks, merged now!

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/sponsors-page.py b/sponsors-page.py
2index 6c06437..00c7114 100755
3--- a/sponsors-page.py
4+++ b/sponsors-page.py
5@@ -85,7 +85,7 @@ class SponsoringItem(object):
6 def __init__(self, distribution, team, link, link_desc, release="",
7 package="", s_types=set(), last_comment="", status="",
8 importance="", title="", tags=set(), date_created=None,
9- time_in_queue=None, verbose=False):
10+ date_queued=None, verbose=False):
11 self.team = team
12 self.link = link
13 self.link_desc = link_desc
14@@ -103,7 +103,7 @@ class SponsoringItem(object):
15 self.date_created = date_created
16 if self.date_created is None:
17 self.date_created = datetime.datetime.utcnow()
18- self.time_in_queue = time_in_queue
19+ self.date_queued = date_queued
20 self.freshness = self.get_freshness()
21 self.components = None
22 self.sets = None
23@@ -228,12 +228,12 @@ class SponsoringItem(object):
24 self.sets.add("unseeded")
25 return self.sets
26
27- def get_time_in_queue(self):
28- if self.time_in_queue:
29- time_in_queue = self.time_in_queue
30+ def get_date_queued(self):
31+ if self.date_queued:
32+ date_queued = self.date_queued
33 else:
34- time_in_queue = datetime.datetime(1970, 1, 1, tzinfo=UTC())
35- return time_in_queue
36+ date_queued = datetime.datetime(1970, 1, 1, tzinfo=UTC())
37+ return date_queued
38
39 def get_freshness(self):
40 today = datetime.datetime.today().replace(tzinfo=UTC())
41@@ -241,13 +241,13 @@ class SponsoringItem(object):
42 two_weeks_old = today - datetime.timedelta(weeks=2)
43 three_weeks_old = today - datetime.timedelta(weeks=3)
44 four_weeks_old = today - datetime.timedelta(weeks=4)
45- if self.time_in_queue < four_weeks_old:
46+ if self.date_queued < four_weeks_old:
47 freshness = "oldest"
48- elif self.time_in_queue < three_weeks_old:
49+ elif self.date_queued < three_weeks_old:
50 freshness = "mucholder"
51- elif self.time_in_queue < two_weeks_old:
52+ elif self.date_queued < two_weeks_old:
53 freshness = "older"
54- elif self.time_in_queue < one_week_old:
55+ elif self.date_queued < one_week_old:
56 freshness = "old"
57 else:
58 freshness = ""
59@@ -309,13 +309,13 @@ class SponsoringItem(object):
60 else:
61 date_string = self.date_created.strftime("%F")
62
63- time_in_queue = "unknown"
64- if self.time_in_queue:
65- time_in_queue = self.time_in_queue.strftime("%F")
66+ date_queued = "unknown"
67+ if self.date_queued:
68+ date_queued = self.date_queued.strftime("%F")
69
70 return """
71 <tr class="%(freshness)s">
72- <td>%(time_in_queue)s</td>
73+ <td>%(date_queued)s</td>
74 <td>%(title)s</td>
75 <td><a href='%(link_url)s'>%(link_desc)s</a></td>
76 <td>%(types)s</td>
77@@ -328,7 +328,7 @@ class SponsoringItem(object):
78 <td>%(date_created)s</td>
79 </tr>""" % {
80 'freshness': self.freshness,
81- 'time_in_queue': time_in_queue,
82+ 'date_queued': date_queued,
83 'title': cgi.escape(self.title),
84 'link_url': self.link,
85 'link_desc': self.link_desc,
86@@ -350,10 +350,20 @@ class SponsoringItem(object):
87 "package": "source_package",
88 "link_desc": "short_description",
89 "importance": "severity",
90+ "date_queued": "date_queued",
91+ "date_created": "date_created",
92+ "components": "components",
93+ "sets": "sets",
94+ "s_types": "s_types",
95 }
96 item_dict = {}
97 for key in mapping.keys():
98- item_dict[mapping[key]] = self.__dict__[key]
99+ if key in ["components", "sets", "s_types"]:
100+ item_dict[mapping[key]] = list(self.__dict__[key])
101+ elif key == "date_queued" or key == "date_created":
102+ item_dict[mapping[key]] = self.__dict__[key].strftime("%x")
103+ else:
104+ item_dict[mapping[key]] = self.__dict__[key]
105 return item_dict
106
107
108@@ -400,7 +410,7 @@ def get_bugs(lp, distribution, team, verbose=False):
109 if release_name != "ubuntu":
110 release.add(release_name)
111 link = "https://launchpad.net/bugs/%s" % bug_number
112- time_in_queue = sponsors_subscribed_date(bug)
113+ date_queued = sponsors_subscribed_date(bug)
114 tasks.add(SponsoringItem(distribution=distribution,
115 team=team,
116 link=link,
117@@ -414,7 +424,7 @@ def get_bugs(lp, distribution, team, verbose=False):
118 title=bug.title,
119 tags=set(bug.tags),
120 date_created=bug.date_created,
121- time_in_queue=time_in_queue,
122+ date_queued=date_queued,
123 verbose=verbose))
124 return tasks
125
126@@ -498,7 +508,7 @@ def get_branches(lp, distribution, team, verbose=False):
127 title=title,
128 tags=tags,
129 date_created=proposal.date_created,
130- time_in_queue=proposal.date_created,
131+ date_queued=proposal.date_created,
132 verbose=verbose))
133 return tasks
134
135@@ -527,7 +537,7 @@ def generate_page(items, devs, packages, other_teams=[], team=None):
136 subst = dict()
137 subst["LAST_UPDATED"] = date
138 subst["TABLE"] = ""
139- for item in sorted(items, key=operator.methodcaller("get_time_in_queue")):
140+ for item in sorted(items, key=operator.methodcaller("get_date_queued")):
141 subst["TABLE"] += item.html(devs, packages)
142 subst["TOTAL"] = len(items)
143 subst["SYNCS"] = len([x for x in items if x.is_sync()])
144diff --git a/template.html b/template.html
145index 61f6b9f..df52629 100644
146--- a/template.html
147+++ b/template.html
148@@ -12,7 +12,7 @@
149 <table id="icons" class="sortable">
150 <caption>Last updated at: <i>@LAST_UPDATED@</i></caption>
151 <tr>
152- <th>Time in Queue</th>
153+ <th>Date Queued</th>
154 <th>Summary</th>
155 <th>Item</th>
156 <th>Type</th>

Subscribers

People subscribed via source and target branches

to all changes: