コード例 #1
0
def process_package_add_or_edit(copr,
                                source_type_text,
                                package=None,
                                data=None):
    if not flask.g.user.can_edit(copr):
        raise InsufficientRightsException(
            "You are not allowed to add or edit packages in this copr.")

    formdata = data or flask.request.form
    try:
        if package and data:
            formdata = data.copy()
            for key in package.source_json_dict.keys() - data.keys():
                value = package.source_json_dict[key]
                add_function = formdata.setlist if type(
                    value) == list else formdata.add
                add_function(key, value)
        form = forms.get_package_form_cls_by_source_type_text(
            source_type_text)(formdata, meta={
                'csrf': False
            })
    except UnknownSourceTypeException:
        raise LegacyApiError(
            "Unsupported package source type {source_type_text}".format(
                source_type_text=source_type_text))

    if form.validate_on_submit():
        if not package:
            try:
                package = PackagesLogic.add(flask.app.g.user, copr.main_dir,
                                            form.package_name.data)
            except InsufficientRightsException:
                raise LegacyApiError("Insufficient permissions.")
            except DuplicateException:
                raise LegacyApiError(
                    "Package {0} already exists in copr {1}.".format(
                        form.package_name.data, copr.full_name))

        try:
            source_type = helpers.BuildSourceEnum(source_type_text)
        except KeyError:
            source_type = helpers.BuildSourceEnum("scm")

        package.source_type = source_type
        package.source_json = form.source_json
        if "webhook_rebuild" in formdata:
            package.webhook_rebuild = form.webhook_rebuild.data
        if "max_builds" in formdata:
            package.max_builds = form.max_builds.data

        db.session.add(package)
        db.session.commit()
    else:
        raise LegacyApiError(form.errors)

    return flask.jsonify({
        "output": "ok",
        "message": "Create or edit operation was successful.",
        "package": package.to_dict(),
    })
コード例 #2
0
ファイル: api_general.py プロジェクト: tedwardia/copr
def process_package_add_or_edit(copr, source_type_text, package=None):
    try:
        form = forms.get_package_form_cls_by_source_type_text(
            source_type_text)(csrf_enabled=False)
    except UnknownSourceTypeException:
        raise LegacyApiError(
            "Unsupported package source type {source_type_text}".format(
                source_type_text=source_type_text))

    if form.validate_on_submit():
        if not package:
            try:
                package = PackagesLogic.add(flask.app.g.user, copr,
                                            form.package_name.data)
            except InsufficientRightsException:
                raise LegacyApiError("Insufficient permissions.")
            except DuplicateException:
                raise LegacyApiError(
                    "Package {0} already exists in copr {1}.".format(
                        form.package_name.data, copr.full_name))

        package.source_type = helpers.BuildSourceEnum(source_type_text)
        package.webhook_rebuild = form.webhook_rebuild.data
        package.source_json = form.source_json

        db.session.add(package)
        db.session.commit()
    else:
        raise LegacyApiError(form.errors)

    return flask.jsonify({
        "output": "ok",
        "message": "Create or edit operation was successful.",
        "package": package.to_dict(),
    })
コード例 #3
0
ファイル: api_general.py プロジェクト: bowlofeggs/copr
def process_package_add_or_edit(copr, source_type_text, package=None):
    try:
        form = forms.get_package_form_cls_by_source_type_text(source_type_text)(csrf_enabled=False)
    except UnknownSourceTypeException:
        raise LegacyApiError("Unsupported package source type {source_type_text}".format(source_type_text=source_type_text))

    if form.validate_on_submit():
        if not package:
            try:
                package = PackagesLogic.add(flask.app.g.user, copr, form.package_name.data)
            except InsufficientRightsException:
                raise LegacyApiError("Insufficient permissions.")
            except DuplicateException:
                raise LegacyApiError("Package {0} already exists in copr {1}.".format(form.package_name.data, copr.full_name))

        package.source_type = helpers.BuildSourceEnum(source_type_text)
        package.webhook_rebuild = form.webhook_rebuild.data
        package.source_json = form.source_json

        db.session.add(package)
        db.session.commit()
    else:
        raise LegacyApiError(form.errors)

    return flask.jsonify({
        "output": "ok",
        "message": "Create or edit operation was successful.",
        "package": package.to_dict(),
    })
