pagure/pagure/api/user.py

111 lines
2.4 KiB
Python

# -*- coding: utf-8 -*-
"""
(c) 2015 - Copyright Red Hat Inc
Authors:
Pierre-Yves Chibon <pingou@pingoured.fr>
"""
import flask
import pagure
import pagure.exceptions
import pagure.lib
from pagure import APP, SESSION
from pagure.api import API, api_method, APIERROR
@API.route('/user/<username>')
@api_method
def api_view_user(username):
"""
User information
----------------
Use this endpoint to retrieve information about a specific user.
::
GET /api/0/user/<username>
::
GET /api/0/user/ralph
Sample response
^^^^^^^^^^^^^^^
::
{
"forks": [],
"repos": [
{
"date_created": "1426595173",
"description": "",
"id": 5,
"name": "pagure",
"parent": null,
"settings": {
"Minimum_score_to_merge_pull-request": -1,
"Only_assignee_can_merge_pull-request": false,
"Web-hooks": null,
"issue_tracker": true,
"project_documentation": true,
"pull_requests": true
},
"user": {
"fullname": "ralph",
"name": "ralph"
}
}
],
"user": {
"fullname": "ralph",
"name": "ralph"
}
}
"""
httpcode = 200
output = {}
user = pagure.lib.search_user(SESSION, username=username)
if not user:
raise pagure.exceptions.APIError(404, error_code=APIERROR.ENOUSER)
repopage = flask.request.args.get('repopage', 1)
try:
repopage = int(repopage)
except ValueError:
repopage = 1
forkpage = flask.request.args.get('forkpage', 1)
try:
forkpage = int(forkpage)
except ValueError:
forkpage = 1
limit = APP.config['ITEM_PER_PAGE']
repo_start = limit * (repopage - 1)
fork_start = limit * (forkpage - 1)
repos = pagure.lib.search_projects(
SESSION,
username=username,
fork=False)
forks = pagure.lib.search_projects(
SESSION,
username=username,
fork=True)
output['user'] = user.to_json(public=True)
output['repos'] = [repo.to_json(public=True) for repo in repos]
output['forks'] = [repo.to_json(public=True) for repo in forks]
jsonout = flask.jsonify(output)
jsonout.status_code = httpcode
return jsonout