def show(self, number=None, verbose=False, webbrowser=False, **kwargs): validate_number(number, example="%s show 1" % get_prog()) if webbrowser: issue_url_template = "https://github.com/%s/%s/issues/%s" issue_url = issue_url_template % (self.user, self.repo, number) try: browser.open(issue_url) except: print "error: opening page in web browser failed" else: sys.exit(0) issue = self.__get_issue(number) if not verbose: pprint_issue(issue) else: printer = Pager() lines = format_issue(issue, verbose=True) lines.insert(0, " ") printer.write("\n".join(lines)) if issue.get("comments", 0) > 0: comments = self.__submit('comments', number) comments = get_key(comments, 'comments') lines = [] # reset total = len(comments) for i in range(total): comment = comments[i] lines.extend(format_comment(comment, i+1, total)) lines.append(" ") printer.write("\n".join(lines)) printer.close()
def label(self, command, label, number=None, **kwargs): validate_number(number, example="%s label %s %s 1" % (get_prog(), command, label)) if command not in ['add', 'remove']: msg = "label command should use either 'add' or 'remove'\n"\ "example: %s label add %s %s" % (get_prog(), label, number) raise Exception(msg) label = urllib.quote(label) label = label.replace(".", "%2E") # this is not done by urllib.quote result = self.__submit('label/%s' % command, label, number) labels = get_key(result, 'labels') if labels: print "labels for issue #%s:" % number for label in labels: print "- %s" % label else: print "no labels found for issue #%s" % number
def comment(self, number=None, message=None, **kwargs): validate_number(number, example="%s comment 1" % get_prog()) gh_issue = self.__get_issue(number) comment = create_comment(issue=gh_issue, text=message) post_data = {'comment': comment} result = self.__submit('comment', number, data=post_data) returned_comment = get_key(result, 'comment') if returned_comment: print "comment for issue #%s submitted successfully" % number
def validate_number(number, example): msg = "number required\nexample: %s" % example.replace("%prog", get_prog()) if not number: raise Exception(msg) else: try: int(number) except: raise Exception(msg)
def edit(self, number=None, **kwargs): validate_number(number, example="%s edit 1" % get_prog()) gh_issue = self.__get_issue(number) output = {'title': gh_issue['title'], 'body': gh_issue['body']} post_data = create_edit_issue(gh_issue) if post_data['title'] == output['title'] and \ post_data['body'].splitlines() == output['body'].splitlines(): print "no changes found" sys.exit(1) result = self.__submit('edit', number, data=post_data) issue = get_key(result, 'issue') pprint_issue(issue)
def show(self, number=None, webbrowser=False, **kwargs): validate_number(number, example="%s show 1" % get_prog()) if webbrowser: issue_url_template = "http://github.com/%s/%s/issues/%s/find" issue_url = issue_url_template % (self.user, self.repo, number) try: browser.open(issue_url) except: print "error: opening page in web browser failed" else: sys.exit(0) issue = self.__get_issue(number) pprint_issue(issue)
def search(self, search_term=None, state='open', verbose=False, **kwargs): if not search_term: example = "%s search experimental" % get_prog() msg = "error: search term required\nexample: %s" % example print msg sys.exit(1) search_term_quoted = urllib.quote_plus(search_term) search_term_quoted = search_term_quoted.replace(".", "%2E") result = self.__submit('search', search_term, state) issues = get_key(result, 'issues') header = "# searching for '%s' returned %s issues" % (search_term, len(issues)) printer = Pager() printer.write(header) for issue in issues: lines = format_issue(issue, verbose) printer.write("\n".join(lines)) printer.close()
def reopen(self, number=None, **kwargs): validate_number(number, example="%s open 1" % get_prog()) result = self.__submit('reopen', number) issue = get_key(result, 'issue') pprint_issue(issue)
def close(self, number=None, **kwargs): validate_number(number, example="%s close 1" % get_prog()) result = self.__submit('close', number) issue = get_key(result, 'issue') pprint_issue(issue)