From 059d60d70e274e95231e59473e2bccfd1e7cce69 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Oct 08 2020 11:34:05 +0000 Subject: frontend: de-duplicate work with build form --- diff --git a/frontend/coprs_frontend/coprs/views/api_ns/api_general.py b/frontend/coprs_frontend/coprs/views/api_ns/api_general.py index e503dab..44f0085 100644 --- a/frontend/coprs_frontend/coprs/views/api_ns/api_general.py +++ b/frontend/coprs_frontend/coprs/views/api_ns/api_general.py @@ -527,6 +527,10 @@ def copr_new_build_custom(copr): @api_req_with_copr def copr_new_build_scm(copr): form = forms.BuildFormScmFactory(copr.active_chroots)(meta={'csrf': False}) + # We just want 'disable=duplicate-code' because this is a C&P with APIv3, + # though it doesn't actually work with PyLint, see + # https://github.com/PyCQA/pylint/issues/214 + # pylint: disable=all def create_new_build(): return BuildsLogic.create_new_from_scm( diff --git a/frontend/coprs_frontend/coprs/views/apiv3_ns/apiv3_builds.py b/frontend/coprs_frontend/coprs/views/apiv3_ns/apiv3_builds.py index 0de2fc2..7c3cd29 100644 --- a/frontend/coprs_frontend/coprs/views/apiv3_ns/apiv3_builds.py +++ b/frontend/coprs_frontend/coprs/views/apiv3_ns/apiv3_builds.py @@ -130,17 +130,13 @@ def create_from_url(): data = get_form_compatible_data() form = forms.BuildFormUrlFactory(copr.active_chroots)(data, meta={'csrf': False}) - def create_new_build(): + def create_new_build(options): # create separate build for each package pkgs = form.pkgs.data.split("\n") return [BuildsLogic.create_new_from_url( flask.g.user, copr, url=pkg, - chroot_names=form.selected_chroots, - background=form.background.data, - copr_dirname=form.project_dirname.data, - timeout=form.timeout.data, - bootstrap=form.bootstrap.data, + **options, ) for pkg in pkgs] return process_creating_new_build(copr, form, create_new_build) @@ -153,16 +149,12 @@ def create_from_upload(): data = get_form_compatible_data() form = forms.BuildFormUploadFactory(copr.active_chroots)(data, meta={'csrf': False}) - def create_new_build(): + def create_new_build(options): return BuildsLogic.create_new_from_upload( flask.g.user, copr, f_uploader=lambda path: form.pkgs.data.save(path), orig_filename=secure_filename(form.pkgs.data.filename), - chroot_names=form.selected_chroots, - background=form.background.data, - copr_dirname=form.project_dirname.data, - timeout=form.timeout.data, - bootstrap=form.bootstrap.data, + **options, ) return process_creating_new_build(copr, form, create_new_build) @@ -174,7 +166,7 @@ def create_from_scm(): data = rename_fields(get_form_compatible_data()) form = forms.BuildFormScmFactory(copr.active_chroots)(data, meta={'csrf': False}) - def create_new_build(): + def create_new_build(options): return BuildsLogic.create_new_from_scm( flask.g.user, copr, @@ -184,11 +176,7 @@ def create_from_scm(): subdirectory=form.subdirectory.data, spec=form.spec.data, srpm_build_method=form.srpm_build_method.data, - chroot_names=form.selected_chroots, - background=form.background.data, - copr_dirname=form.project_dirname.data, - timeout=form.timeout.data, - bootstrap=form.bootstrap.data, + **options, ) return process_creating_new_build(copr, form, create_new_build) @@ -203,7 +191,7 @@ def create_from_distgit(): # pylint: disable=not-callable form = forms.BuildFormDistGitSimpleFactory(copr.active_chroots)(data, meta={'csrf': False}) - def create_new_build(): + def create_new_build(options): return BuildsLogic.create_new_from_distgit( flask.g.user, copr, @@ -211,10 +199,7 @@ def create_from_distgit(): distgit_name=form.distgit.data, distgit_namespace=form.namespace.data, committish=form.committish.data, - chroot_names=form.selected_chroots, - copr_dirname=form.project_dirname.data, - background=form.background.data, - bootstrap=form.bootstrap.data, + **options, ) return process_creating_new_build(copr, form, create_new_build) @@ -229,7 +214,7 @@ def create_from_pypi(): if not form.python_versions.data: form.python_versions.data = form.python_versions.default - def create_new_build(): + def create_new_build(options): return BuildsLogic.create_new_from_pypi( flask.g.user, copr, @@ -237,11 +222,7 @@ def create_from_pypi(): form.pypi_package_version.data, form.spec_template.data, form.python_versions.data, - form.selected_chroots, - background=form.background.data, - copr_dirname=form.project_dirname.data, - timeout=form.timeout.data, - bootstrap=form.bootstrap.data, + **options, ) return process_creating_new_build(copr, form, create_new_build) @@ -253,16 +234,12 @@ def create_from_rubygems(): data = get_form_compatible_data() form = forms.BuildFormRubyGemsFactory(copr.active_chroots)(data, meta={'csrf': False}) - def create_new_build(): + def create_new_build(options): return BuildsLogic.create_new_from_rubygems( flask.g.user, copr, form.gem_name.data, - form.selected_chroots, - background=form.background.data, - copr_dirname=form.project_dirname.data, - timeout=form.timeout.data, - bootstrap=form.bootstrap.data, + **options, ) return process_creating_new_build(copr, form, create_new_build) @@ -274,7 +251,7 @@ def create_from_custom(): data = get_form_compatible_data() form = forms.BuildFormCustomFactory(copr.active_chroots)(data, meta={'csrf': False}) - def create_new_build(): + def create_new_build(options): return BuildsLogic.create_new_from_custom( flask.g.user, copr, @@ -282,11 +259,7 @@ def create_from_custom(): form.chroot.data, form.builddeps.data, form.resultdir.data, - chroot_names=form.selected_chroots, - background=form.background.data, - copr_dirname=form.project_dirname.data, - timeout=form.timeout.data, - bootstrap=form.bootstrap.data, + **options, ) return process_creating_new_build(copr, form, create_new_build) @@ -299,9 +272,17 @@ def process_creating_new_build(copr, form, create_new_build): raise AccessRestricted("User {} is not allowed to build in the copr: {}" .format(flask.g.user.username, copr.full_name)) + generic_build_options = { + 'chroot_names': form.selected_chroots, + 'background': form.background.data, + 'copr_dirname': form.project_dirname.data, + 'timeout': form.timeout.data, + 'bootstrap': form.bootstrap.data, + } + # From URLs it can be created multiple builds at once # so it can return a list - build = create_new_build() + build = create_new_build(generic_build_options) db.session.commit() if type(build) == list: