def create_issue(task): api = GithubAPIGateway(token=os.environ["GITHUB_TOKEN"]) username = api.call("user")[0]["login"] body = "### {0}\n___\n\n{1}".format(task["permalink"].encode("utf-8"), task["description"].encode("utf-8")) owner, repo = Helper.owner_and_repo() issue = api.call( "create_issue", owner=owner, repo=repo, data={"title": task["title"], "assignee": username, "body": body} )[0] return issue
from GithubAPIGateway import GithubAPIGateway import Helper import os import sys import argparse import webbrowser parser = argparse.ArgumentParser() parser.add_argument("-o", "--open", action="store_true") args = parser.parse_args() api = GithubAPIGateway(token=os.environ['GITHUB_TOKEN']) owner, repo = Helper.owner_and_repo() branch = str(Helper.current_branch()) prs = api.call('list_pr', owner=owner, repo=repo, data={ 'head': branch })[0] url = None for pr in prs: if pr['head']['ref'] == branch: url = pr['html_url'] break if url is not None: print url if args.open: webbrowser.open(url) else: print "No PRs on this branch"
from GithubAPIGateway import GithubAPIGateway import Helper import os import sys import argparse parser = argparse.ArgumentParser() parser.add_argument("-d", "--description") parser.add_argument("title") args = parser.parse_args() if len(args.title) < 5: print "The title should be 5 characters or longer" parser.print_usage() sys.exit(2) api = GithubAPIGateway(token=os.environ['GITHUB_TOKEN']) username = api.call('user')[0]['login'] data = { 'title': args.title, 'assignee': username } if args.description is not None: data.update(body=args.description) owner, repo = Helper.owner_and_repo() issue = api.call('create_issue', owner=owner, repo=repo, data=data)[0] branch_name = Helper.branch_name(issue) Helper.create_branch(branch_name)
def __init__(self): self._owner, self._repo = Helper.owner_and_repo() self._api = GithubAPIGateway(token=os.environ['GITHUB_TOKEN']) self._cache = {}
class GithubAPIDriver(object): def __init__(self): self._owner, self._repo = Helper.owner_and_repo() self._api = GithubAPIGateway(token=os.environ['GITHUB_TOKEN']) self._cache = {} def get_open_pr(self): ret = self._cache.get('pr') if ret is not None: return ret branch = str(Helper.current_branch()) prs = self._api.call('list_pr', owner=self._owner, repo=self._repo, data={ 'head': branch })[0] for pr in prs: if pr['head']['ref'] == branch: self._cache['pr'] = pr return pr return None def get_current_issue(self): ret = self._cache.get('issue') if ret is not None: return ret issue_number = Helper.issue_number_from_branch() ret = self._api.call('list_issue', owner=self._owner, repo=self._repo, number=issue_number)[0] self._cache['issue'] = ret return ret def get_pr_comments(self): ret = self._cache.get('pr_comments') if ret is not None: return ret pr = self.get_open_pr() ret = None if pr is not None: ret = self._api.call('list_issue_comments', owner=self._owner, repo=self._repo, number=pr['number'])[0] else: ret = [] self._cache['pr_comments'] = ret return ret def get_pr_commits(self): ret = self._cache.get('pr_commits') if ret is not None: return ret pr = self.get_open_pr() if pr is not None: ret = self._api.call('list_pr_commits', owner=self._owner, repo=self._repo, number=pr['number'])[0] else: ret = [] self._cache['pr_commits'] = ret return ret def merge_pr(self): pr = self.get_open_pr() if pr is not None: return self._api.call('merge_pr', owner=self._owner, repo=self._repo, number=pr['number'], data={})[0] else: return None def get_user(self): ret = self._cache.get('user') if ret is not None: return ret ret = self._api.call('user')[0] self._cache['user'] = ret return ret def get_pr_review_comments(self): ret = self._cache.get('pr_review_comments') if ret is not None: return ret pr = self.get_open_pr() if pr is not None: ret = self._api.call('list_pr_review_comments', owner=self._owner, repo=self._repo, number=pr['number'])[0] else: ret = [] self._cache['pr_review_comments'] = ret return ret def get_pr_and_review_comments(self): review_comments = self.get_pr_review_comments() pr_comments = self.get_pr_comments() comments = {} for comment_original in (review_comments + pr_comments): comment = copy.deepcopy(comment_original) user = comment['user']['login'] if comments.get(user) is None: comments[user] = [] comment['updated_at_datetime'] = datetime.strptime(comment['updated_at'], '%Y-%m-%dT%H:%M:%SZ') comments[user].append(comment) for user, comments_array in comments.iteritems(): comments_array.sort(key=itemgetter('updated_at_datetime')) return comments
from GithubAPIGateway import GithubAPIGateway from git import Repo import os import sys import re import Helper api = GithubAPIGateway(token=os.environ['GITHUB_TOKEN']) issue = None owner, repo = Helper.owner_and_repo() if len(sys.argv) <= 1: issue = api.call('list_issues', org=owner)[0][0] else: issue = api.call('list_issue', owner=owner, repo=repo, number=sys.argv[1])[0] branch_name = Helper.branch_name(issue) Helper.create_branch(branch_name)