Package coprs :: Package rest_api
[hide private]
[frames] | no frames]

Source Code for Package coprs.rest_api

 1  # coding: utf-8 
 2  import json 
 3  from flask import Response, url_for, Blueprint, make_response 
 4  from flask_restful import Resource, Api 
 5   
 6  from coprs.exceptions import InsufficientRightsException 
 7   
 8  from coprs.rest_api.exceptions import ApiError 
 9  from coprs.rest_api.resources.build import BuildListR, BuildR 
10  from coprs.rest_api.resources.build_task import BuildTaskListR, BuildTaskR 
11  from coprs.rest_api.resources.mock_chroot import MockChrootListR, MockChrootR 
12  from coprs.rest_api.resources.project import ProjectListR, ProjectR 
13  from coprs.rest_api.resources.project_chroot import ProjectChrootListR, ProjectChrootR 
14   
15  URL_PREFIX = "/api_2" 
16 17 18 -class RootR(Resource):
19 @classmethod
20 - def get(cls):
21 return { 22 "_links": { 23 "self": {"href": url_for(".rootr")}, 24 "projects": { 25 "href": url_for(".projectlistr"), 26 "query_params": [ 27 { 28 "name": u"owner", 29 "type": u"string", 30 "description": u"Select only project owned by the user" 31 } 32 ] 33 }, 34 "mock_chroots": {"href": url_for(".mockchrootlistr")}, 35 "builds": {"href": url_for(".buildlistr")}, 36 "build_tasks": {"href": url_for(".buildtasklistr")}, 37 } 38 }
39
40 41 -class MyApi(Api):
42 # flask-restfull error handling quite buggy right now
43 - def error_router(self, original_handler, e):
44 return original_handler(e)
45 # # def handle_error(self, e): 46 # # 47 # # if isinstance(e, sqlalchemy.orm.exc.NoResultFound): 48 # # return self.make_response(str(e), 404) 49 # # 50 # # 51 # # super(MyApi, self).handle_error(e) 52 53 54 # def register_api(app, db): 55 56 57 rest_api_bp = Blueprint("rest_api_bp", __name__) 58 api = MyApi(rest_api_bp, catch_all_404s=True) 59 60 api.add_resource(RootR, "/") 61 api.add_resource(ProjectListR, "/projects") 62 api.add_resource(ProjectR, "/projects/<int:project_id>") 63 64 api.add_resource(MockChrootListR, "/mock_chroots") 65 api.add_resource(MockChrootR, "/mock_chroots/<name>") 66 67 api.add_resource(BuildListR, "/builds") 68 api.add_resource(BuildR, "/builds/<int:build_id>") 69 70 api.add_resource(ProjectChrootListR, "/projects/<int:project_id>/chroots") 71 api.add_resource(ProjectChrootR, "/projects/<int:project_id>/chroots/<name>") 72 73 74 api.add_resource(BuildTaskListR, "/build_tasks") 75 # todo: add redirect from /build_tasks/<int:build_id> -> /build_tasks?build_id=<build_id> 76 api.add_resource(BuildTaskR, "/build_tasks/<int:build_id>/<name>")
77 78 79 -def register_api_error_handler(app):
80 @app.errorhandler(ApiError) 81 def handle_api_error(error): 82 """ 83 :param ApiError error: 84 """ 85 86 content = { 87 "message": error.msg, 88 } 89 if error.data: 90 content["data"] = error.data 91 92 response = make_response(json.dumps(content), error.code) 93 response.headers["Content-Type"] = "application/json" 94 return response
95