diff --git a/pagure/__init__.py b/pagure/__init__.py index 76bd675..7fa2934 100644 --- a/pagure/__init__.py +++ b/pagure/__init__.py @@ -392,6 +392,7 @@ import pagure.ui.repo from pagure.api import API from pagure.api import issue from pagure.api import fork +from pagure.api import user APP.register_blueprint(API) import pagure.internal diff --git a/pagure/api/user.py b/pagure/api/user.py new file mode 100644 index 0000000..3e658ad --- /dev/null +++ b/pagure/api/user.py @@ -0,0 +1,113 @@ +# -*- coding: utf-8 -*- + +""" + (c) 2015 - Copyright Red Hat Inc + + Authors: + Pierre-Yves Chibon + +""" + +import flask + +from sqlalchemy.exc import SQLAlchemyError + +import pagure +import pagure.exceptions +import pagure.lib +from pagure import APP, SESSION, is_repo_admin, authenticated +from pagure.api import ( + API, api_method, api_login_required, api_login_optional, APIERROR +) + + + +@API.route('/user/') +@api_method +def api_view_user(username): + """ + User information + ================ + Use this endpoint to retrieve information about a specific user. + + :: + + /api/0/user/ + /api/0/user/ralph + + Accepts GET queries only. + + Sample response: + + :: + + { + "forks": [], + "repos": [ + { + "date_created": "1426595173", + "description": "", + "id": 5, + "name": "progit", + "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