def update_organization_schema(): boolean_validator = get_validator('boolean_validator') not_missing = get_validator('not_missing') convert_to_extras = get_converter('convert_to_extras') group_name_validator = get_validator('group_name_validator') schema = default_update_group_schema() schema.update({ 'name': [not_empty, unicode, group_name_validator, no_pending_organization_with_same_name], 'needs_approval': [not_missing, boolean_validator, convert_to_extras] }) return schema
def group_update(context, data_dict): model = context['model'] user = context['user'] schema = context.get('schema') or default_update_group_schema() id = data_dict['id'] group = model.Group.get(id) context["group"] = group if group is None: raise NotFound('Group was not found.') check_access('group_update', context, data_dict) data, errors = validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors, group_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") group = group_dict_save(data, context) for item in PluginImplementations(IGroupController): item.edit(group) if not context.get('defer_commit'): model.repo.commit() if errors: raise ValidationError(errors) return group_dictize(group, context)
def group_update(context, data_dict): model = context["model"] user = context["user"] schema = context.get("schema") or default_update_group_schema() id = data_dict["id"] group = model.Group.get(id) context["group"] = group if group is None: raise NotFound("Group was not found.") check_access("group_update", context, data_dict) data, errors = validate(data_dict, schema, context) if errors: model.Session.rollback() raise ValidationError(errors, group_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") group = group_dict_save(data, context) for item in PluginImplementations(IGroupController): item.edit(group) model.repo.commit() if errors: raise ValidationError(errors) return group_dictize(group, context)
def group_update(context, data_dict): model = context["model"] user = context["user"] session = context["session"] schema = context.get("schema") or default_update_group_schema() id = data_dict["id"] parent = context.get("parent", None) group = model.Group.get(id) context["group"] = group if group is None: raise NotFound("Group was not found.") check_access("group_update", context, data_dict) data, errors = validate(data_dict, schema, context) if errors: session.rollback() raise ValidationError(errors, group_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") group = group_dict_save(data, context) if parent: parent_group = model.Group.get(parent) if parent_group and not parent_group in group.get_groups(group.type): # Delete all of this groups memberships current = ( session.query(model.Member) .filter(model.Member.table_id == group.id) .filter(model.Member.table_name == "group") .all() ) for c in current: session.delete(c) member = model.Member(group=parent_group, table_id=group.id, table_name="group") session.add(member) for item in PluginImplementations(IGroupController): item.edit(group) activity_dict = { "user_id": model.User.by_name(user.decode("utf8")).id, "object_id": group.id, "activity_type": "changed group", } # Handle 'deleted' groups. # When the user marks a group as deleted this comes through here as # a 'changed' group activity. We detect this and change it to a 'deleted' # activity. if group.state == u"deleted": if session.query(ckan.model.Activity).filter_by(object_id=group.id, activity_type="deleted").all(): # A 'deleted group' activity for this group has already been # emitted. # FIXME: What if the group was deleted and then activated again? activity_dict = None else: # We will emit a 'deleted group' activity. activity_dict["activity_type"] = "deleted group" if activity_dict is not None: activity_dict["data"] = {"group": ckan.lib.dictization.table_dictize(group, context)} from ckan.logic.action.create import activity_create activity_create_context = {"model": model, "user": user, "defer_commit": True, "session": session} activity_create(activity_create_context, activity_dict, ignore_auth=True) # TODO: Also create an activity detail recording what exactly changed # in the group. if not context.get("defer_commit"): model.repo.commit() return group_dictize(group, context)
def form_to_db_schema_api_update(self) -> dict[str, Any]: return schema.default_update_group_schema()