def _create_or_update_related(self,related,package_dict): #print package_dict # Check API version if self.config: api_version = self.config.get('api_version','2') #TODO: use site user when available user_name = self.config.get('user',u'harvest') else: api_version = '2' user_name = u'harvest' schema = default_related_schema() context = { 'model': model, 'session': Session, 'user': user_name, 'api_version': api_version, 'schema': schema, } old_related = dict([(x['url'], x['id']) for x in get_action("related_list")(context,{"id":package_dict["id"]})]) print "Existing:", old_related if related['url'] in old_related: related['id'] = old_related[related['url']] return get_action('related_update')(context, related) else: return get_action('related_create')(context, related)
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'] user = context['user'] id = _get_or_bust(data_dict, "id") schema = context.get('schema') or schema_.default_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) 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 ``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_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)