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
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
 def form_to_db_schema_api_update(self) -> dict[str, Any]:
     return schema.default_update_group_schema()