예제 #1
0
def copr_rebuild_package(copr, package_name):
    package = ComplexLogic.get_package_safe(copr, package_name)
    data = package.source_json_dict

    if package.source_type_text == "git_and_tito":
        data["git_directory"] = data["git_dir"]  # @FIXME workaround
        form = forms.BuildFormTitoFactory
        f = render_add_build_tito
        view_suffix = "_tito"
    elif package.source_type_text == "mock_scm":
        form = forms.BuildFormMockFactory
        f = render_add_build_mock
        view_suffix = "_mock"
    elif package.source_type_text == "pypi":
        form = forms.BuildFormPyPIFactory
        f = render_add_build_pypi
        view_suffix = "_pypi"
    else:
        flask.flash(
            "Package {} has not the default source which is required for rebuild. Please configure some source"
            .format(package_name, copr.full_name))
        return flask.redirect(
            helpers.copr_url("coprs_ns.copr_edit_package",
                             copr,
                             package_name=package_name))

    form = form(copr.active_chroots)(data=data)
    return f(copr,
             form,
             view="coprs_ns.copr_new_build" + view_suffix,
             package=package)
예제 #2
0
def copr_edit_package_post(copr, package_name, source_type_text):
    UsersLogic.raise_if_cant_build_in_copr(
        flask.g.user, copr, "You don't have permissions to edit this package.")

    url_on_success = helpers.copr_url("coprs_ns.copr_packages", copr)
    return process_save_package(copr, source_type_text, package_name, view="coprs_ns.copr_edit_package",
                                view_method=copr_edit_package, url_on_success=url_on_success)
예제 #3
0
def copr_new_package(copr):
    url_on_success = helpers.copr_url("coprs_ns.copr_packages", copr)
    return process_save_package(copr,
                                package_name=None,
                                view="coprs_ns.copr_new_package",
                                view_method=copr_add_package,
                                url_on_success=url_on_success)
예제 #4
0
def copr_rebuild_package(copr, package_name):
    package = ComplexLogic.get_package_safe(copr.main_dir, package_name)
    data = package.source_json_dict

    if package.source_type_text == "scm":
        form = forms.BuildFormScmFactory
        f = render_add_build_scm
        view_suffix = "_scm"
    elif package.source_type_text == "pypi":
        form = forms.BuildFormPyPIFactory
        f = render_add_build_pypi
        view_suffix = "_pypi"
    elif package.source_type_text == "custom":
        form = forms.BuildFormCustomFactory
        f = render_add_build_custom
        view_suffix = "_custom"
    else:
        flask.flash(
            "Package {} has not the default source which is required for rebuild. Please configure some source"
            .format(package_name, copr.full_name))
        return flask.redirect(
            helpers.copr_url("coprs_ns.copr_edit_package",
                             copr,
                             package_name=package_name))

    form = form(copr.active_chroots, package)(data=data)
    return f(copr,
             form,
             view="coprs_ns.copr_new_build" + view_suffix,
             package=package)
예제 #5
0
파일: mail.py 프로젝트: schlupov/copr
    def __init__(self, copr_chroots):
        """
        :param models.Copr copr:
        :param list copr_chroots: list of models.CoprChroot instances
        """
        self.subject = "[Copr] upcoming deletion of outdated chroots in your projects"
        self.text = (
            "You have been notified because you are an admin of projects, "
            "that have some builds in outdated chroots\n\n"
            "According to the 'Copr outdated chroots removal policy'\n"
            "https://docs.pagure.org/copr.copr/copr_outdated_chroots_removal_policy.html\n"
            "data are going to be preserved {0} days after the chroot is EOL "
            "and then automatically deleted, unless you decide to prolong the expiration period.\n\n"
            "Please, visit the projects settings if you want to extend the time.\n\n"
            .format(app.config["DELETE_EOL_CHROOTS_AFTER"]))

        if not copr_chroots:
            raise AttributeError("No outdated chroots to notify about")

        for chroot in copr_chroots:
            url = helpers.fix_protocol_for_frontend(
                helpers.copr_url('coprs_ns.copr_repositories',
                                 chroot.copr,
                                 _external=True))
            self.text += ("Project: {0}\n"
                          "Chroot: {1}\n"
                          "Remaining: {2} days\n"
                          "{3}\n\n".format(chroot.copr.full_name, chroot.name,
                                           chroot.delete_after_days, url))
