def make_issue(data, token=False):
    if not data['onto-repo'] in db.get_repo_info():
        return "Can't create issue for unknown repo" + r.content, 500
    if 'category-name' in data:
        data['categories'] = list(
            zip(data['category-name'], data['category-desc']))
    if not token:
        token = ah.installationToken(db.get_installation(data['onto-repo']))
        print(token)
    url = 'https://api.github.com/repos/{repo}/issues'.format(
        repo=data['onto-repo'])
    title = ""
    if data["subtype"] == "new":
        title = "Create: " + data['trait-name']
    elif data["subtype"] == "update":
        title = "Update: " + data["update-search-selected"]
    elif data["subtype"] == "synonym":
        title = "Synonym for: " + data["synonym-search-selected"]
    issue = {'title': title, 'body': render_template('issue.md.j2', data=data)}
    print(url, issue)
    s = requests.session()
    s.headers.update({'Authorization': 'token {token}'.format(token=token)})
    r = s.post(url, json=issue)
    if r.status_code == 201:
        print('Success')
        assign_and_label_issue(json.loads(r.content), data)
        return r.content, 201
    else:
        print('Could not create Issue')
        print('Response:', r.content)
        return 'Could not create Issue\nResponse:' + str(r.content), 500
def dowload_obo(repo, zipball_url):
    print("Downloading release for {repo}:".format(repo=repo), zipball_url)
    token = ah.installationToken(db.get_installation(repo))
    obopath = Path(db.get_repo_info(repo=repo)['master_obo_path'])
    download = zipball_url
    s = requests.session()
    s.headers.update({'Authorization': 'token {token}'.format(token=token)})
    r = s.get(download)
    with zipfile.ZipFile(io.BytesIO(r.content)) as zp:
        obos = [
            f for f in zp.namelist()
            if obopath == Path(f).relative_to(f.split(os.path.sep)[0])
        ]
        obos.sort()
        if (len(obos) > 0):
            master_obo = obos[0]
            with io.TextIOWrapper(zp.open(master_obo),
                                  encoding="utf-8") as to_parse:
                db.parse_and_update(repo, to_parse)
def assign_and_label_issue(issue_obj, data):
    token = ah.installationToken(db.get_installation(data['onto-repo']))
    url = issue_obj["url"]
    assignees = db.get_repo_info(repo=data['onto-repo'])["curators"]
    labels = []
    if data["subtype"] == "new":
        labels.append("Creation Request")
    elif data["subtype"] == "update":
        labels.append("Update Request")
    elif data["subtype"] == "synonym":
        labels.append("Synonym Request")

    s = requests.session()
    s.headers.update({'Authorization': 'token {token}'.format(token=token)})
    r = s.patch(url, json={"labels": labels, "assignees": assignees})

    if r.status_code == 200:
        print('Success')
    else:
        print('Could not label Issue')
        print('Response:', r.content)
        return 'Could not create Label\nResponse:' + r.content, 500
def deploy():
    install_id = request.args.get('installation_id')
    return render_template('deploy.html.j2',
                           repos=db.get_repo_info(install_id=install_id))
def variables():
    repo = request.args.get('repo')
    if not db.get_repo_info(repo=repo):
        return "Can't get variables for unknown repo " + repo, 500
    variable_list = db.get_variables(repo)
    return jsonify(variable_list)
def root():
    return render_template('form.html.j2', repos=db.get_repo_info())