1
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
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
42
44 return original_handler(e)
45
46
47
48
49
50
51
52
53
54
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
76 api.add_resource(BuildTaskR, "/build_tasks/<int:build_id>/<name>")
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