コード例 #1
0
ファイル: update.py プロジェクト: zydio/ckan
def user_update(context, data_dict):
    """Updates the user\'s details"""

    model = context["model"]
    user = context["user"]
    session = context["session"]
    schema = context.get("schema") or default_update_user_schema()
    id = data_dict["id"]

    user_obj = model.User.get(id)
    context["user_obj"] = user_obj
    if user_obj is None:
        raise NotFound("User was not found.")

    check_access("user_update", context, data_dict)

    data, errors = validate(data_dict, schema, context)
    if errors:
        session.rollback()
        raise ValidationError(errors, group_error_summary(errors))

    user = user_dict_save(data, context)

    activity_dict = {"user_id": user.id, "object_id": user.id, "activity_type": "changed user"}
    activity_create_context = {"model": model, "user": user, "defer_commit": True, "session": session}
    from ckan.logic.action.create import activity_create

    activity_create(activity_create_context, activity_dict, ignore_auth=True)
    # TODO: Also create an activity detail recording what exactly changed in
    # the user.

    if not context.get("defer_commit"):
        model.repo.commit()
    return user_dictize(user, context)
コード例 #2
0
ファイル: update.py プロジェクト: zydio/ckan
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)