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 req = mm_deserialize(ProjectCreateSchema(), flask.request.data.decode("utf-8"))
33 name = req.pop("name")
34
35 selected_chroots = req.pop("chroots", None)
36
37 group_name = req.pop("group", None)
38 if group_name:
39 group = ComplexLogic.get_group_by_name_safe(group_name)
40 else:
41 group = None
42
43 try:
44 project = CoprsLogic.add(
45 user=user, check_for_duplicates=True,
46 name=name,
47 selected_chroots=selected_chroots,
48 group=group,
49 **req
50 )
51
52 db.session.commit()
53 except DuplicateException as error:
54 raise ObjectAlreadyExists(msg=str(error))
55
56 resp = make_response("", 201)
57 resp.headers["Location"] = url_for(".projectr", project_id=project.id)
58 return resp
59
61 parser = get_request_parser()
62 parser.add_argument('owner', type=str)
63 parser.add_argument('group', type=str)
64 parser.add_argument('name', type=str)
65 parser.add_argument('limit', type=int)
66 parser.add_argument('offset', type=int)
67 parser.add_argument('search_query', type=str)
68
69 req_args = parser.parse_args()
70
71 if req_args["search_query"]:
72 query = CoprsLogic.get_multiple_fulltext(req_args["search_query"])
73 else:
74 query = CoprsLogic.get_multiple(flask.g.user)
75
76 query = CoprsLogic.set_query_order(query)
77
78 if req_args["owner"]:
79 query = CoprsLogic.filter_by_user_name(query, req_args["owner"])
80
81 if req_args["group"]:
82 query = CoprsLogic.filter_by_group_name(query, req_args["group"])
83
84 if req_args["name"]:
85 query = CoprsLogic.filter_by_name(query, req_args["name"])
86
87 limit = 100
88 offset = 0
89 if req_args["limit"]:
90 limit = req_args["limit"]
91 if req_args["offset"]:
92 offset = req_args["offset"]
93
94 query = slice_query(query, limit, offset)
95 coprs_list = query.all()
96
97 result_dict = {
98 "_links": {
99 "self": {"href": url_for(".projectlistr", **req_args)}
100 },
101 "projects": [render_project(copr) for copr in coprs_list],
102 }
103
104 return result_dict
105
108
109 @rest_api_auth_required
110 - def delete(self, project_id):
122
123 - def get(self, project_id):
151
152 @rest_api_auth_required
153 - def put(self, project_id):
171