Exemplo n.º 1
0
def get_search_results(query_string=None):
    '''XHR endpoint to get results from GitHub's Search API.

    We're specifically searching "issues" here, which seems to make the most
    sense. Note that the rate limit is different for Search: 30 requests per
    minute.

    If a user hits the rate limit, the Flask Limiter extension will send a
    429. See @app.error_handler(429) in views.py.

    This method can take a query_string argument, to be called from other
    endpoints, or the query_string can be passed in via the Request object.

    Not cached.
    '''
    search_uri = 'https://api.github.com/search/issues'
    # TODO: handle sort and order parameters.
    params = request.args.copy()

    if query_string is None:
        query_string = params.get('q')
        # restrict results to our repo.
    query_string += " repo:{0}".format(REPO_PATH)
    params['q'] = query_string

    if g.user:
        request_headers = get_request_headers(g.request_headers)
        results = github.raw_request('GET', 'search/issues', params=params,
                                     headers=request_headers)
    else:
        results = proxy_request('get', params=params, uri=search_uri)
    return (results.content, results.status_code, get_headers(results))
Exemplo n.º 2
0
def proxy_comments(number):
    '''XHR endpoint to get issues comments from GitHub.

    Either as an authed user, or as one of our proxy bots.
    '''
    if request.method == 'POST':
        try:
            comment_data = json.loads(request.data)
            body = json.dumps({"body": comment_data['rawBody']})
            path = 'repos/{0}/{1}/comments'.format(ISSUES_PATH, number)
            comment = github.raw_request('POST', path, data=body)
            return (json.dumps(comment.json()), comment.status_code, {
                'content-type': JSON_MIME
            })
        except GitHubError as e:
            print('GitHubError: ', e.response.status_code)
            return (':(', e.response.status_code)
    else:
        request_headers = get_request_headers(g.request_headers)

        if g.user:
            comments = github.raw_request('GET',
                                          'repos/{0}/{1}/comments'.format(
                                              ISSUES_PATH, number),
                                          headers=request_headers)
        else:
            comments = proxy_request('get',
                                     '/{0}/comments'.format(number),
                                     headers=request_headers)
        return (comments.content, comments.status_code, get_headers(comments))
Exemplo n.º 3
0
def get_search_results(query_string=None, params=None):
    """XHR endpoint to get results from GitHub's Search API.

    We're specifically searching "issues" here, which seems to make the most
    sense. Note that the rate limit is different for Search: 30 requests per
    minute.

    If a user hits the rate limit, the Flask Limiter extension will send a
    429. See @app.error_handler(429) in views.py.

    This method can take a query_string argument, to be called from other
    endpoints, or the query_string can be passed in via the Request object.

    Not cached.
    """
    params = params or request.args.copy()
    query_string = query_string or params.get("q")
    search_uri = "https://api.github.com/search/issues"

    # restrict results to our repo.
    query_string += " repo:{0}".format(REPO_PATH)
    params["q"] = query_string

    # convert issues api to search api params here.
    params = normalize_api_params(params)
    request_headers = get_request_headers(g.request_headers)

    if g.user:
        results = github.raw_request("GET", "search/issues", params=params, headers=request_headers)
    else:
        results = proxy_request("get", params=params, uri=search_uri, headers=request_headers)
    return (results.content, results.status_code, get_headers(results))
Exemplo n.º 4
0
def proxy_comments(number):
    """XHR endpoint to get issues comments from GitHub.

    Either as an authed user, or as one of our proxy bots.
    """
    if request.method == "POST":
        try:
            comment_data = json.loads(request.data)
            body = json.dumps({"body": comment_data["rawBody"]})
            path = "repos/{0}/{1}/comments".format(ISSUES_PATH, number)
            comment = github.raw_request("POST", path, data=body)
            return (json.dumps(comment.json()), comment.status_code, {"content-type": JSON_MIME})
        except GitHubError as e:
            print("GitHubError: ", e.response.status_code)
            return (":(", e.response.status_code)
    else:
        request_headers = get_request_headers(g.request_headers)

        if g.user:
            comments = github.raw_request(
                "GET", "repos/{0}/{1}/comments".format(ISSUES_PATH, number), headers=request_headers
            )
        else:
            comments = proxy_request("get", "/{0}/comments".format(number), headers=request_headers)
        return (comments.content, comments.status_code, get_headers(comments))
