def resource_update(context, data_dict): model = context['model'] session = context['session'] user = context['user'] id = data_dict["id"] schema = context.get('schema') or default_update_resource_schema() model.Session.remove() resource = model.Resource.get(id) context["resource"] = resource if not resource: raise NotFound(_('Resource was not found.')) check_access('resource_update', context, data_dict) data, errors = validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors, resource_error_summary(errors)) rev = model.repo.new_revision() rev.author = user if 'message' in context: rev.message = context['message'] else: rev.message = _(u'REST API: Update object %s') % data.get("name") resource = resource_dict_save(data, context) if not context.get('defer_commit'): model.repo.commit() return resource_dictize(resource, context)
def resource_update(context, data_dict): model = context["model"] session = context["session"] user = context["user"] id = data_dict["id"] schema = context.get("schema") or default_update_resource_schema() model.Session.remove() resource = model.Resource.get(id) context["resource"] = resource if not resource: logging.error("Could not find resource " + id) raise NotFound(_("Resource was not found.")) check_access("resource_update", context, data_dict) data, errors = validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors, resource_error_summary(errors)) rev = model.repo.new_revision() rev.author = user if "message" in context: rev.message = context["message"] else: rev.message = _(u"REST API: Update object %s") % data.get("name", "") resource = resource_dict_save(data, context) if not context.get("defer_commit"): model.repo.commit() return resource_dictize(resource, context)
def resource_update(context, data_dict): '''Update a resource. To update a resource you must be authorized to update the dataset that the resource belongs to. For further parameters see ``resource_create()``. :param id: the id of the resource to update :type id: string :returns: the updated resource :rtype: string ''' model = context['model'] user = context['user'] id = _get_or_bust(data_dict, "id") schema = context.get('schema') or schema_.default_update_resource_schema() resource = model.Resource.get(id) context["resource"] = resource if not resource: logging.error('Could not find resource ' + id) raise NotFound(_('Resource was not found.')) _check_access('resource_update', context, data_dict) data, errors = _validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors) rev = model.repo.new_revision() rev.author = user if 'message' in context: rev.message = context['message'] else: rev.message = _(u'REST API: Update object %s') % data.get("name", "") resource = model_save.resource_dict_save(data, context) if not context.get('defer_commit'): model.repo.commit() return model_dictize.resource_dictize(resource, context)
def resource_update(context, data_dict): model = context["model"] session = context["session"] user = context["user"] id = data_dict["id"] schema = context.get("schema") or default_update_resource_schema() model.Session.remove() resource = model.Resource.get(id) context["resource"] = resource if not resource: raise NotFound(_("Resource was not found.")) # check authentication against the resource package # TODO: can check_access be used against a resource? query = ( session.query(model.Package) .join(model.ResourceGroup) .join(model.Resource) .filter(model.ResourceGroup.id == resource.resource_group_id) ) pkg = query.first() if not pkg: raise NotFound(_("No package found for this resource, cannot check auth.")) check_access("package_update", context, package_dictize(pkg, context)) data, errors = validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors, resource_error_summary(errors)) rev = model.repo.new_revision() rev.author = user if "message" in context: rev.message = context["message"] else: rev.message = _(u"REST API: Update object %s") % data.get("name") resource = resource_dict_save(data, context) model.repo.commit() return resource_dictize(resource, context)