1 import flask
2 import sys
3 import time
4
5 from coprs import db
6 from coprs.logic import actions_logic
7 from coprs.logic import builds_logic
8
9 from coprs.views import misc
10 from coprs.views.backend_ns import backend_ns
11 from whoosh.index import LockError
17 """
18 Return list of waiting actions and builds.
19 """
20
21
22 actions_list = [action.to_dict(
23 options={"__columns_except__": ["result", "message", "ended_on"]})
24 for action in actions_logic.ActionsLogic.get_waiting()
25 ]
26
27
28 builds_list = [
29 {
30 "task_id": str(task.build.id)+"-"+task.mock_chroot.name,
31 "build_id": task.build.id,
32 "project_owner": task.build.copr.owner.name,
33 "project_name": task.build.copr.name,
34 "submitter": task.build.user.name,
35 "pkgs": task.build.pkgs,
36 "chroot": task.mock_chroot.name,
37 "buildroot_pkgs": task.build.copr.buildroot_pkgs(task.mock_chroot),
38 "repos": task.build.repos,
39 "memory_reqs": task.build.memory_reqs,
40 "timeout": task.build.timeout
41 }
42 for task in builds_logic.BuildsLogic.get_build_task_queue()
43 ]
44
45 return flask.jsonify({"actions": actions_list, "builds": builds_list})
46
51 result = {}
52
53 for typ, logic_cls in [("actions", actions_logic.ActionsLogic),
54 ("builds", builds_logic.BuildsLogic)]:
55
56 if typ not in flask.request.json:
57 continue
58
59 to_update = {}
60 for obj in flask.request.json[typ]:
61 to_update[obj["id"]] = obj
62
63 existing = {}
64 for obj in logic_cls.get_by_ids(to_update.keys()).all():
65 existing[obj.id] = obj
66
67 non_existing_ids = list(set(to_update.keys()) - set(existing.keys()))
68
69 for i, obj in existing.items():
70 logic_cls.update_state_from_dict(obj, to_update[i])
71
72 i = 5
73 exc_info = None
74 while i > 0:
75 try:
76 db.session.commit()
77 i = -100
78 except LockError:
79 i -= 1
80 exc_info = sys.exc_info()[2]
81 time.sleep(5)
82 if i != -100:
83 raise LockError, None, exc_info
84
85 result.update({"updated_{0}_ids".format(typ): list(existing.keys()),
86 "non_existing_{0}_ids".format(typ): non_existing_ids})
87
88 return flask.jsonify(result)
89
111