Package coprs :: Package views :: Package backend_ns :: Module backend_general
[hide private]
[frames] | no frames]

Source Code for Module coprs.views.backend_ns.backend_general

 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 
12 13 @backend_ns.route('/waiting/') 14 @misc.backend_authenticated 15 -def waiting():
16 """ 17 Return list of waiting actions and builds. 18 """ 19 20 # models.Actions 21 actions_list = [action.to_dict( 22 options={'__columns_except__': ['result', 'message', 'ended_on']}) 23 for action in actions_logic.ActionsLogic.get_waiting() 24 ] 25 26 # models.Builds 27 builds_list = [] 28 29 for build in builds_logic.BuildsLogic.get_waiting(): 30 build_dict = build.to_dict( 31 options={'copr': {'owner': {}, 32 '__columns_only__': ['id', 'name'], 33 '__included_ids__': False 34 }, 35 '__included_ids__': False}) 36 37 # return separate build for each chroot this build 38 # is assigned with 39 for chroot in build.chroots: 40 build_dict_copy = build_dict.copy() 41 build_dict_copy['chroot'] = chroot.name 42 build_dict_copy['buildroot_pkgs'] = build.copr.buildroot_pkgs(chroot) 43 builds_list.append(build_dict_copy) 44 45 return flask.jsonify({'actions': actions_list, 'builds': builds_list})
46
47 48 @backend_ns.route('/update/', methods=['POST', 'PUT']) 49 @misc.backend_authenticated 50 -def update():
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