Exemplo n.º 5
0
def proxy_comments(number):
    '''XHR endpoint to get issues comments from GitHub.

    Either as an authed user, or as one of our proxy bots.
    '''
    if request.method == 'POST':
        try:
            comment_data = json.loads(request.data)
            body = json.dumps({"body": comment_data['rawBody']})
            path = 'repos/{0}/{1}/comments'.format(ISSUES_PATH, number)
            comment = github.raw_request('POST', path, data=body)
            return (json.dumps(comment.json()), comment.status_code,
                    {'content-type': JSON_MIME})
        except GitHubError as e:
            print('GitHubError: ', e.response.status_code)
            return (':(', e.response.status_code)
    else:
        if g.user:
            request_headers = get_request_headers(g.request_headers)
            comments = github.raw_request(
                'GET',
                'repos/{0}/{1}/comments'.format(
                    ISSUES_PATH, number),
                headers=request_headers
                )
        else:
            comments = proxy_request('get', '/{0}/comments'.format(number))
        return (comments.content, comments.status_code, get_headers(comments))
Exemplo n.º 6
0
def proxy_issue(number):
    '''XHR endpoint to get issue data from GitHub.

    either as an authed user, or as one of our proxy bots.
    '''
    request_headers = get_request_headers(g.request_headers)
    path = 'repos/{0}/{1}'.format(ISSUES_PATH, number)
    return api_request('get', path)
Exemplo n.º 7
0
def user_issues():
    """API endpoint to return issues filed by the logged in user.

    Not cached.
    """
    get_user_info()
    path = "repos/{0}?creator={1}&state=all".format(ISSUES_PATH, session["username"])
    request_headers = get_request_headers(g.request_headers)
    issues = github.raw_request("GET", path, headers=request_headers)
    return (issues.content, issues.status_code, get_headers(issues))
Exemplo n.º 8
0
def proxy_issue(number):
    """XHR endpoint to get issue data from GitHub.

    either as an authed user, or as one of our proxy bots.
    """
    request_headers = get_request_headers(g.request_headers)
    if g.user:
        issue = github.raw_request("GET", "repos/{0}/{1}".format(ISSUES_PATH, number), headers=request_headers)
    else:
        issue = proxy_request("get", "/{0}".format(number), headers=request_headers)
    return (issue.content, issue.status_code, get_headers(issue))
Exemplo n.º 9
0
def user_issues():
    '''API endpoint to return issues filed by the logged in user.

    Not cached.
    '''
    get_user_info()
    path = 'repos/{0}?creator={1}&state=all'.format(ISSUES_PATH,
                                                    session['username'])
    request_headers = get_request_headers(g.request_headers)
    issues = github.raw_request('GET', path, headers=request_headers)
    return (issues.content, issues.status_code, get_headers(issues))
Exemplo n.º 10
0
def proxy_issue(number):
    '''XHR endpoint to get issue data from GitHub.

    either as an authed user, or as one of our proxy bots.
    '''
    if g.user:
        request_headers = get_request_headers(g.request_headers)
        issue = github.raw_request('GET', 'repos/{0}/{1}'.format(
            ISSUES_PATH, number), headers=request_headers)
    else:
        issue = proxy_request('get', '/{0}'.format(number))
    return (issue.content, issue.status_code, get_headers(issue))
Exemplo n.º 11
0
def user_issues():
    '''API endpoint to return issues filed by the logged in user.

    Not cached.
    '''
    get_user_info()
    path = 'repos/{0}?creator={1}&state=all'.format(
        ISSUES_PATH, session['username']
    )
    request_headers = get_request_headers(g.request_headers)
    issues = github.raw_request('GET', path, headers=request_headers)
    return (issues.content, issues.status_code, get_headers(issues))
Exemplo n.º 12
0
def get_repo_labels():
    '''XHR endpoint to get all possible labels in a repo.

    Cached for 10 minutes.
    '''
    if g.user:
        request_headers = get_request_headers(g.request_headers)
        path = 'repos/{0}/labels'.format(REPO_PATH)
        labels = github.raw_request('GET', path, headers=request_headers)
        return (labels.content, labels.status_code, get_headers(labels))
    else:
        # only authed users should be hitting this endpoint
        abort(401)
