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)
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)
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)
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)
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))
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)
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)
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)
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)]
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]
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))
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))
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))
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)
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)
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)
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)
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)
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)
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))
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))
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)