def package_update(context, data_dict): package = logic_auth.get_package_object(context, data_dict) workflow, _ = workflow_helpers.get_workflow_from_package(package) stage = workflow_helpers.get_stage_from_package(package) if stage != workflow.finish: return auth_update.package_update(context, data_dict) return _success(False, 'Cannot edit published dataset')
def move_to_previous_stage(context, data_dict): wf, _ = workflow_helpers.get_workflow_from_package(data_dict) stage = workflow_helpers.get_stage_from_package(data_dict) if stage and roles.creator in stage.who_can_reject and stage.reject( ) is not None: user = model.User.get(context['user']) if user is not None and user.id == data_dict['creator_user_id']: return _success() return _success(False)
def create_dataset_revision(context, data_dict): workflow, _ = workflow_helpers.get_workflow_from_package(data_dict) stage = workflow_helpers.get_stage_from_package(data_dict) if stage != workflow.finish: return _success(False, 'Dataset must be published') if workflow_helpers.get_original_dataset_id_from_package(data_dict): return _success(False, 'Cannot create revision of revision') if workflow_helpers.get_dataset_revision_query(data_dict['id']).count(): return _success(False, 'Dataset already has revision') return authz.is_authorized('package_create', context, data_dict)
def workflow_rescind_dataset(context, data_dict): wf, _ = workflow_helpers.get_workflow_from_package(data_dict) stage = workflow_helpers.get_stage_from_package(data_dict) if stage == wf.start: return _success(False, 'Already on initial stage') if stage == wf.finish: return _success(False, 'Already on published stage') user = model.User.get(context['user']) if user is not None and user.id == data_dict['creator_user_id']: return _success() return _success(False)
def approve(self, id): """Approve common dataset. If package just've got its last stage and it looks like revision - redirects to merge_revision route """ context = { 'user': c.user, 'model': model } endpoint = request.referrer or '/' pkg = tk.get_action('package_show')(context, {'id': id}) wf, _ = wh.get_workflow_from_package(pkg) next = str(wh.get_stage_from_package(pkg).approve()) if next == str(wf.finish) and wh.is_revision(pkg): endpoint = h.url_for('merge_dataset_revision', id=id) tk.get_action('move_to_next_stage')(context, {'id': id}) return base.redirect(endpoint)