Index: my_reviews.py |
diff --git a/my_reviews.py b/my_reviews.py |
index 4509a489734fcef7a8d39e9e61cdeaa41986669e..28f82e27c841324bbea6b1d4fe6eeb28648e6f41 100755 |
--- a/my_reviews.py |
+++ b/my_reviews.py |
@@ -3,7 +3,7 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-"""Get rietveld stats. |
+"""Get rietveld stats about the review you done, or forgot to do. |
Example: |
- my_reviews.py -o me@chromium.org -Q for stats for last quarter. |
@@ -16,43 +16,58 @@ import sys |
import rietveld |
-def print_reviews(owner, reviewer, created_after, created_before, instance_url): |
- """Prints issues with the filter. |
+def username(email): |
+ return email.split('@', 1)[0] |
- Set with_messages=True to search() call bellow if you want each message too. |
- If you only want issue numbers, use keys_only=True in the search() call. |
- You can then use remote.get_issue_properties(issue, True) to get the data per |
- issue. |
- """ |
+ |
+def print_reviews(reviewer, created_after, created_before, instance_url): |
+ """Prints issues the dude reviewed.""" |
remote = rietveld.Rietveld(instance_url, None, None) |
+ total = 0 |
+ actually_reviewed = 0 |
# See def search() in rietveld.py to see all the filters you can use. |
for issue in remote.search( |
- owner=owner, |
reviewer=reviewer, |
created_after=created_after, |
created_before=created_before, |
- keys_only=False, |
- with_messages=False, |
+ with_messages=True, |
): |
+ total += 1 |
# By default, hide commit-bot and the domain. |
- reviewers = set(r.split('@', 1)[0] for r in issue['reviewers']) |
- reviewers -= set(('commit-bot',)) |
+ reviewers = set(username(r) for r in issue['reviewers']) |
+ reviewers -= set(['commit-bot']) |
# Strip time. |
timestamp = issue['created'][:10] |
+ if any( |
+ username(msg['sender']) == username(reviewer) |
+ for msg in issue['messages']): |
+ reviewed = ' x ' |
+ actually_reviewed += 1 |
+ else: |
+ reviewed = ' ' |
# More information is available, print issue.keys() to see them. |
- print '%d: %s %s' % (issue['issue'], timestamp, ', '.join(reviewers)) |
- |
- |
-def print_count(owner, reviewer, created_after, created_before, instance_url): |
+ print '%7d %s %s O:%-15s R:%s' % ( |
+ issue['issue'], |
+ timestamp, |
+ reviewed, |
+ username(issue['owner_email']), |
+ ', '.join(reviewers)) |
+ percent = 0. |
+ if total: |
+ percent = (actually_reviewed * 100. / total) |
+ print 'You actually reviewed %d issues out of %d (%1.1f%%)' % ( |
+ actually_reviewed, total, percent) |
+ |
+ |
+def print_count(reviewer, created_after, created_before, instance_url): |
remote = rietveld.Rietveld(instance_url, None, None) |
print len(list(remote.search( |
- owner=owner, |
reviewer=reviewer, |
created_after=created_after, |
created_before=created_before, |
- keys_only=False))) |
+ keys_only=True))) |
def get_previous_quarter(today): |
@@ -89,9 +104,9 @@ def main(): |
'--count', action='store_true', |
help='Just count instead of printing individual issues') |
parser.add_option( |
- '-o', '--owner', metavar='<email>', help='Filter on issue owner') |
- parser.add_option( |
- '-r', '--reviewer', metavar='<email>', help='Filter on issue reviewer') |
+ '-r', '--reviewer', metavar='<email>', |
+ default=os.environ.get('EMAIL_ADDRESS'), |
+ help='Filter on issue reviewer, default=%default') |
parser.add_option( |
'-c', '--created_after', metavar='<date>', |
help='Filter issues created after the date') |
@@ -111,11 +126,8 @@ def main(): |
options, args = parser.parse_args() |
if args: |
parser.error('Args unsupported') |
- if not options.owner and not options.reviewer: |
- options.owner = os.environ['EMAIL_ADDRESS'] |
- if '@' not in options.owner: |
- parser.error('Please specify at least -o or -r') |
- print >> sys.stderr, 'Defaulting to owner=%s' % options.owner |
+ |
+ print >> sys.stderr, 'Searching for reviews by %s' % options.reviewer |
if options.last_quarter: |
options.created_after = created_after |
options.created_before = created_before |
@@ -123,13 +135,15 @@ def main(): |
options.created_after, options.created_before) |
if options.count: |
print_count( |
- options.owner, options.reviewer, |
- options.created_after, options.created_before, |
+ options.reviewer, |
+ options.created_after, |
+ options.created_before, |
options.instance_url) |
else: |
print_reviews( |
- options.owner, options.reviewer, |
- options.created_after, options.created_before, |
+ options.reviewer, |
+ options.created_after, |
+ options.created_before, |
options.instance_url) |
return 0 |