def create_reana_workflow(): """Create a reana workflow by json.""" _args = request.get_json() # try fetch the deposit with the provided PID try: resolver = Resolver(pid_type='depid', object_type='rec', getter=lambda x: x) deposit, rec_uuid = resolver.resolve(_args.get('pid')) except PIDDoesNotExistError: abort( 404, "You tried to create a workflow and connect" " it with a non-existing record") # if record exist check if the user has 'deposit-update' rights with UpdateDepositPermission(deposit).require(403): token = get_reana_token(rec_uuid) name = _args.get('workflow_name') workflow_name = generate_slug(2) workflow_json = _args.get('workflow_json') try: resp = create_workflow(workflow_json, workflow_name, token) except ValidationError as e: return jsonify({'message': e.message}), 400 except Exception: return jsonify({ 'message': 'An exception has occured while creating ' 'the workflow in REANA.' }), 400 # create a workflow dict, which can be used to populate # the db, but also used in the serializer _workflow = { 'service': 'reana', 'user_id': current_user.id, 'name': name, 'workflow_name': workflow_name, 'name_run': resp['workflow_name'], 'workflow_id': resp['workflow_id'], 'rec_uuid': str(rec_uuid), 'depid': _args.get('pid'), 'status': 'created', 'workflow_json': workflow_json, } # TOFIX: check for integrity errors workflow = ReanaWorkflow(**_workflow) db.session.add(workflow) db.session.commit() workflow_serialized = ReanaWorkflowSchema().dump(_workflow).data return jsonify(workflow_serialized)
def can_user_update(self, obj): deposit = CAPDeposit.get_record(obj['pid'].object_uuid) return UpdateDepositPermission(deposit).can()
def can_user_update(self, obj): return UpdateDepositPermission(obj['deposit']).can()
'cap.modules.deposit.search:DepositSearch', # 'search_factory_imp': 'cap.modules.deposit.query.search_factory', 'item_route': '/deposits/<{0}:pid_value>'.format(_PID), 'file_list_route': '/deposits/<{0}:pid_value>/files'.format(_PID), 'file_item_route': '/deposits/<{0}:pid_value>/files/<path:key>'.format(_PID), 'create_permission_factory_imp': check_oauth2_scope(lambda record: CreateDepositPermission(record).can(), write_scope.id), 'read_permission_factory_imp': check_oauth2_scope(lambda record: ReadDepositPermission(record).can(), write_scope.id), 'update_permission_factory_imp': check_oauth2_scope(lambda record: UpdateDepositPermission(record).can(), write_scope.id), # TODO update delete permission when 'discard'/'delete' is ready 'delete_permission_factory_imp': check_oauth2_scope(lambda record: DeleteDepositPermission(record).can(), write_scope.id), 'links_factory_imp': 'cap.modules.deposit.links:links_factory', }) # DEPOSIT_UI_INDEX_TEMPLATE = "cap_deposit/index.html" # TODO Resolve when '/deposit/new/' is removed DEPOSIT_RECORDS_UI_ENDPOINTS = copy.deepcopy( deposit_config.DEPOSIT_RECORDS_UI_ENDPOINTS) DEPOSIT_RECORDS_UI_ENDPOINTS['depid'].update({ 'template':
def _get_user_rights_to_record(self, deposit, result): result['can_edit'] = UpdateDepositPermission(deposit).can() result['can_admin'] = AdminDepositPermission(deposit).can() return result