def rb_client(self): options = {} if os.path.exists(".reviewboardrc"): with open(".reviewboardrc") as reviewboardrc: for line in reviewboardrc: if line.startswith("#"): continue if len(line.strip()) == 0: continue k, v = line.strip().split("=") k = k.strip() v = eval(v.strip()) options[k] = v rbclient = RBClient(options.get('REVIEWBOARD_URL') or 'https://reviews.apache.org/', RetryingSyncTransport) if not rbclient.get_root().get_session()['authenticated']: username = self.opt.reviewboard_username[0] if self.opt.reviewboard_username and \ self.opt.reviewboard_username[0] else raw_input( "Enter review board Username: "******"Enter password for %s: " % username) rbclient.login(username, password) root = rbclient.get_root() root.repository = options.get('REPOSITORY') or None root.branch = options.get('BRANCH') or options.get('TRACKING_BRANCH') root.target_groups = None if options.has_key('TARGET_GROUPS'): root.target_groups = options['TARGET_GROUPS'] return root
def get_rb_client(self): if not self.rb_client: options = {} with open(".reviewboardrc") as reviewboardrc: for line in reviewboardrc: if line.startswith("#"): continue if len(line.strip()) == 0: continue k, v = line.strip().split("=") k = k.strip() v = eval(v.strip()) options[k] = v rbclient = RBClient(options['REVIEWBOARD_URL']) self.repository = options['REPOSITORY'] self.branch = options.get('BRANCH') or options.get('TRACKING_BRANCH') self.target_groups = None if options.has_key('TARGET_GROUPS'): self.target_groups = options['TARGET_GROUPS'] if rbclient.get_root().get_session()['authenticated']: return rbclient.get_root() username = self.opt.reviewboard_username or raw_input("Enter review board Username: "******"Enter password: ") rbclient.login(username, password) self.rb_client = rbclient.get_root() return self.rb_client
def rb_client(self): options = {} if os.path.exists(".reviewboardrc"): with open(".reviewboardrc") as reviewboardrc: for line in reviewboardrc: if line.startswith("#"): continue if len(line.strip()) == 0: continue k, v = line.strip().split("=") k = k.strip() v = eval(v.strip()) options[k] = v rbclient = RBClient( options.get('REVIEWBOARD_URL') or 'https://reviews.apache.org/', RetryingSyncTransport) if not rbclient.get_root().get_session()['authenticated']: username = self.opt.reviewboard_username[0] if self.opt.reviewboard_username and \ self.opt.reviewboard_username[0] else raw_input( "Enter review board Username: "******"Enter password for %s: " % username) rbclient.login(username, password) root = rbclient.get_root() root.repository = options.get('REPOSITORY') or None root.branch = options.get('BRANCH') or options.get('TRACKING_BRANCH') root.target_groups = None if options.has_key('TARGET_GROUPS'): root.target_groups = options['TARGET_GROUPS'] return root
def get_root(): settings = get_config() review = settings['reviewboard'] client = RBClient(review['server']) client.login(review['user'], review['password']) return client.get_root()
def get_rb_client(self): options = {} with open(".reviewboardrc") as reviewboardrc: for line in reviewboardrc: k, v = line.split("=") k = k.strip() v = eval(v.strip()) options[k] = v rbclient = RBClient(options['REVIEWBOARD_URL']) self.repository = options['REPOSITORY'] self.branch = options['BRANCH'] self.target_groups = None if options.has_key('TARGET_GROUPS'): self.target_groups = options['TARGET_GROUPS'] if rbclient.get_root().get_session()['authenticated']: return rbclient username = raw_input("Enter review board Username: "******"Enter password: ") rbclient.login(username, password) return rbclient
def get_open_reviews(args): """ get open reviews to a specified user, group, etc. """ args['status'] = 'pending' if 'max_results' not in args: args['max_results'] = 100 client = RBClient(REVIEWBOARD_URL) # If we have a username and password, login if REVIEWBOARD_USERNAME and REVIEWBOARD_PASSWORD: client.login(REVIEWBOARD_USERNAME, REVIEWBOARD_PASSWORD) root = client.get_root() if not root: logger.error(u'Could not get RBClient root') return None try: req = root.get_review_requests(**args) except APIError: logger.exception(u'Error querying API') return None ret = {'total': req.total_results, 'reviews': []} review_fmt = u"[{user}] {summary} ({url}/r/{id})" for review in req: ret['reviews'].append(review_fmt.format(user=review.get_submitter().username, summary=review.summary, url=REVIEWBOARD_URL, id=review.id)) return ret
class RBInterface(): def __init__(self, url): self.client = RBClient(url) self.root = self.client.get_root() try: self._version = float( self.root.rsp['product']['version'].split()[0]) except: self._version = 0.0 self._templates = self.root.rsp['uri_templates'] self._files = {} self._file_data = {} self._simplefile_data = {} @authentication_wrapper def get_review_requests(self, current_line): return self.root.get_review_requests(start=current_line) @authentication_wrapper def get_review_request(self, review_request_id): review_request_template = self._templates['review_request'] url = review_request_template.format( review_request_id=review_request_id) return self.client.get_url(url) @authentication_wrapper def get_file_src(self, review_request_id, diff_revision, filediff_id): url = self._templates['diff'].format( review_request_id=review_request_id, diff_revision=diff_revision) if url not in self._simplefile_data: diff_obj = self.client.get_url(url) self._simplefile_data[url] = diff_obj diff_obj = self._simplefile_data[url] for filesimple in diff_obj.get_files(): if filesimple['id'] == filediff_id: return filesimple['source_file'] @authentication_wrapper def get_file_dst(self, review_request_id, diff_revision, filediff_id): url = self._templates['diff'].format( review_request_id=review_request_id, diff_revision=diff_revision) if url not in self._simplefile_data: diff_obj = self.client.get_url(url) self._simplefile_data[url] = diff_obj diff_obj = self._simplefile_data[url] for filesimple in diff_obj.get_files(): if filesimple['id'] == filediff_id: return filesimple['dest_file'] @authentication_wrapper def get_file(self, review_request_id, diff_revision, filediff_id): url = self._templates['file'].format( review_request_id=review_request_id, diff_revision=diff_revision, filediff_id=filediff_id) if url in self._files: return self._files[url] file_obj = self.client.get_url(url) self._files[url] = file_obj return self._files[url] def get_dst_lines(self, review_request_id, diff_revision, filediff_id): if self._version >= 3.0: file_obj = self.get_file(review_request_id, diff_revision, filediff_id) return file_obj.get_patched_file()['data'].splitlines() dest_file = self.get_file_dst(review_request_id, diff_revision, filediff_id) updates = self.get_filediff_data(review_request_id, diff_revision, filediff_id) dst_updates = updates['dst_updates'] dst_lines = get_p4_file(dest_file) for lineno, linevalue in dst_updates.iteritems(): dst_lines[lineno] = linevalue return dst_lines def get_src_lines(self, review_request_id, diff_revision, filediff_id): try: if self._version >= 3.0: file_obj = self.get_file(review_request_id, diff_revision, filediff_id) return file_obj.get_original_file()['data'].splitlines() source_file = self.get_file_src(review_request_id, diff_revision, filediff_id) return get_p4_file(source_file) except: return None @authentication_wrapper def get_filediff_data(self, review_request_id, diff_revision, filediff_id): url = self._templates['file'].format( review_request_id=review_request_id, diff_revision=diff_revision, filediff_id=filediff_id) if url in self._file_data: return self._file_data[url] file_obj = self.get_file(review_request_id, diff_revision, filediff_id) # chunks are collected differently if self._version >= 3.0: chunks = file_obj.get_diff_data()['chunks'] else: chunks = file_obj['chunks'] source_line_global_pos = {} dest_line_global_pos = {} dst_updates = {} for chunk in chunks: for line in chunk['lines']: try: source_line_global_pos[int(line[1]) - 1] = int(line[0]) - 1 dest_line_global_pos[int(line[4]) - 1] = int(line[0]) - 1 dst_updates[line[1] - 1] = _html_parser.unescape(line[5]) except: pass self._file_data[url] = { 'source_global_pos': source_line_global_pos, 'dest_global_pos': dest_line_global_pos, 'dst_updates': dst_updates } return self._file_data[url] @authentication_wrapper def make_review(self, review_request_id): review_request = self.get_review_request(review_request_id) try: return review_request.get_reviews().get_review_draft() except: return review_request.get_reviews().create() @authentication_wrapper def make_comment(self, review_request_id, first_line, text, filediff_id, num_lines): request = self.make_review(review_request_id) request.get_diff_comments().create(first_line=first_line, text=text, filediff_id=filediff_id, num_lines=num_lines) def login(self, user, password): self.client.login(user, password)