def generate_matches(collection_id, other_id): collection = get_collection(collection_id, request.authz.WRITE) other = get_collection(other_id, request.authz.WRITE) process_xref.apply_async([collection.id, other.id], queue=USER_QUEUE, routing_key=USER_ROUTING_KEY) return jsonify({'status': 'accepted'}, status=202)
def permissions_index(id): collection = get_collection(id, request.authz.WRITE) q = Permission.all() q = q.filter(Permission.collection_id == collection.id) permissions = [] roles = [r for r in Role.all_groups() if check_visible(r)] for permission in q.all(): if not check_visible(permission.role): continue permissions.append(permission) if permission.role in roles: roles.remove(permission.role) # this workaround ensures that all groups are visible for the user to # select in the UI even if they are not currently associated with the # collection. for role in roles: permissions.append({ 'collection_id': collection.id, 'write': False, 'read': False, 'role': role }) return jsonify({ 'total': len(permissions), 'results': PermissionSchema().dump(permissions, many=True) })
def update(id): collection = get_collection(id, request.authz.WRITE) data = parse_request(schema=CollectionSchema) collection.update(data) db.session.commit() update_collection(collection) return view(id)
def create(): data = parse_request(schema=EntitySchema) collection = get_collection(data.get('collection_id'), request.authz.WRITE) entity = Entity.create(data, collection) db.session.commit() update_entity(entity) update_collection(collection) return view(entity.id)
def permissions_update(id): # TODO: consider using a list to bundle permission writes collection = get_collection(id, request.authz.WRITE) data = parse_request(schema=PermissionSchema) role = Role.all().filter(Role.id == data['role']['id']).first() if role is None or not check_visible(role): raise BadRequest() perm = update_permission(role, collection, data['read'], data['write']) return jsonify({'status': 'ok', 'updated': PermissionSchema().dump(perm)})
def delete(id): collection = get_collection(id, request.authz.WRITE) delete_collection.apply_async([collection.id], queue=USER_QUEUE, routing_key=USER_ROUTING_KEY) return jsonify({'status': 'accepted'}, status=202)
def view(id): collection = get_collection(id) data, _ = CollectionSchema().dump(collection) data.update(get_collection_stats(collection.id)) return jsonify(data)