Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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"
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
 def __init__(self):
   self._owner, self._repo = Helper.owner_and_repo()
   self._api = GithubAPIGateway(token=os.environ['GITHUB_TOKEN'])
   self._cache = {}
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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)