1 from logging import getLogger
2
3 import flask
4 from flask import url_for, make_response
5 from flask_restful import Resource
6
7 from ... import db
8 from ...logic.builds_logic import BuildsLogic
9 from ...logic.complex_logic import ComplexLogic
10 from ...logic.helpers import slice_query
11 from ...logic.coprs_logic import CoprsLogic
12 from ...exceptions import ActionInProgressException, InsufficientRightsException
13
14 from ...exceptions import DuplicateException
15
16 from ..common import rest_api_auth_required, render_copr_chroot, render_build, render_project, get_project_safe
17 from ..schemas import ProjectSchema, ProjectCreateSchema
18 from ..exceptions import ObjectAlreadyExists, CannotProcessRequest, AccessForbidden
19 from ..util import mm_deserialize, get_request_parser, arg_bool
20
21 log = getLogger(__name__)
25
26 @rest_api_auth_required
28 """
29 Creates new copr
30 """
31 user = flask.g.user
32 result = mm_deserialize(ProjectCreateSchema(), flask.request.data.decode("utf-8"))
33
34 req = result.data
35 name = req.pop("name")
36
37 selected_chroots = req.pop("chroots", None)
38
39 group_name = req.pop("group", None)
40 if group_name:
41 group = ComplexLogic.get_group_by_name_safe(group_name)
42 else:
43 group = None
44
45 try:
46 project = CoprsLogic.add(
47 user=user, check_for_duplicates=True,
48 name=name,
49 selected_chroots=selected_chroots,
50 group=group,
51 **req
52 )
53
54 db.session.commit()
55 except DuplicateException as error:
56 raise ObjectAlreadyExists(msg=str(error))
57
58 resp = make_response("", 201)
59 resp.headers["Location"] = url_for(".projectr", project_id=project.id)
60 return resp
61
63 parser = get_request_parser()
64 parser.add_argument('owner', type=str)
65 parser.add_argument('group', type=str)
66 parser.add_argument('name', type=str)
67 parser.add_argument('limit', type=int)
68 parser.add_argument('offset', type=int)
69 parser.add_argument('search_query', type=str)
70
71 req_args = parser.parse_args()
72
73 if req_args["search_query"]:
74 query = CoprsLogic.get_multiple_fulltext(req_args["search_query"])
75 else:
76 query = CoprsLogic.get_multiple(flask.g.user)
77
78 query = CoprsLogic.set_query_order(query)
79
80 if req_args["owner"]:
81 query = CoprsLogic.filter_by_user_name(query, req_args["owner"])
82
83 if req_args["group"]:
84 query = CoprsLogic.filter_by_group_name(query, req_args["group"])
85
86 if req_args["name"]:
87 query = CoprsLogic.filter_by_name(query, req_args["name"])
88
89 limit = 100
90 offset = 0
91 if req_args["limit"]:
92 limit = req_args["limit"]
93 if req_args["offset"]:
94 offset = req_args["offset"]
95
96 query = slice_query(query, limit, offset)
97 coprs_list = query.all()
98
99 result_dict = {
100 "_links": {
101 "self": {"href": url_for(".projectlistr", **req_args)}
102 },
103 "projects": [render_project(copr) for copr in coprs_list],
104 }
105
106 return result_dict
107
110
111 @rest_api_auth_required
112 - def delete(self, project_id):
124
125 - def get(self, project_id):
153
154 @rest_api_auth_required
155 - def put(self, project_id):
174