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   
 3  from coprs import db 
 4  from coprs import helpers 
 5  from coprs import models 
 6   
 7  from coprs.logic import builds_logic 
 8   
 9  from coprs.views import misc 
10  from coprs.views.backend_ns import backend_ns 
11 12 @backend_ns.route('/waiting_builds/') 13 -def waiting_builds():
14 query = builds_logic.BuildsLogic.get_waiting_builds(None) 15 16 builds = query[0:10] 17 return flask.jsonify({'builds': [build.to_dict(options = {'copr': {'owner': {}, 18 '__columns_only__': ['id', 'name'], 19 '__included_ids__': False}, 20 '__included_ids__': False}) for build in builds]})
21
22 @backend_ns.route('/update_builds/', methods = ['POST', 'PUT']) 23 @misc.backend_authenticated 24 -def update_builds():
25 to_update = {} 26 for build in flask.request.json['builds']: # first get ids of sent builds 27 to_update[build['id']] = build 28 29 if not to_update: 30 return json.dumps({'warning': 'No parsed builds'}) 31 32 existing = {} # create a dict of existing builds {build.id: build, ...} 33 for build in builds_logic.BuildsLogic.get_by_ids(None, to_update.keys()).all(): 34 existing[build.id] = build 35 36 non_existing_ids = list(set(to_update.keys()) - set(existing.keys())) 37 38 for i, build in existing.items(): # actually update existing builds 39 builds_logic.BuildsLogic.update_state_from_dict(None, build, to_update[i]) 40 41 db.session.commit() 42 43 return flask.jsonify({'updated_builds_ids': list(existing.keys()), 'non_existing_builds_ids': non_existing_ids})
44
45 @backend_ns.route('/waiting_actions/') 46 -def waiting_actions():
47 actions = models.Action.query.filter(models.Action.result==helpers.BackendResultEnum('waiting')).all() 48 49 return flask.jsonify({'actions': [action.to_dict(options={'__columns_except__': ['result', 'message', 'ended_on']}) for action in actions]})
50
51 # TODO: this is very similar to update_builds, we should pull out the common functionality into a single function 52 @backend_ns.route('/update_actions/', methods=['POST', 'PUT']) 53 @misc.backend_authenticated 54 -def update_actions():
55 to_update = {} 56 for action in flask.request.json['actions']: 57 to_update[action['id']] = action 58 59 if not to_update: 60 return json.dumps({'warning': 'No parsed actions'}) 61 62 existing = {} 63 for action in models.Action.query.filter(models.Action.id.in_(to_update.keys())).all(): 64 existing[action.id] = action 65 66 non_existing_ids = list(set(to_update.keys()) - set(existing.keys())) 67 68 for i, action in existing.items(): 69 existing[i].result = to_update[i]['result'] 70 existing[i].message = to_update[i]['message'] 71 existing[i].ended_on = to_update[i]['ended_on'] 72 73 db.session.commit() 74 75 return flask.jsonify({'updated_actions_ids': list(existing.keys()), 'non_existing_actions_ids': non_existing_ids})
76