annotate scripts/weekly-report @ 8408:e882a5d52ae5

refactor: move RateLimitExceeded to roundup.cgi.exceptions RateLimitExceeded is an HTTP exception that raises code 429. Move it to roundup.cgi.exceptions where all the other exceptions that result in http status codes are located. Also make it inherit from HTTPException since it is one. Also add docstrings for all HTTP exceptions and order HTTPExceptions by status code. BREAKING CHANGE: if somebody is importing RateLimitExceeded they will need to change their import. I consider it unlikely anybody is using RateLimitExceeded. Detectors and extensions are unlikely to raise RateLimitExceeded. So I am leaving it out of the upgrading doc. Just doc in change log.
author John Rouillard <rouilj@ieee.org>
date Sun, 10 Aug 2025 21:27:06 -0400
parents 20ab9a4b76e9
children 9c3ec0a5c7fc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4041
5db2dfff85d8 Fix issue1891328
Stefan Seefeld <stefan@seefeld.name>
parents: 3764
diff changeset
1 #! /usr/bin/env python
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # This script generates a simple report outlining the activity in one
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 # tracker for the most recent week.
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
6 # A second argument is the negative interval to change period
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
7 # of time.
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
8
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # This script is free software, you may redistribute it
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 # and/or modify under the same terms as Python.
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
12 #Example output
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
13 #CREATED:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
14 #2702: new item
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
15 #
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
16 #RESOLVED:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
17 #1995: Where is my Power plugs
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
18 #2501: Can you help me with Sanity
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
19 #459: I need Sanity
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
20 #
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
21 #TOP TEN MOST DISCUSSED:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
22 #2 - 491: Can you help me with Sanity
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
23 #1 - 1995: Where is my Power plugs
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
24
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4041
diff changeset
25 from __future__ import print_function
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
26
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
27 import sys
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
28
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
29 from roundup import date, instance
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
30
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
31 # position for arguments
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
32 tracker_home_pos = 1
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
33 optional_interval_pos = 2
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
34
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
35 # gather args
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
36 arg_len = len(sys.argv)
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
37 # map pos to length by adding 1.
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
38 if arg_len not in [tracker_home_pos + 1, optional_interval_pos + 1]:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
39 print('Usage: %s tracker-home [interval -1w]' % sys.argv[0])
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
40 if (arg_len < tracker_home_pos + 1 ):
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
41 print(' You need to specify a tracker home directory')
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
42 sys.exit(1)
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
43 instance_home = sys.argv[tracker_home_pos]
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
44 lookback_interval = sys.argv[optional_interval_pos] if \
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
45 len(sys.argv) == optional_interval_pos + 1 else '-1w'
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 # open the instance
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 instance = instance.open(instance_home)
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 db = instance.open('admin')
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
51 old = date.Date(lookback_interval)
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
53 created = [] # [issue_id_created_issue]
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
54 summary = {} # {status_id: [issue_ids in that status]}
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
55 messages = [] # [(number_of_messages, issue_id)]
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 # loop through all the recently-active issues
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 for issue_id in db.issue.filter(None, {'activity': '-1w;'}):
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
59 message_count = 0
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
60 for _x,ts,_userid,action,data in db.issue.history(issue_id):
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
61 if ts < old: # history occurred before our current window
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
62 continue
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 if action == 'create':
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 created.append(issue_id)
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4041
diff changeset
65 elif action == 'set' and 'messages' in data:
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
66 message_count += 1
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
67 summary.setdefault(db.issue.get(issue_id, 'status'),
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
68 []).append(issue_id)
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
69 messages.append((message_count, issue_id))
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
71 #print('STATUS SUMMARY:')
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 #for k,v in summary.items():
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
73 # print(k, len(v))
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4041
diff changeset
75 print('\nCREATED:')
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
76 if created:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
77 print('\n'.join(['%s: %s'%(itemid, db.issue.get(itemid, 'title'))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
78 for itemid in created]))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
79 else:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
80 print("No issue created in interval %s" % lookback_interval)
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4041
diff changeset
82 print('\nRESOLVED:')
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 resolved_id = db.status.lookup('resolved')
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
84 if summary:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
85 # deduplicate - duplicates happen when issue with resolved status
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
86 # has multiple history items (e.g. message or other
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
87 # change after resolution)
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
88 resolved_ids = sorted(set(summary.get(resolved_id, [])), key=int)
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
89 print('\n'.join(['%s: %s' % (itemid, db.issue.get(itemid, 'title'))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
90 for itemid in resolved_ids ]))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
91 else:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
92 print("No issue resolved in interval %s" % lookback_interval)
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4041
diff changeset
94 print('\nTOP TEN MOST DISCUSSED:')
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
95
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
96 # filter out issues with no messages
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
97 messages = [ message for message in messages if message[0] > 0 ]
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
98 if messages:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
99 messages.sort()
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
100 messages.reverse()
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
101 nmax = messages[0][0] or 1
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
102 fmt = '%%%dd - %%s: %%s'%(len(str(nmax)))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
103 print('\n'.join([fmt%(num, itemid, db.issue.get(itemid, 'title'))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
104 for num, itemid in messages[:10]]))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
105 else:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
106 print("No issues discussed in interval %s" % lookback_interval)
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 # vim: set filetype=python ts=4 sw=4 et si

Roundup Issue Tracker: http://roundup-tracker.org/