예제 #6
0
def copr_edit_package_post(copr, package_name):
    UsersLogic.raise_if_cant_build_in_copr(
        flask.g.user, copr, "You don't have permissions to edit this package.")

    url_on_success = helpers.copr_url("coprs_ns.copr_packages", copr)
    return process_save_package(copr, package_name, view="coprs_ns.copr_edit_package",
                                view_method=copr_edit_package, url_on_success=url_on_success)
예제 #7
0
def copr_new_build_rebuild(copr, build_id):
    view = 'coprs_ns.copr_new_build'
    url_on_success = helpers.copr_url("coprs_ns.copr_builds", copr)
    return process_rebuild(copr,
                           build_id,
                           view=view,
                           url_on_success=url_on_success)
예제 #8
0
def copr_delete(copr):
    if copr.group:
        url_on_success = url_for("groups_ns.list_projects_by_group",
                                 group_name=copr.group.name)
    else:
        url_on_success = url_for("coprs_ns.coprs_by_user",
                                 username=copr.user.username)
    url_on_error = helpers.copr_url("coprs_ns.copr_detail", copr)
    return process_delete(copr, url_on_error, url_on_success)
예제 #9
0
 def projects(self):
     # @FIXME We get into circular import when this import is on module-level
     from coprs.logic.coprs_logic import CoprsLogic
     return [{
         "full_name": p.full_name,
         "url": copr_url("coprs_ns.copr_detail", p, _external=True)
     }
             for p in CoprsLogic.filter_by_user_name(
                 CoprsLogic.get_multiple(), self.user.name)]
예제 #10
0
 def builds(self):
     return [{
         "id":
         b.id,
         "project":
         b.copr.full_name,
         "url":
         copr_url("coprs_ns.copr_build",
                  b.copr,
                  build_id=b.id,
                  _external=True)
     } for b in self.user.builds]
예제 #11
0
def copr_delete_package(copr, package_id):
    package = ComplexLogic.get_package_by_id_safe(package_id)

    try:
        PackagesLogic.delete_package(flask.g.user, package)
    except (InsufficientRightsException, ActionInProgressException) as e:
        flask.flash(str(e), "error")
    else:
        db.session.commit()
        flask.flash("Package has been deleted successfully.", "success")

    return flask.redirect(helpers.copr_url("coprs_ns.copr_packages", copr))
예제 #12
0
def copr_delete_package(copr, package_id):
    package = ComplexLogic.get_package_by_id_safe(package_id)

    try:
        PackagesLogic.delete_package(flask.g.user, package)
    except (InsufficientRightsException, ActionInProgressException) as e:
        flask.flash(str(e), "error")
    else:
        db.session.commit()
        flask.flash("Package has been deleted successfully.", "success")

    return flask.redirect(helpers.copr_url("coprs_ns.copr_packages", copr))
예제 #13
0
def copr_permissions_applier_change(copr):
    permission = coprs_logic.CoprPermissionsLogic.get(copr,
                                                      flask.g.user).first()
    applier_permissions_form = \
        forms.PermissionsApplierFormFactory.create_form_cls(permission)()

    if copr.user == flask.g.user:
        flask.flash("Owner cannot request permissions for his own project.",
                    "error")
    elif applier_permissions_form.validate_on_submit():
        # we rely on these to be 0 or 1 from form. TODO: abstract from that
        if permission is not None:
            old_builder = permission.copr_builder
            old_admin = permission.copr_admin
        else:
            old_builder = 0
            old_admin = 0
        new_builder = applier_permissions_form.copr_builder.data
        new_admin = applier_permissions_form.copr_admin.data
        coprs_logic.CoprPermissionsLogic.update_permissions_by_applier(
            flask.g.user, copr, permission, new_builder, new_admin)
        db.session.commit()
        flask.flash(
            "Successfully updated permissions for project '{0}'.".format(
                copr.name))

        # sending emails
        if flask.current_app.config.get("SEND_EMAILS", False):
            for mail in copr.admin_mails:
                permission_dict = {
                    "old_builder": old_builder,
                    "old_admin": old_admin,
                    "new_builder": new_builder,
                    "new_admin": new_admin
                }
                msg = PermissionRequestMessage(copr, flask.g.user,
                                               permission_dict)
                send_mail(
                    mail,
                    msg,
                )

    return flask.redirect(helpers.copr_url("coprs_ns.copr_detail", copr))
