| 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())
 | 
| 
 |