def related_update(context, data_dict): '''Update a related item. You must be the owner of a related item to update it. For further parameters see ``related_create()``. :param id: the id of the related item to update :type id: string :returns: the updated related item :rtype: dictionary ''' model = context['model'] id = _get_or_bust(data_dict, "id") session = context['session'] schema = context.get('schema') or schema_.default_update_related_schema() related = model.Related.get(id) context["related"] = related if not related: logging.error('Could not find related ' + id) raise NotFound(_('Item was not found.')) _check_access('related_update', context, data_dict) data, errors = _validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors) related = model_save.related_dict_save(data, context) dataset_dict = None if 'package' in context: dataset = context['package'] dataset_dict = ckan.lib.dictization.table_dictize(dataset, context) related_dict = model_dictize.related_dictize(related, context) activity_dict = { 'user_id': context['user'], 'object_id': related.id, 'activity_type': 'changed related item', } activity_dict['data'] = { 'related': related_dict, 'dataset': dataset_dict, } activity_create_context = { 'model': model, 'user': context['user'], 'defer_commit': True, 'ignore_auth': True, 'session': session } # DGU checks if activity streams are enabled first, to avoid Auth Audit # issue #1421 if converters.asbool( config.get('ckan.activity_streams_enabled', 'true')): _get_action('activity_create')(activity_create_context, activity_dict) if not context.get('defer_commit'): model.repo.commit() return model_dictize.related_dictize(related, context)
def related_update(context, data_dict): '''Update a related item. You must be the owner of a related item to update it. For further parameters see :py:func:`~ckan.logic.action.create.related_create`. :param id: the id of the related item to update :type id: string :returns: the updated related item :rtype: dictionary ''' model = context['model'] id = _get_or_bust(data_dict, "id") session = context['session'] schema = context.get('schema') or schema_.default_update_related_schema() related = model.Related.get(id) context["related"] = related if not related: logging.error('Could not find related ' + id) raise NotFound(_('Item was not found.')) _check_access('related_update', context, data_dict) data, errors = _validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors) related = model_save.related_dict_save(data, context) dataset_dict = None if 'package' in context: dataset = context['package'] dataset_dict = ckan.lib.dictization.table_dictize(dataset, context) related_dict = model_dictize.related_dictize(related, context) activity_dict = { 'user_id': context['user'], 'object_id': related.id, 'activity_type': 'changed related item', } activity_dict['data'] = { 'related': related_dict, 'dataset': dataset_dict, } activity_create_context = { 'model': model, 'user': context['user'], 'defer_commit': True, 'ignore_auth': True, 'session': session } _get_action('activity_create')(activity_create_context, activity_dict) if not context.get('defer_commit'): model.repo.commit() return model_dictize.related_dictize(related, context)