Index: my_reviews.py |
diff --git a/my_reviews.py b/my_reviews.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..76a9ee7d34b242e4563ec50b384f924ce10b47bb |
--- /dev/null |
+++ b/my_reviews.py |
@@ -0,0 +1,95 @@ |
+#!/usr/bin/env python |
+# Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Get rietveld stats. |
+ |
+Example: |
+ - my_reviews.py -o me@chromium.org -Q for stats for last quarter. |
+""" |
+import datetime |
+import optparse |
+import os |
+import sys |
+ |
+import rietveld |
+ |
+ |
+def print_reviews(owner, reviewer, created_after, created_before): |
+ """Prints issues with the filter. |
+ |
+ 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. |
+ """ |
+ instance_url = 'codereview.chromium.org' |
+ remote = rietveld.Rietveld(instance_url, None, None) |
+ |
+ # 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, |
+ ): |
+ # By default, hide commit-bot and the domain. |
+ reviewers = set(r.split('@', 1)[0] for r in issue['reviewers']) |
+ reviewers -= set(('commit-bot',)) |
+ # Strip time. |
+ timestamp = issue['created'][:10] |
+ |
+ # More information is available, print issue.keys() to see them. |
+ print '%d: %s %s' % (issue['issue'], timestamp, ', '.join(reviewers)) |
+ |
+ |
+def get_previous_quarter(today): |
+ """There are four quarters, 01-03, 04-06, 07-09, 10-12. |
+ |
+ If today is in the last month of a quarter, assume it's the current quarter |
+ that is requested. |
+ """ |
+ year = today.year |
+ month = today.month - (today.month % 3) |
+ if not month: |
+ month = 12 |
+ year -= 1 |
+ previous_month = month - 2 |
+ return ( |
+ '%d-%02d-01' % (year, previous_month), |
+ '%d-%02d-01' % (year, month)) |
+ |
+ |
+def main(): |
+ parser = optparse.OptionParser(description=sys.modules[__name__].__doc__) |
+ parser.add_option('-o', '--owner') |
+ parser.add_option('-r', '--reviewer') |
+ parser.add_option('-c', '--created_after') |
+ parser.add_option('-C', '--created_before') |
+ parser.add_option('-Q', '--last_quarter', action='store_true') |
+ # Remove description formatting |
+ parser.format_description = lambda x: parser.description |
+ 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 'Defaulting to owner=%s' % options.owner |
+ if options.last_quarter: |
+ today = datetime.date.today() |
+ options.created_after, options.created_before = get_previous_quarter(today) |
+ print 'Using range %s to %s' % ( |
+ options.created_after, options.created_before) |
+ print_reviews( |
+ options.owner, options.reviewer, |
+ options.created_after, options.created_before) |
+ return 0 |
+ |
+ |
+if __name__ == '__main__': |
+ sys.exit(main()) |