Exemplo n.º 13
0
def get_repo_labels():
    '''XHR endpoint to get all possible labels in a repo.

    Cached for 10 minutes.
    '''
    if g.user:
        request_headers = get_request_headers(g.request_headers)
        path = 'repos/{0}/labels'.format(REPO_PATH)
        labels = github.raw_request('GET', path, headers=request_headers)
        return (labels.content, labels.status_code, get_headers(labels))
    else:
        # only authed users should be hitting this endpoint
        abort(401)
Exemplo n.º 14
0
def get_rate_limit():
    '''Endpoint to display the current GitHub API rate limit.

    Will display for the logged in user, or webcompat-bot if not logged in.
    See https://developer.github.com/v3/rate_limit/.
    '''

    rate_limit_uri = 'https://api.github.com/rate_limit'
    request_headers = get_request_headers(g.request_headers)
    if g.user:
        rl = github.raw_request('GET', 'rate_limit', headers=request_headers)
    else:
        rl = proxy_request('get', uri=rate_limit_uri, headers=request_headers)
    return rl.content
Exemplo n.º 15
0
def get_rate_limit():
    """Endpoint to display the current GitHub API rate limit.

    Will display for the logged in user, or webcompat-bot if not logged in.
    See https://developer.github.com/v3/rate_limit/.
    """

    rate_limit_uri = "https://api.github.com/rate_limit"
    request_headers = get_request_headers(g.request_headers)
    if g.user:
        rl = github.raw_request("GET", "rate_limit", headers=request_headers)
    else:
        rl = proxy_request("get", uri=rate_limit_uri, headers=request_headers)
    return rl.content
Exemplo n.º 16
0
def get_rate_limit():
    '''Endpoint to display the current GitHub API rate limit.

    Will display for the logged in user, or webcompat-bot if not logged in.
    See https://developer.github.com/v3/rate_limit/.
    '''

    rate_limit_uri = 'https://api.github.com/rate_limit'
    if g.user:
        request_headers = get_request_headers(g.request_headers)
        rl = github.raw_request('GET', 'rate_limit', headers=request_headers)
    else:
        rl = proxy_request('get', uri=rate_limit_uri)
    return rl.content
Exemplo n.º 17
0
def proxy_issue(number):
    '''XHR endpoint to get issue data from GitHub.

    either as an authed user, or as one of our proxy bots.
    '''
    request_headers = get_request_headers(g.request_headers)
    if g.user:
        issue = github.raw_request('GET',
                                   'repos/{0}/{1}'.format(ISSUES_PATH, number),
                                   headers=request_headers)
    else:
        issue = proxy_request('get',
                              '/{0}'.format(number),
                              headers=request_headers)
    return (issue.content, issue.status_code, get_headers(issue))
Exemplo n.º 18
0
def proxy_issue(number):
    '''XHR endpoint to get issue data from GitHub.

    either as an authed user, or as one of our proxy bots.
    '''
    request_headers = get_request_headers(g.request_headers)
    if g.user:
        issue = github.raw_request('GET', 'repos/{0}/{1}'.format(
            ISSUES_PATH, number), headers=request_headers)
    else:
        issue = proxy_request('get', '/{0}'.format(number),
                              headers=request_headers)
    if issue.status_code != 404:
        return (issue.content, issue.status_code, get_headers(issue))
    else:
        # We may want in the future handle 500 type of errors.
        # This will return the JSON version of 404
        abort(404)
Exemplo n.º 19
0
def get_search_results(query_string=None, params=None):
    '''XHR endpoint to get results from GitHub's Search API.

    We're specifically searching "issues" here, which seems to make the most
    sense. Note that the rate limit is different for Search: 30 requests per
    minute.

    If a user hits the rate limit, the Flask Limiter extension will send a
    429. See @app.error_handler(429) in views.py.

    This method can take a query_string argument, to be called from other
    endpoints, or the query_string can be passed in via the Request object.

    Not cached.
    '''
    params = params or request.args.copy()
    query_string = query_string or params.get('q')
    search_uri = 'https://api.github.com/search/issues'

    # restrict results to our repo.
    query_string += " repo:{0}".format(REPO_PATH)
    params['q'] = query_string

    # convert issues api to search api params here.
    params = normalize_api_params(params)
    request_headers = get_request_headers(g.request_headers)

    if g.user:
        results = github.raw_request('GET',
                                     'search/issues',
                                     params=params,
                                     headers=request_headers)
    else:
        results = proxy_request('get',
                                params=params,
                                uri=search_uri,
                                headers=request_headers)
    return (results.content, results.status_code, get_headers(results))