def approve(self, dataset_id): user_id = getattr(toolkit.c.userobj, 'id', None) # Get curation data try: context, dataset, curation = _get_curation_data( dataset_id, user_id) except (toolkit.ObjectNotFound, toolkit.NotAuthorized): message = 'Not authorized to read dataset "%s"' return toolkit.abort(403, message % dataset_id) # Authorize context if 'approve' not in curation['actions']: message = 'This action is not available for the dataset "%s"' toolkit.h.flash_error(message % dataset['title']) toolkit.redirect_to('deposited-dataset_read', id=dataset['name']) context['ignore_auth'] = True # Update dataset try: # We also set type in context to allow type switching by ckan patch dataset = helpers.convert_deposited_dataset_to_regular_dataset( dataset) dataset = toolkit.get_action('package_update')( dict(context.items() + {'type': dataset['type']}.items()), dataset) except toolkit.ValidationError as error: message = 'Deposited dataset "%s" is invalid\n(validation error summary: %s)' return toolkit.abort(403, message % (id, error.error_summary)) # Update activity stream message = toolkit.request.params.get('message') helpers.create_curation_activity('dataset_approved', dataset['id'], dataset['name'], user_id, message=message) # Send notification email message = toolkit.request.params.get('message') if curation['state'] == 'submitted': recipient = curation['contacts']['depositor'] elif curation['state'] == 'review': recipient = curation['contacts']['curator'] if recipient: subj = mailer.compose_curation_email_subj(dataset) body = mailer.compose_curation_email_body(dataset, curation, recipient['title'], 'approve', message=message) mailer.mail_user_by_id(recipient['name'], subj, body) # Show flash message and redirect message = 'Dataset "%s" approved and moved to the destination data container' toolkit.h.flash_success(message % dataset['title']) toolkit.redirect_to('deposited-dataset_read', id=dataset['name'])
def assign(self, dataset_id): user_id = getattr(toolkit.c.userobj, 'id', None) # Get curation data try: context, dataset, curation = _get_curation_data(dataset_id, user_id) except (toolkit.ObjectNotFound, toolkit.NotAuthorized): message = 'Not authorized to read dataset "%s"' return toolkit.abort(403, message % dataset_id) # Authorize context if 'assign' not in curation['actions']: message = 'Not authorized to assign Curator to dataset "%s"' return toolkit.abort(403, message % dataset_id) context['ignore_auth'] = True # Update dataset curator_id = toolkit.request.params.get('curator_id') if curator_id: dataset['curator_id'] = curator_id else: dataset.pop('curator_id', None) try: dataset = toolkit.get_action('package_update')(context, dataset) except toolkit.ValidationError: message = 'Curator is invalid' return toolkit.abort(403, message) # Update activity stream if curator_id: context = _get_context(ignore_auth=True) curator = toolkit.get_action('user_show')(context, {'id': curator_id}) helpers.create_curation_activity('curator_assigned', dataset['id'], dataset['name'], user_id, curator_name=curator['name']) else: helpers.create_curation_activity('curator_removed', dataset['id'], dataset['name'], user_id) # Send notification email recipient = None if curator_id: action = 'assign' recipient = {'name': curator['id'], 'title': curator['display_name']} elif curation['contacts']['curator']: action = 'assign_remove' recipient = curation['contacts']['curator'] if recipient: subj = mailer.compose_curation_email_subj(dataset) body = mailer.compose_curation_email_body( dataset, curation, recipient['title'], action) mailer.mail_user_by_id(recipient['name'], subj, body) # Show flash message and redirect message = 'Datasest "%s" Curator updated' toolkit.h.flash_success(message % dataset['title']) toolkit.redirect_to('deposited-dataset_read', id=dataset['name'])
def request_changes(self, dataset_id): user_id = getattr(toolkit.c.userobj, 'id', None) # Get curation data try: context, dataset, curation = _get_curation_data( dataset_id, user_id) except (toolkit.ObjectNotFound, toolkit.NotAuthorized): message = 'Not authorized to read dataset "%s"' return toolkit.abort(403, message % dataset_id) # Authorize context if 'request_changes' not in curation['actions']: message = 'This action is not available for the dataset "%s"' toolkit.h.flash_error(message % dataset['title']) toolkit.redirect_to('deposited-dataset_read', id=dataset['name']) context['ignore_auth'] = True # Update dataset if dataset['curation_state'] == 'review': dataset['curation_state'] = 'submitted' else: dataset['curation_state'] = 'draft' dataset = toolkit.get_action('package_update')(context, dataset) # Update activity stream message = toolkit.request.params.get('message') helpers.create_curation_activity('changes_requested', dataset['id'], dataset['name'], user_id, message=message) # Send notification email message = toolkit.request.params.get('message') if curation['state'] == 'submitted': recipient = curation['contacts']['depositor'] elif curation['state'] == 'review': recipient = curation['contacts']['curator'] if recipient: subj = mailer.compose_curation_email_subj(dataset) body = mailer.compose_curation_email_body(dataset, curation, recipient['title'], 'request_changes', message=message) mailer.mail_user_by_id(recipient['name'], subj, body) # Show flash message and redirect message = 'Dataset "%s" changes requested' toolkit.h.flash_success(message % dataset['title']) toolkit.redirect_to('deposited-dataset_read', id=dataset['name'])
def request_review(self, dataset_id): user_id = getattr(toolkit.c.userobj, 'id', None) # Get curation data try: context, dataset, curation = _get_curation_data( dataset_id, user_id) except (toolkit.ObjectNotFound, toolkit.NotAuthorized): message = 'Not authorized to read dataset "%s"' return toolkit.abort(403, message % dataset_id) # Authorize context if 'request_review' not in curation['actions']: message = 'This action is not available for the dataset "%s"' toolkit.h.flash_error(message % dataset['title']) toolkit.redirect_to('deposited-dataset_read', id=dataset['name']) context['ignore_auth'] = True # Update dataset dataset['curation_state'] = 'review' dataset = toolkit.get_action('package_update')(context, dataset) # Update activity stream message = toolkit.request.params.get('message') context = _get_context(ignore_auth=True) depositor = toolkit.get_action('user_show')( context, { 'id': dataset['creator_user_id'] }) helpers.create_curation_activity('final_review_requested', dataset['id'], dataset['name'], user_id, message=message, depositor_name=depositor['name']) # Send notification email message = toolkit.request.params.get('message') depositor = curation['contacts']['depositor'] subj = mailer.compose_curation_email_subj(dataset) body = mailer.compose_curation_email_body(dataset, curation, depositor['title'], 'request_review', message=message) mailer.mail_user_by_id(depositor['name'], subj, body) # Show flash message and redirect message = 'Dataset "%s" review requested' toolkit.h.flash_success(message % dataset['title']) toolkit.redirect_to('deposited-dataset_read', id=dataset['name'])
def withdraw(self, dataset_id): user_id = getattr(toolkit.c.userobj, 'id', None) # Get curation data try: context, dataset, curation = _get_curation_data( dataset_id, user_id) except (toolkit.ObjectNotFound, toolkit.NotAuthorized): message = 'Not authorized to read dataset "%s"' return toolkit.abort(403, message % dataset_id) # Authorize context if 'withdraw' not in curation['actions']: message = 'This action is not available for the dataset "%s"' toolkit.h.flash_error(message % dataset['title']) toolkit.redirect_to('deposited-dataset_read', id=dataset['name']) context['ignore_auth'] = True # Delete withdrawn dataset, but first update its name so it can be reused new_name = _get_withdrawn_dataset_name(dataset['name']) toolkit.get_action('package_patch')(context, { 'id': dataset_id, 'name': new_name }) toolkit.get_action('package_delete')(context, {'id': dataset_id}) # Update activity stream message = toolkit.request.params.get('message') helpers.create_curation_activity('dataset_withdrawn', dataset['id'], dataset['name'], user_id, message=message) # Send notification email message = toolkit.request.params.get('message') for user in helpers.get_data_curation_users(): subj = mailer.compose_curation_email_subj(dataset) body = mailer.compose_curation_email_body(dataset, curation, user['display_name'], 'withdraw', message=message) mailer.mail_user_by_id(user['id'], subj, body) # Show flash message and redirect message = 'Dataset "%s" withdrawn' toolkit.h.flash_error(message % dataset['title']) toolkit.redirect_to('data-container_read', id='data-deposit')
def submit(self, dataset_id): user_id = getattr(toolkit.c.userobj, 'id', None) # Get curation data try: context, dataset, curation = _get_curation_data( dataset_id, user_id) except (toolkit.ObjectNotFound, toolkit.NotAuthorized): message = 'Not authorized to read dataset "%s"' return toolkit.abort(403, message % dataset_id) # Authorize context if 'submit' not in curation['actions']: message = 'This action is not available for the dataset "%s"' toolkit.h.flash_error(message % dataset['title']) toolkit.redirect_to('deposited-dataset_read', id=dataset['name']) context['ignore_auth'] = True # Update dataset dataset['curation_state'] = 'submitted' dataset = toolkit.get_action('package_update')(context, dataset) # Update activity stream message = toolkit.request.params.get('message') helpers.create_curation_activity('dataset_submitted', dataset['id'], dataset['name'], user_id, message=message) # Send notification email message = toolkit.request.params.get('message') curator = curation['contacts']['curator'] # We don't bother all curators if someone is already assigned users = [curator] if curator else helpers.get_data_curation_users() for user in users: subj = mailer.compose_curation_email_subj(dataset) body = mailer.compose_curation_email_body(dataset, curation, user['display_name'], 'submit', message=message) mailer.mail_user_by_id(user['id'], subj, body) # Show flash message and redirect message = 'Dataset "%s" submitted' toolkit.h.flash_success(message % dataset['title']) toolkit.redirect_to('deposited-dataset_read', id=dataset['name'])
def after_create(self, context, data_dict): if not context.get('job'): toolkit.enqueue_job(jobs.process_dataset_on_create, [data_dict['id']]) if data_dict.get('type') == 'deposited-dataset': user_id = None if context.get('auth_user_obj'): user_id = context['auth_user_obj'].id elif context.get('user'): user = toolkit.get_action('user_show')({ 'ignore_auth': True }, { 'id': context['user'] }) user_id = user['id'] if user_id: helpers.create_curation_activity('dataset_deposited', data_dict['id'], data_dict['name'], user_id)