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