From 150a2abbe3a371d8fe435386b3f4d332d1a910ff Mon Sep 17 00:00:00 2001 From: Jakub Kadlcik Date: Nov 18 2019 14:22:43 +0000 Subject: frontend: move `generate_build_config' from helpers to complex_logic The `generate_build_config' is quite complex and now because of RHBZ 1758470, we need to modify it to query project objects for copr://foo/bar external repositories. --- diff --git a/frontend/coprs_frontend/coprs/helpers.py b/frontend/coprs_frontend/coprs/helpers.py index 083ad8f..5e283ec 100644 --- a/frontend/coprs_frontend/coprs/helpers.py +++ b/frontend/coprs_frontend/coprs/helpers.py @@ -488,65 +488,6 @@ def parse_repo_params(repo, supported_keys=None): return params -def generate_build_config(copr, chroot_id): - """ Return dict with proper build config contents """ - chroot = None - for i in copr.copr_chroots: - if i.mock_chroot.name == chroot_id: - chroot = i - if not chroot: - return {} - - packages = "" if not chroot.buildroot_pkgs else chroot.buildroot_pkgs - - repos = [{ - "id": "copr_base", - "baseurl": copr.repo_url + "/{}/".format(chroot_id), - "name": "Copr repository", - }] - - if not copr.auto_createrepo: - repos.append({ - "id": "copr_base_devel", - "baseurl": copr.repo_url + "/{}/devel/".format(chroot_id), - "name": "Copr buildroot", - }) - - def get_additional_repo_views(repos_list): - repos = [] - for repo in repos_list: - params = parse_repo_params(repo) - repo_view = { - "id": generate_repo_name(repo), - "baseurl": pre_process_repo_url(chroot_id, repo), - "name": "Additional repo " + generate_repo_name(repo), - } - repo_view.update(params) - repos.append(repo_view) - return repos - - repos.extend(get_additional_repo_views(copr.repos_list)) - repos.extend(get_additional_repo_views(chroot.repos_list)) - - return { - 'project_id': copr.repo_id, - 'additional_packages': packages.split(), - 'repos': repos, - 'chroot': chroot_id, - 'use_bootstrap_container': copr.use_bootstrap_container, - 'with_opts': chroot.with_opts.split(), - 'without_opts': chroot.without_opts.split(), - } - - -def generate_additional_repos(copr_chroot): - base_repo = "copr://{}".format(copr_chroot.copr.full_name) - repos = [base_repo] + copr_chroot.repos_list + copr_chroot.copr.repos_list - if not copr_chroot.copr.auto_createrepo: - repos.append("copr://{}/devel".format(copr_chroot.copr.full_name)) - return repos - - def trim_git_url(url): if not url: return None diff --git a/frontend/coprs_frontend/coprs/logic/complex_logic.py b/frontend/coprs_frontend/coprs/logic/complex_logic.py index 316cf97..3e793d2 100644 --- a/frontend/coprs_frontend/coprs/logic/complex_logic.py +++ b/frontend/coprs_frontend/coprs/logic/complex_logic.py @@ -323,3 +323,67 @@ class ProjectForking(object): if not name in exclude: arguments[name] = getattr(from_object, name) return clazz(**arguments) + + +class BuildConfigLogic(object): + + @classmethod + def generate_build_config(cls, copr, chroot_id): + """ Return dict with proper build config contents """ + chroot = None + for i in copr.copr_chroots: + if i.mock_chroot.name == chroot_id: + chroot = i + if not chroot: + return {} + + packages = "" if not chroot.buildroot_pkgs else chroot.buildroot_pkgs + + repos = [{ + "id": "copr_base", + "baseurl": copr.repo_url + "/{}/".format(chroot_id), + "name": "Copr repository", + }] + + if not copr.auto_createrepo: + repos.append({ + "id": "copr_base_devel", + "baseurl": copr.repo_url + "/{}/devel/".format(chroot_id), + "name": "Copr buildroot", + }) + + + repos.extend(cls.get_additional_repo_views(copr.repos_list, chroot_id)) + repos.extend(cls.get_additional_repo_views(chroot.repos_list, chroot_id)) + + return { + 'project_id': copr.repo_id, + 'additional_packages': packages.split(), + 'repos': repos, + 'chroot': chroot_id, + 'use_bootstrap_container': copr.use_bootstrap_container, + 'with_opts': chroot.with_opts.split(), + 'without_opts': chroot.without_opts.split(), + } + + @classmethod + def get_additional_repo_views(cls, repos_list, chroot_id): + repos = [] + for repo in repos_list: + params = helpers.parse_repo_params(repo) + repo_view = { + "id": helpers.generate_repo_name(repo), + "baseurl": helpers.pre_process_repo_url(chroot_id, repo), + "name": "Additional repo " + helpers.generate_repo_name(repo), + } + repo_view.update(params) + repos.append(repo_view) + return repos + + @classmethod + def generate_additional_repos(cls, copr_chroot): + base_repo = "copr://{}".format(copr_chroot.copr.full_name) + repos = [base_repo] + copr_chroot.repos_list + copr_chroot.copr.repos_list + if not copr_chroot.copr.auto_createrepo: + repos.append("copr://{}/devel".format(copr_chroot.copr.full_name)) + return repos 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 75cba6f..bca3ce3 100644 --- a/frontend/coprs_frontend/coprs/views/api_ns/api_general.py +++ b/frontend/coprs_frontend/coprs/views/api_ns/api_general.py @@ -16,10 +16,10 @@ from coprs import exceptions from coprs import forms from coprs import helpers from coprs import models -from coprs.helpers import fix_protocol_for_backend, generate_build_config +from coprs.helpers import fix_protocol_for_backend from coprs.logic.api_logic import MonitorWrapper from coprs.logic.builds_logic import BuildsLogic -from coprs.logic.complex_logic import ComplexLogic +from coprs.logic.complex_logic import ComplexLogic, BuildConfigLogic from coprs.logic.packages_logic import PackagesLogic from coprs.logic.modules_logic import ModuleProvider, ModuleBuildFacade @@ -1077,7 +1077,7 @@ def copr_build_config(copr, chroot): """ output = { "output": "ok", - "build_config": generate_build_config(copr, chroot), + "build_config": BuildConfigLogic.generate_build_config(copr, chroot), } if not output['build_config']: diff --git a/frontend/coprs_frontend/coprs/views/apiv3_ns/apiv3_build_chroots.py b/frontend/coprs_frontend/coprs/views/apiv3_ns/apiv3_build_chroots.py index d372790..f27029e 100644 --- a/frontend/coprs_frontend/coprs/views/apiv3_ns/apiv3_build_chroots.py +++ b/frontend/coprs_frontend/coprs/views/apiv3_ns/apiv3_build_chroots.py @@ -1,10 +1,10 @@ import flask from . import query_params, pagination, Paginator, GET from coprs.views.apiv3_ns import apiv3_ns -from coprs.helpers import generate_build_config, generate_additional_repos from coprs import models from coprs.logic.builds_logic import BuildChrootsLogic from coprs.logic.coprs_logic import CoprChrootsLogic +from coprs.logic.complex_logic import BuildConfigLogic def to_dict(build_chroot): @@ -17,11 +17,11 @@ def to_dict(build_chroot): def build_config(build_chroot): - config = generate_build_config(build_chroot.build.copr, build_chroot.name) + config = BuildConfigLogic.generate_build_config(build_chroot.build.copr, build_chroot.name) copr_chroot = CoprChrootsLogic.get_by_name_safe(build_chroot.build.copr, build_chroot.name) return { "repos": config.get("repos"), - "additional_repos": generate_additional_repos(copr_chroot), + "additional_repos": BuildConfigLogic.generate_additional_repos(copr_chroot), "additional_packages": config.get("additional_packages"), "use_bootstrap_container": config.get("use_bootstrap_container"), "with_opts": config.get("with_opts"), diff --git a/frontend/coprs_frontend/coprs/views/apiv3_ns/apiv3_project_chroots.py b/frontend/coprs_frontend/coprs/views/apiv3_ns/apiv3_project_chroots.py index dcb6cbd..b58ef03 100644 --- a/frontend/coprs_frontend/coprs/views/apiv3_ns/apiv3_project_chroots.py +++ b/frontend/coprs_frontend/coprs/views/apiv3_ns/apiv3_project_chroots.py @@ -1,10 +1,9 @@ import flask from . import query_params, get_copr, file_upload, GET, PUT from .json2form import get_form_compatible_data -from coprs.helpers import generate_additional_repos, generate_build_config from coprs.views.misc import api_login_required from coprs.views.apiv3_ns import apiv3_ns -from coprs.logic.complex_logic import ComplexLogic +from coprs.logic.complex_logic import ComplexLogic, BuildConfigLogic from coprs.exceptions import ObjectNotFound, BadRequest from coprs import db, forms from coprs.logic.coprs_logic import CoprChrootsLogic @@ -25,11 +24,11 @@ def to_dict(project_chroot): def to_build_config_dict(project_chroot): - config = generate_build_config(project_chroot.copr, project_chroot.name) + config = BuildConfigLogic.generate_build_config(project_chroot.copr, project_chroot.name) return { "chroot": project_chroot.name, "repos": config["repos"], - "additional_repos": generate_additional_repos(project_chroot), + "additional_repos": BuildConfigLogic.generate_additional_repos(project_chroot), "additional_packages": (project_chroot.buildroot_pkgs or "").split(), "use_bootstrap_container": project_chroot.copr.use_bootstrap_container, "enable_net": project_chroot.copr.enable_net, diff --git a/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py b/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py index 7746a91..7a138f5 100644 --- a/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py +++ b/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py @@ -8,7 +8,7 @@ from coprs import models from coprs import exceptions from coprs.logic import actions_logic from coprs.logic.builds_logic import BuildsLogic -from coprs.logic.complex_logic import ComplexLogic +from coprs.logic.complex_logic import ComplexLogic, BuildConfigLogic from coprs.logic.packages_logic import PackagesLogic from coprs.logic.coprs_logic import MockChrootsLogic from coprs.exceptions import MalformedArgumentException @@ -119,7 +119,7 @@ def get_build_record(task, short=False): if short: return build_record - build_config = helpers.generate_build_config(task.build.copr, task.mock_chroot.name) + build_config = BuildConfigLogic.generate_build_config(task.build.copr, task.mock_chroot.name) build_record["repos"] = build_config.get("repos") build_record["buildroot_pkgs"] = build_config.get("additional_packages") build_record["use_bootstrap_container"] = build_config.get("use_bootstrap_container")