Last active
May 19, 2016 18:45
-
-
Save rdsr/d08df17f90978b887e6960c347eac24c to your computer and use it in GitHub Desktop.
Python script to pull all reviews a user has commented on Works with Review Board 2.0.18
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python2.6 | |
""" | |
Python script to pull all reviews a user has commented on | |
Works with Review Board 2.0.18 | |
""" | |
import site | |
site.addsitedir('/usr/local/linkedin/lib/python2.6/site-packages') | |
import json | |
import time | |
import dateutil | |
import linkedin.cli | |
from linkedin.reviewboard.rbutils import REVIEWBOARD_URL, rb_request | |
def datetime_to_rb(dt): | |
return dt.isoformat() | |
def make_rb_api_url(resource): | |
return REVIEWBOARD_URL + '/api/' + resource | |
def reviews_comment_on(userid, start_time, end_time): | |
commented_on_list = [] | |
request_params = {'status': 'all', | |
'to-users': userid, | |
'last-updated-from': start_time, | |
'last-updated-to': end_time} | |
finished = False | |
review_request_list_resource = rb_request(make_rb_api_url('review-requests/'), params=request_params) | |
while not finished: | |
for review_request_resource in review_request_list_resource['review_requests']: | |
rb_id = review_request_resource['id'] | |
review_list_resource_url = review_request_resource['links']['reviews']['href'] | |
summary = review_request_resource['summary'] | |
originator = review_request_resource['links']['submitter']['title'] | |
review_list_resource = rb_request(review_list_resource_url) | |
for comments in review_list_resource['reviews']: | |
if comments['links']['user']['title'] == userid: | |
commented_on_list.append({'id': rb_id, | |
'originator': originator, | |
'summary': summary}) | |
# Only need to see one comment before adding to the list | |
break | |
if review_request_list_resource['links'].has_key('next'): | |
review_request_list_resource = rb_request(review_request_list_resource['links']['next']['href']) | |
else: | |
finished = True | |
return commented_on_list | |
def dump_to_screen(rb_list): | |
for rb in rb_list: | |
try: | |
print '%s https://rb.corp.linkedin.com/r/%s %8s %s' % (rb['id'], rb['id'], rb['originator'], rb['summary']) | |
except UnicodeEncodeError as u: | |
print(u) | |
def dump_json(rb_list): | |
print json.dumps(rb_list) | |
@linkedin.cli.entrypoint | |
def main(cli): | |
cli.add_argument('--updated-from', action='store', required=True, | |
help='Time to begin search of reviews. Format is ISO8601, {yyyy}-{mm}-{dd}T{HH}:{MM}:{SS}.') | |
cli.add_argument('--updated-to', action='store', required=True, | |
help='Time to end search of reviews. Format is ISO8601, {yyyy}-{mm}-{dd}T{HH}:{MM}:{SS}.') | |
cli.add_argument('--userid', action='store', required=True, | |
help='Userid of the user to search for reviews commented on.') | |
cli.add_argument('--json', action='store_true', default=False, | |
help='If set, output is dumped in json format.') | |
with cli.run(): | |
userid = cli.args.userid | |
# Try and parse the date to handle any strange input | |
# instead of explicitly verifying the format | |
start_period_dt = dateutil.parser.parse(cli.args.updated_from) | |
start_period = datetime_to_rb(start_period_dt) | |
end_period_dt = dateutil.parser.parse(cli.args.updated_to) | |
end_period = datetime_to_rb(end_period_dt) | |
if not cli.args.json: | |
print 'Running on %s from %r until %r' % (userid, start_period, end_period) | |
list_of_reviews_commented_on = reviews_comment_on(userid, start_period, end_period) | |
if cli.args.json: | |
dump_json(list_of_reviews_commented_on) | |
else: | |
dump_to_screen(list_of_reviews_commented_on) | |
# python get_user_rb_comments.py --updated-from 2014-04-01 --updated-to 2016-05-13 --userid rdsr |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment