- Add model functions for working with prototypes

- Add API calls for working with prototypes
- Get UI for prototypes working (minus add)
This commit is contained in:
Joseph Schorr 2014-01-21 14:18:20 -05:00
parent 330051f7d9
commit e17c3590a7
9 changed files with 329 additions and 1 deletions

View file

@ -541,6 +541,113 @@ def change_organization_details(orgname):
abort(403)
def prototype_view(p):
def user_view(u):
return {
'name': u.username,
'is_robot': u.robot,
'kind': 'user'
}
def team_view(t):
return {
'name': t.name,
'kind': 'team'
}
return {
'activating_user': user_view(p.activating_user),
'delegate': user_view(p.delegate_user) if p.delegate_user else team_view(p.delegate_team),
'role': p.role.name,
'id': p.uuid
}
@app.route('/api/organization/<orgname>/prototypes', methods=['GET'])
@api_login_required
def get_organization_prototype_permissions(orgname):
permission = AdministerOrganizationPermission(orgname)
if permission.can():
try:
org = model.get_organization(orgname)
except model.InvalidOrganizationException:
abort(404)
permissions = model.get_prototype_permissions(org)
return jsonify({'prototypes': [prototype_view(p) for p in permissions]})
abort(403)
@app.route('/api/organization/<orgname>/prototypes', methods=['POST'])
@api_login_required
def create_organization_prototype_permission(orgname):
permission = AdministerOrganizationPermission(orgname)
if permission.can():
try:
org = model.get_organization(orgname)
except model.InvalidOrganizationException:
abort(404)
details = request.get_json()
activating_user = details['activating_user']['name']
delegate = details['delegate']
delegate_kind = delegate['kind']
delegate_name = delegate['name']
delegate_user = delegate_name if delegate_kind == 'user' else None
delegate_team = delegate_name if delegate_kind == 'team' else None
role_name = details['role']
if not delegate_user and not delegate_team:
abort(400)
prototype = model.add_prototype_permission(org, role_name, activating_user, delegate_user, delegate_team)
return jsonify(protoype_view(prototype))
abort(403)
@app.route('/api/organization/<orgname>/prototypes/<prototypeid>', methods=['DELETE'])
@api_login_required
def delete_organization_prototype_permission(orgname, prototypeid):
permission = AdministerOrganizationPermission(orgname)
if permission.can():
try:
org = model.get_organization(orgname)
except model.InvalidOrganizationException:
abort(404)
prototype = model.delete_prototype_permission(org, prototypeid)
if not prototype:
abort(404)
return make_response('Deleted', 204)
abort(403)
@app.route('/api/organization/<orgname>/prototypes/<prototypeid>', methods=['PUT'])
@api_login_required
def update_organization_prototype_permission(orgname, prototypeid):
permission = AdministerOrganizationPermission(orgname)
if permission.can():
try:
org = model.get_organization(orgname)
except model.InvalidOrganizationException:
abort(404)
details = request.get_json()
role_name = details['role']
prototype = model.update_prototype_permission(org, prototypeid, role_name)
if not prototype:
abort(404)
return jsonify(prototype_view(prototype))
abort(403)
@app.route('/api/organization/<orgname>/members', methods=['GET'])
@api_login_required
@ -1140,7 +1247,6 @@ def get_filedrop_url():
'file_id': file_id
})
def role_view(repo_perm_obj):
return {
'role': repo_perm_obj.role.name,