Example #1
0
def process_group_form(group=None):
    """
    Validate and process submitted group form.
    :param group:
    :return:
    """
    if request.method == 'GET':
        # construct new form
        if group:
            # edit form
            obj = dict(name=group.name,
                       owners=[u.name for u in group.owners],
                       packages=[p.name for p in group.packages])
            form = forms.GroupForm(**obj)
        else:
            # creation form
            form = forms.GroupForm(owners=[g.user.name])
        return render_template('edit-group.html', group=group, form=form)
    form = forms.GroupForm()
    # check permissions
    if group and not group.editable:
        flash_nak("You don't have permission to edit this group")
        return redirect(
            url_for('group_detail', name=group.name,
                    namespace=group.namespace))
    # check form validity
    if not form.validate_or_flash():
        return render_template('edit-group.html', group=group, form=form)

    # existing group being edited or None - to be sent into template
    existing_group = group

    if not group:
        group = PackageGroup(namespace=g.user.name)
        db.add(group)
    group.name = form.name.data
    try:
        db.flush()
    except IntegrityError:
        db.rollback()
        flash_nak("Group already exists")
        return render_template('edit-group.html',
                               group=existing_group,
                               form=form)
    try:
        data.set_group_content(session, group, form.packages.data)
        data.set_group_maintainers(session, group, form.owners.data)
    except data.PackagesDontExist as e:
        db.rollback()
        flash_nak(str(e))
        return render_template('edit-group.html',
                               group=existing_group,
                               form=form)
    db.commit()
    flash_ack("Group created" if not existing_group else "Group modified")
    return redirect(
        url_for('group_detail', name=group.name, namespace=group.namespace))
Example #2
0
def process_group_form(group=None):
    if request.method == 'GET':
        if group:
            obj = dict(name=group.name,
                       owners=[u.name for u in group.owners],
                       packages=[p.name for p in group.packages])
            form = GroupForm(**obj)
        else:
            form = GroupForm(owners=[g.user.name])
        return render_template('edit-group.html', group=group, form=form)
    form = GroupForm()
    # check permissions
    if group and not group.editable:
        flash("You don't have permission to edit this group")
        return redirect(
            url_for('group_detail', name=group.name,
                    namespace=group.namespace))
    # check form validity
    if not form.validate_or_flash():
        return render_template('edit-group.html', group=group, form=form)
    names = set(form.packages.data)
    users = [
        get_or_create(db, User, name=name) for name in set(form.owners.data)
    ]
    db.commit()
    user_ids = [u.id for u in users]
    packages = db.query(Package).filter(Package.name.in_(names))
    found_names = {p.name for p in packages}
    if len(found_names) != len(names):
        flash("Packages don't exist: " + ', '.join(names - found_names))
        return render_template('edit-group.html', group=group, form=form)
    created = not group
    if created:
        group = PackageGroup(namespace=g.user.name)
        db.add(group)
    group.name = form.name.data
    try:
        db.flush()
    except IntegrityError:
        db.rollback()
        flash("Group already exists")
        return render_template('edit-group.html', group=group, form=form)
    if not created:
        db.query(PackageGroupRelation)\
          .filter_by(group_id=group.id).delete()
        db.query(GroupACL)\
          .filter_by(group_id=group.id).delete()
    rels = [dict(group_id=group.id, package_name=name) for name in found_names]
    acls = [dict(group_id=group.id, user_id=user_id) for user_id in user_ids]
    db.execute(PackageGroupRelation.__table__.insert(), rels)
    db.execute(GroupACL.__table__.insert(), acls)
    db.commit()
    flash("Group created" if created else "Group modified")
    return redirect(
        url_for('group_detail', name=group.name, namespace=group.namespace))
Example #3
0
def process_group_form(group=None):
    """
    Validate and process submitted group form.
    :param group:
    :return:
    """
    if request.method == 'GET':
        # construct new form
        if group:
            # edit form
            obj = dict(name=group.name, owners=[u.name for u in group.owners],
                       packages=[p.name for p in group.packages])
            form = forms.GroupForm(**obj)
        else:
            # creation form
            form = forms.GroupForm(owners=[g.user.name])
        return render_template('edit-group.html', group=group, form=form)
    form = forms.GroupForm()
    # check permissions
    if group and not group.editable:
        flash_nak("You don't have permission to edit this group")
        return redirect(url_for('group_detail', name=group.name,
                                namespace=group.namespace))
    # check form validity
    if not form.validate_or_flash():
        return render_template('edit-group.html', group=group, form=form)

    # existing group being edited or None - to be sent into template
    existing_group = group

    if not group:
        group = PackageGroup(namespace=g.user.name)
        db.add(group)
    group.name = form.name.data
    try:
        db.flush()
    except IntegrityError:
        db.rollback()
        flash_nak("Group already exists")
        return render_template('edit-group.html', group=existing_group, form=form)
    try:
        data.set_group_content(session, group, form.packages.data)
        data.set_group_maintainers(session, group, form.owners.data)
    except data.PackagesDontExist as e:
        db.rollback()
        flash_nak(str(e))
        return render_template('edit-group.html', group=existing_group, form=form)
    db.commit()
    flash_ack("Group created" if not existing_group else "Group modified")
    return redirect(url_for('group_detail', name=group.name,
                            namespace=group.namespace))
Example #4
0
def process_group_form(group=None):
    if request.method == 'GET':
        if group:
            obj = dict(name=group.name, owners=[u.name for u in group.owners],
                       packages=[p.name for p in group.packages])
            form = GroupForm(**obj)
        else:
            form = GroupForm(owners=[g.user.name])
        return render_template('edit-group.html', group=group, form=form)
    form = GroupForm()
    # check permissions
    if group and not group.editable:
        flash("You don't have permission to edit this group")
        return redirect(url_for('group_detail', name=group.name,
                                namespace=group.namespace))
    # check form validity
    if not form.validate_or_flash():
        return render_template('edit-group.html', group=group, form=form)
    names = set(form.packages.data)
    users = [get_or_create(db, User, name=name) for name in set(form.owners.data)]
    db.commit()
    user_ids = [u.id for u in users]
    packages = db.query(Package).filter(Package.name.in_(names))
    found_names = {p.name for p in packages}
    if len(found_names) != len(names):
        flash("Packages don't exist: " + ', '.join(names - found_names))
        return render_template('edit-group.html', group=group, form=form)
    created = not group
    if created:
        group = PackageGroup(namespace=g.user.name)
        db.add(group)
    group.name = form.name.data
    try:
        db.flush()
    except IntegrityError:
        db.rollback()
        flash("Group already exists")
        return render_template('edit-group.html', group=group, form=form)
    if not created:
        db.query(PackageGroupRelation)\
          .filter_by(group_id=group.id).delete()
        db.query(GroupACL)\
          .filter_by(group_id=group.id).delete()
    rels = [dict(group_id=group.id, package_name=name) for name in found_names]
    acls = [dict(group_id=group.id, user_id=user_id) for user_id in user_ids]
    db.execute(PackageGroupRelation.__table__.insert(), rels)
    db.execute(GroupACL.__table__.insert(), acls)
    db.commit()
    flash("Group created" if created else "Group modified")
    return redirect(url_for('group_detail', name=group.name,
                            namespace=group.namespace))