コード例 #4
0
ファイル: coprs_packages.py プロジェクト: schlupov/copr
def process_save_package(copr, source_type_text, package_name, view,
                         view_method, url_on_success):
    form = forms.get_package_form_cls_by_source_type_text(source_type_text)()

    if "reset" in flask.request.form:
        try:
            package = PackagesLogic.get(copr.main_dir.id, package_name)[0]
        except IndexError:
            flask.flash(
                "Package {package_name} does not exist in copr_dir {copr_dir}."
                .format(package_name, copr.main_dir.full_name))
            return flask.redirect(url_on_success)  # should be url_on_fail

        try:
            PackagesLogic.reset_package(flask.g.user, package)
            db.session.commit()
        except InsufficientRightsException as e:
            flask.flash(str(e))
            return flask.redirect(url_on_success)  # should be url_on_fail

        flask.flash("Package default source successfully reset.")
        return flask.redirect(url_on_success)

    if form.validate_on_submit():
        try:
            if package_name:
                package = PackagesLogic.get(copr.main_dir.id, package_name)[0]
            else:
                package = PackagesLogic.add(flask.app.g.user, copr.main_dir,
                                            form.package_name.data)

            package.source_type = helpers.BuildSourceEnum(source_type_text)
            package.webhook_rebuild = form.webhook_rebuild.data
            package.source_json = form.source_json
            package.chroot_blacklist_raw = form.chroot_blacklist.data
            package.max_builds = form.max_builds.data

            db.session.add(package)
            db.session.commit()
        except (InsufficientRightsException, IndexError) as e:
            db.session.rollback()
            flask.flash(str(e), "error")
        else:
            flask.flash(
                "Package successfully saved" if package_name else
                "New package has been created.", "success")

        return flask.redirect(url_on_success)

    kwargs = {
        "coprname": copr.name,
        "package_name": package_name,
        "source_type_text": source_type_text,
        "form": form,
    }

    kwargs.update({"group_name": copr.group.name} if copr.
                  is_a_group_project else {"username": copr.user.name})
    return view_method(**kwargs)
コード例 #5
0
ファイル: coprs_packages.py プロジェクト: bowlofeggs/copr
def process_save_package(copr, source_type_text, package_name, view, view_method, url_on_success):
    form = forms.get_package_form_cls_by_source_type_text(source_type_text)()

    if "reset" in flask.request.form:
        try:
            package = PackagesLogic.get(copr.id, package_name)[0]
        except IndexError:
            flask.flash("Package {package_name} does not exist in copr {copr}.".format(package_name, copr.full_name))
            return flask.redirect(url_on_success) # should be url_on_fail

        try:
            PackagesLogic.reset_package(flask.g.user, package)
            db.session.commit()
        except InsufficientRightsException as e:
            flask.flash(str(e))
            return flask.redirect(url_on_success) # should be url_on_fail

        flask.flash("Package default source successfully reset.")
        return flask.redirect(url_on_success)

    if form.validate_on_submit():
        try:
            if package_name:
                package = PackagesLogic.get(copr.id, package_name)[0]
            else:
                package = PackagesLogic.add(flask.app.g.user, copr, form.package_name.data)

            package.source_type = helpers.BuildSourceEnum(source_type_text)
            package.webhook_rebuild = form.webhook_rebuild.data
            package.source_json = form.source_json

            db.session.add(package)
            db.session.commit()
        except (InsufficientRightsException, IndexError) as e:
            db.session.rollback()
            flask.flash(str(e), "error")
        else:
            flask.flash("Package successfully saved" if package_name else "New package has been created.")

        return flask.redirect(url_on_success)

    kwargs = {
        "coprname": copr.name,
        "package_name": package_name,
        "source_type_text": source_type_text,
        "form": form,
    }

    kwargs.update({"group_name": copr.group.name} if copr.is_a_group_project else {"username": copr.user.name})
    return view_method(**kwargs)