예제 #14
0
def copr_integrations_update(copr):
    if not flask.g.user.can_edit(copr):
        flask.flash("Access denied.", "error")
        return flask.redirect(url_for_copr_details(copr))

    pagure_form = forms.PagureIntegrationForm()

    if pagure_form.validate_on_submit():
        copr.scm_repo_url = pagure_form.repo_url.data
        copr.scm_api_type = 'pagure'
        copr.scm_api_auth_json = json.dumps(
            {'api_key': pagure_form.api_key.data})
        db.session.add(copr)
        db.session.commit()
        flask.flash("Integrations have been updated.", 'success')
        return flask.redirect(
            helpers.copr_url("coprs_ns.copr_integrations", copr))
    else:
        return render_copr_integrations(copr, pagure_form)
예제 #15
0
def copr_new_build_custom(copr):
    """ Handle the build request and redirect back. """

    # TODO: parametric decorator for this view && url_on_success
    view = 'coprs_ns.copr_new_build_custom'
    url_on_success = helpers.copr_url("coprs_ns.copr_builds", copr)

    def factory(**build_options):
        BuildsLogic.create_new_from_custom(flask.g.user,
                                           copr,
                                           form.script.data,
                                           form.chroot.data,
                                           form.builddeps.data,
                                           form.resultdir.data,
                                           chroot_names=form.selected_chroots,
                                           **build_options)

    form = forms.BuildFormCustomFactory(copr.active_chroots)()

    return process_new_build(copr, form, factory, render_add_build_custom,
                             view, url_on_success)
예제 #16
0
    def send_update_comps(cls, chroot):
        """ Schedules update comps.xml action

        :type copr_chroot: models.CoprChroot
        """

        url_path = helpers.copr_url("coprs_ns.chroot_view_comps",
                                    chroot.copr,
                                    chrootname=chroot.name)
        data_dict = {
            "ownername": chroot.copr.owner_name,
            "projectname": chroot.copr.name,
            "chroot": chroot.name,
            "comps_present": chroot.comps_zlib is not None,
            "url_path": url_path,
        }

        action = models.Action(action_type=ActionTypeEnum("update_comps"),
                               object_type="copr_chroot",
                               data=json.dumps(data_dict),
                               created_on=int(time.time()))
        db.session.add(action)
예제 #17
0
def copr_rebuild_package(copr, package_name):
    package = ComplexLogic.get_package_safe(copr, package_name)
    data = package.source_json_dict

    if package.source_type_text == "git_and_tito":
        data["git_directory"] = data["git_dir"]  # @FIXME workaround
        form = forms.BuildFormTitoFactory
        f = render_add_build_tito
        view_suffix = "_tito"
    elif package.source_type_text == "mock_scm":
        form = forms.BuildFormMockFactory
        f = render_add_build_mock
        view_suffix = "_mock"
    elif package.source_type_text == "pypi":
        form = forms.BuildFormPyPIFactory
        f = render_add_build_pypi
        view_suffix = "_pypi"
    else:
        flask.flash("Package {} has not the default source which is required for rebuild. Please configure some source"
                    .format(package_name, copr.full_name))
        return flask.redirect(helpers.copr_url("coprs_ns.copr_edit_package", copr, package_name=package_name))

    form = form(copr.active_chroots)(data=data)
    return f(copr, form, view="coprs_ns.copr_new_build" + view_suffix, package=package)
예제 #18
0
def copr_new_build_upload(copr):
    view = 'coprs_ns.copr_new_build_upload'
    url_on_success = helpers.copr_url("coprs_ns.copr_builds", copr)
    return process_new_build_upload(copr, view, url_on_success)
예제 #19
0
def copr_new_package(copr):
    url_on_success = helpers.copr_url("coprs_ns.copr_packages", copr)
    return process_save_package(copr, package_name=None, view="coprs_ns.copr_new_package",
                                view_method=copr_add_package, url_on_success=url_on_success)
예제 #20
0
def copr_new_build(copr):
    return process_new_build_url(copr,
                                 "coprs_ns.copr_new_build",
                                 url_on_success=helpers.copr_url(
                                     "coprs_ns.copr_builds", copr))
예제 #21
0
def copr_build_redirect(build_id):
    build = ComplexLogic.get_build_safe(build_id)
    copr = build.copr
    return flask.redirect(
        helpers.copr_url("coprs_ns.copr_build", copr, build_id=build_id))
예제 #22
0
def copr_new_build_rubygems(copr):
    view = 'coprs_ns.copr_new_build_rubygems'
    url_on_success = helpers.copr_url("coprs_ns.copr_builds", copr)
    return process_new_build_rubygems(copr, view, url_on_success)