From 4f062e9471206075206d91b6c8ea77895f478ac9 Mon Sep 17 00:00:00 2001 From: Meni Yakove Date: Mon, 28 Apr 2025 12:27:31 +0300 Subject: [PATCH 1/7] Fix local repo config file load --- webhook_server/libs/config.py | 48 +++++++++++++++++++------------ webhook_server/libs/github_api.py | 13 +++++---- webhook_server/utils/helpers.py | 11 +++++-- 3 files changed, 44 insertions(+), 28 deletions(-) diff --git a/webhook_server/libs/config.py b/webhook_server/libs/config.py index 92076ac2..5aa49153 100644 --- a/webhook_server/libs/config.py +++ b/webhook_server/libs/config.py @@ -21,6 +21,8 @@ def exists(self) -> None: @property def root_data(self) -> dict[str, Any]: + LOGGER.debug(f"Loading config file {self.config_path}") + try: with open(self.config_path) as fd: return yaml.safe_load(fd) @@ -30,28 +32,13 @@ def root_data(self) -> dict[str, Any]: @property def repository_data(self) -> dict[str, Any]: + LOGGER.debug(f"Loading repository level config for repository {self.repository}") return self.root_data.get("repositories", {}).get(self.repository, {}) - def get_value(self, value: str, return_on_none: Any = None) -> Any: - """ - Get value from config - - Order of getting value: - 1. Local repository file (.github-webhook-server.yaml) - 2. Repository level global config file (config.yaml) - 3. Root level global config file (config.yaml) - """ - - for scope in (self.repository_local_data, self.repository_data, self.root_data): - if value in scope: - value_data = scope[value] - if value_data is not None: - return value_data - - return return_on_none - @property def repository_local_data(self) -> dict[str, Any]: + LOGGER.debug(f"Loading local config for repository {self.repository_full_name}") + if self.repository and self.repository_full_name: from webhook_server.utils.helpers import get_api_with_highest_rate_limit, get_github_repo_api @@ -62,10 +49,33 @@ def repository_local_data(self) -> dict[str, Any]: repo = get_github_repo_api(github_api=github_api, repository=self.repository_full_name) _path = repo.get_contents(".github-webhook-server.yaml") config_file = _path[0] if isinstance(_path, list) else _path - return yaml.safe_load(config_file.decoded_content) + repo_config = yaml.safe_load(config_file.decoded_content) + LOGGER.debug(f"Repository {self.repository_full_name} config: {repo_config}") + return repo_config except Exception as ex: LOGGER.debug(f"Repository {self.repository_full_name} config file not found or error. {ex}") return {} + LOGGER.debug("self.repository or self.repository_full_name is not defined") return {} + + def get_value(self, value: str, return_on_none: Any = None) -> Any: + """ + Get value from config + + Order of getting value: + 1. Local repository file (.github-webhook-server.yaml) + 2. Repository level global config file (config.yaml) + 3. Root level global config file (config.yaml) + """ + + for scope in (self.repository_local_data, self.repository_data, self.root_data): + if value in scope: + value_data = scope[value] + if value_data is not None: + return value_data + else: + return return_on_none + + return return_on_none diff --git a/webhook_server/libs/github_api.py b/webhook_server/libs/github_api.py index 058b3635..a94fffd6 100644 --- a/webhook_server/libs/github_api.py +++ b/webhook_server/libs/github_api.py @@ -111,7 +111,11 @@ def __init__(self, hook_data: dict[Any, Any], headers: Headers, logger: logging. self.github_event: str = self.headers["X-GitHub-Event"] self.owners_content: dict[str, Any] = {} - self.config = Config(repository=self.repository_name) + self.config = Config(repository=self.repository_name, repository_full_name=self.repository_full_name) + + if not self.config.repository: + raise RepositoryNotFoundError(f"Repository {self.repository_name} not found in config file") + self._repo_data_from_config() self.github_api, self.token, self.api_user = get_api_with_highest_rate_limit( config=self.config, repository_name=self.repository_name @@ -216,7 +220,7 @@ def _prepare_retest_welcome_comment(self) -> str: return " * This repository does not support retest actions" if not retest_msg else retest_msg def add_api_users_to_auto_verified_and_merged_users(self) -> None: - apis_and_tokens = get_apis_and_tokes_from_config(config=self.config) + apis_and_tokens = get_apis_and_tokes_from_config(config=self.config, repository_name=self.repository_name) self.auto_verified_and_merged_users.extend([_api[0].get_user().login for _api in apis_and_tokens]) def _get_reposiroty_color_for_log_prefix(self) -> str: @@ -299,11 +303,8 @@ def process_pull_request_check_run_webhook_data(self) -> None: return self.check_if_can_be_merged() def _repo_data_from_config(self) -> None: - if not self.config.repository: - raise RepositoryNotFoundError(f"Repository {self.repository_name} not found in config file") - + self.logger.debug(f"Read config for repository {self.repository_name}") self.github_app_id: str = self.config.get_value(value="github-app-id") - self.pypi: dict[str, str] = self.config.get_value(value="pypi") self.verified_job: bool = self.config.get_value(value="verified-job", return_on_none=True) self.tox: dict[str, str] = self.config.get_value(value="tox") diff --git a/webhook_server/utils/helpers.py b/webhook_server/utils/helpers.py index 1d0b4c16..bfb26dd9 100644 --- a/webhook_server/utils/helpers.py +++ b/webhook_server/utils/helpers.py @@ -119,9 +119,14 @@ def run_command( return False, out_decoded, err_decoded -def get_apis_and_tokes_from_config(config: Config) -> list[tuple[github.Github, str]]: +def get_apis_and_tokes_from_config(config: Config, repository_name: str) -> list[tuple[github.Github, str]]: apis_and_tokens: list[tuple[github.Github, str]] = [] - tokens = config.get_value(value="github-tokens") + + repository = config.root_data.get("repositories", {}).get(repository_name, {}) + tokens = repository.get("github-tokens") + + if not tokens: + tokens = config.root_data["github-tokens"] for _token in tokens: apis_and_tokens.append((github.Github(auth=github.Auth.Token(_token)), _token)) @@ -158,7 +163,7 @@ def get_api_with_highest_rate_limit( logger.debug(msg) - apis_and_tokens = get_apis_and_tokes_from_config(config=config) + apis_and_tokens = get_apis_and_tokes_from_config(config=config, repository_name=repository_name) for _api, _token in apis_and_tokens: _api_user = _api.get_user().login rate_limit = _api.get_rate_limit() From cae5628a428c2e13e4aa10a6a9c47f250317457a Mon Sep 17 00:00:00 2001 From: Meni Yakove Date: Mon, 28 Apr 2025 12:46:08 +0300 Subject: [PATCH 2/7] Config: check if `repositories` key exists --- uv.lock | 8 -------- webhook_server/libs/config.py | 9 +++++++-- webhook_server/utils/github_repository_settings.py | 4 ++-- webhook_server/utils/helpers.py | 1 + 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/uv.lock b/uv.lock index f8124b9c..02f04d9a 100644 --- a/uv.lock +++ b/uv.lock @@ -473,7 +473,6 @@ dependencies = [ { name = "timeout-sampler" }, { name = "uvicorn" }, { name = "uvicorn-worker" }, - { name = "uwsgi" }, ] [package.dev-dependencies] @@ -504,7 +503,6 @@ requires-dist = [ { name = "timeout-sampler", specifier = ">=0.0.46" }, { name = "uvicorn", specifier = ">=0.31.0" }, { name = "uvicorn-worker", specifier = ">=0.3.0" }, - { name = "uwsgi", specifier = ">=2.0.27" }, ] [package.metadata.requires-dev] @@ -1344,12 +1342,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f7/1f/4e5f8770c2cf4faa2c3ed3c19f9d4485ac9db0a6b029a7866921709bdc6c/uvicorn_worker-0.3.0-py3-none-any.whl", hash = "sha256:ef0fe8aad27b0290a9e602a256b03f5a5da3a9e5f942414ca587b645ec77dd52", size = 5346 }, ] -[[package]] -name = "uwsgi" -version = "2.0.29" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/74/34f5411f1c1dc55cbcba3d817d1723b920484d2aeede4663bbaa5be7ee22/uwsgi-2.0.29.tar.gz", hash = "sha256:6bd150ae60d0d9947429ea7dc8e5f868de027e5eb38355fb613b9413732c432f", size = 822515 } - [[package]] name = "wcwidth" version = "0.2.13" diff --git a/webhook_server/libs/config.py b/webhook_server/libs/config.py index 5aa49153..e6d21bee 100644 --- a/webhook_server/libs/config.py +++ b/webhook_server/libs/config.py @@ -11,14 +11,19 @@ class Config: def __init__(self, repository: str | None = None, repository_full_name: str | None = None) -> None: self.data_dir: str = os.environ.get("WEBHOOK_SERVER_DATA_DIR", "/home/podman/data") self.config_path: str = os.path.join(self.data_dir, "config.yaml") - self.exists() self.repository = repository self.repository_full_name = repository_full_name + self.exists() + self.repositories_exists() def exists(self) -> None: if not os.path.isfile(self.config_path): raise FileNotFoundError(f"Config file {self.config_path} not found") + def repositories_exists(self) -> None: + if not self.root_data.get("reposotories"): + raise ValueError(f"Config {self.config_path} does not have `repositories`") + @property def root_data(self) -> dict[str, Any]: LOGGER.debug(f"Loading config file {self.config_path}") @@ -33,7 +38,7 @@ def root_data(self) -> dict[str, Any]: @property def repository_data(self) -> dict[str, Any]: LOGGER.debug(f"Loading repository level config for repository {self.repository}") - return self.root_data.get("repositories", {}).get(self.repository, {}) + return self.root_data["repositories"].get(self.repository, {}) @property def repository_local_data(self) -> dict[str, Any]: diff --git a/webhook_server/utils/github_repository_settings.py b/webhook_server/utils/github_repository_settings.py index 71e10a6d..06f61001 100644 --- a/webhook_server/utils/github_repository_settings.py +++ b/webhook_server/utils/github_repository_settings.py @@ -212,7 +212,7 @@ def set_repositories_settings(config: Config, apis_dict: dict[str, dict[str, Any futures = [] with ThreadPoolExecutor() as executor: for repo, data in config_data["repositories"].items(): - config = Config(repository=repo) + config = Config(repository=repo, repository_full_name=data["name"]) branch_protection = get_repo_branch_protection_rules(config=config) futures.append( executor.submit( @@ -331,7 +331,7 @@ def set_all_in_progress_check_runs_to_queued(repo_config: Config, apis_dict: dic with ThreadPoolExecutor() as executor: for repo, data in repo_config.root_data["repositories"].items(): - repo_config = Config(repository=repo) + repo_config = Config(repository=repo, repository_full_name=data["name"]) futures.append( executor.submit( set_repository_check_runs_to_queued, diff --git a/webhook_server/utils/helpers.py b/webhook_server/utils/helpers.py index bfb26dd9..5c263304 100644 --- a/webhook_server/utils/helpers.py +++ b/webhook_server/utils/helpers.py @@ -164,6 +164,7 @@ def get_api_with_highest_rate_limit( logger.debug(msg) apis_and_tokens = get_apis_and_tokes_from_config(config=config, repository_name=repository_name) + for _api, _token in apis_and_tokens: _api_user = _api.get_user().login rate_limit = _api.get_rate_limit() From 88a9eceab7548fa1715ea22c7f6c04034ff84133 Mon Sep 17 00:00:00 2001 From: Meni Yakove Date: Mon, 28 Apr 2025 12:48:16 +0300 Subject: [PATCH 3/7] Fix typo --- webhook_server/libs/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webhook_server/libs/config.py b/webhook_server/libs/config.py index e6d21bee..1c1d2469 100644 --- a/webhook_server/libs/config.py +++ b/webhook_server/libs/config.py @@ -21,7 +21,7 @@ def exists(self) -> None: raise FileNotFoundError(f"Config file {self.config_path} not found") def repositories_exists(self) -> None: - if not self.root_data.get("reposotories"): + if not self.root_data.get("repositories"): raise ValueError(f"Config {self.config_path} does not have `repositories`") @property From f51041e1a813c4e9d670769db5e616b2979f72c4 Mon Sep 17 00:00:00 2001 From: Meni Yakove Date: Mon, 28 Apr 2025 13:05:15 +0300 Subject: [PATCH 4/7] Fix tox --- webhook_server/libs/config.py | 2 -- webhook_server/tests/conftest.py | 3 +++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/webhook_server/libs/config.py b/webhook_server/libs/config.py index 1c1d2469..3eaeb2f1 100644 --- a/webhook_server/libs/config.py +++ b/webhook_server/libs/config.py @@ -80,7 +80,5 @@ def get_value(self, value: str, return_on_none: Any = None) -> Any: value_data = scope[value] if value_data is not None: return value_data - else: - return return_on_none return return_on_none diff --git a/webhook_server/tests/conftest.py b/webhook_server/tests/conftest.py index 8426aa1e..0063faba 100644 --- a/webhook_server/tests/conftest.py +++ b/webhook_server/tests/conftest.py @@ -103,6 +103,9 @@ def process_github_webhook(mocker, request): mocker.patch("github.AuthenticatedUser", return_value=True) mocker.patch(f"{base_import_path}.get_api_with_highest_rate_limit", return_value=("API", "TOKEN", "USER")) mocker.patch(f"{base_import_path}.get_github_repo_api", return_value=Repository()) + mocker.patch( + "webhook_server.libs.config.Config.repository_local_data", new_callable=mocker.PropertyMock, return_value={} + ) process_github_webhook = ProcessGithubWehook( hook_data={"repository": {"name": Repository().name, "full_name": Repository().full_name}}, From 4f2c23ea1ff94c5addebb6bc56b35e0f71a51c33 Mon Sep 17 00:00:00 2001 From: Meni Yakove Date: Mon, 28 Apr 2025 15:37:30 +0300 Subject: [PATCH 5/7] call repo_config again after we have api to fetch config file --- webhook_server/libs/config.py | 47 +++++++++-------- webhook_server/libs/github_api.py | 52 +++++++++++++------ .../utils/github_repository_settings.py | 4 +- 3 files changed, 62 insertions(+), 41 deletions(-) diff --git a/webhook_server/libs/config.py b/webhook_server/libs/config.py index 3eaeb2f1..035117c5 100644 --- a/webhook_server/libs/config.py +++ b/webhook_server/libs/config.py @@ -1,6 +1,7 @@ import os from typing import Any +import github import yaml from simple_logger.logger import get_logger @@ -8,11 +9,13 @@ class Config: - def __init__(self, repository: str | None = None, repository_full_name: str | None = None) -> None: + def __init__( + self, + repository: str | None = None, + ) -> None: self.data_dir: str = os.environ.get("WEBHOOK_SERVER_DATA_DIR", "/home/podman/data") self.config_path: str = os.path.join(self.data_dir, "config.yaml") self.repository = repository - self.repository_full_name = repository_full_name self.exists() self.repositories_exists() @@ -40,32 +43,28 @@ def repository_data(self) -> dict[str, Any]: LOGGER.debug(f"Loading repository level config for repository {self.repository}") return self.root_data["repositories"].get(self.repository, {}) - @property - def repository_local_data(self) -> dict[str, Any]: - LOGGER.debug(f"Loading local config for repository {self.repository_full_name}") - - if self.repository and self.repository_full_name: - from webhook_server.utils.helpers import get_api_with_highest_rate_limit, get_github_repo_api + def repository_local_data(self, github_api: github.Github, repository_full_name: str) -> dict[str, Any]: + LOGGER.debug(f"Loading local config for repository {repository_full_name}") - github_api, _, _ = get_api_with_highest_rate_limit(config=self, repository_name=self.repository) + if self.repository and repository_full_name: + from webhook_server.utils.helpers import get_github_repo_api - if github_api: - try: - repo = get_github_repo_api(github_api=github_api, repository=self.repository_full_name) - _path = repo.get_contents(".github-webhook-server.yaml") - config_file = _path[0] if isinstance(_path, list) else _path - repo_config = yaml.safe_load(config_file.decoded_content) - LOGGER.debug(f"Repository {self.repository_full_name} config: {repo_config}") - return repo_config + try: + repo = get_github_repo_api(github_api=github_api, repository=repository_full_name) + _path = repo.get_contents(".github-webhook-server.yaml") + config_file = _path[0] if isinstance(_path, list) else _path + repo_config = yaml.safe_load(config_file.decoded_content) + LOGGER.debug(f"Repository {repository_full_name} config: {repo_config}") + return repo_config - except Exception as ex: - LOGGER.debug(f"Repository {self.repository_full_name} config file not found or error. {ex}") - return {} + except Exception as ex: + LOGGER.debug(f"Repository {repository_full_name} config file not found or error. {ex}") + return {} LOGGER.debug("self.repository or self.repository_full_name is not defined") return {} - def get_value(self, value: str, return_on_none: Any = None) -> Any: + def get_value(self, value: str, return_on_none: Any = None, extra_dict: dict[str, Any] | None = None) -> Any: """ Get value from config @@ -74,8 +73,12 @@ def get_value(self, value: str, return_on_none: Any = None) -> Any: 2. Repository level global config file (config.yaml) 3. Root level global config file (config.yaml) """ + if extra_dict and extra_dict.get(value): + value = extra_dict[value] + if value is not None: + return value - for scope in (self.repository_local_data, self.repository_data, self.root_data): + for scope in (self.repository_data, self.root_data): if value in scope: value_data = scope[value] if value_data is not None: diff --git a/webhook_server/libs/github_api.py b/webhook_server/libs/github_api.py index a94fffd6..aa7dc483 100644 --- a/webhook_server/libs/github_api.py +++ b/webhook_server/libs/github_api.py @@ -111,18 +111,25 @@ def __init__(self, hook_data: dict[Any, Any], headers: Headers, logger: logging. self.github_event: str = self.headers["X-GitHub-Event"] self.owners_content: dict[str, Any] = {} - self.config = Config(repository=self.repository_name, repository_full_name=self.repository_full_name) + self.config = Config(repository=self.repository_name) if not self.config.repository: raise RepositoryNotFoundError(f"Repository {self.repository_name} not found in config file") - self._repo_data_from_config() + # Get config without .github-webhook-server.yaml data + self._repo_data_from_config(repository_config={}) self.github_api, self.token, self.api_user = get_api_with_highest_rate_limit( config=self.config, repository_name=self.repository_name ) if self.github_api and self.token: self.repository = get_github_repo_api(github_api=self.github_api, repository=self.repository_full_name) + # Once we have a repository, we can get the config from .github-webhook-server.yaml + local_repository_config = self.config.repository_local_data( + github_api=self.github_api, repository_full_name=self.repository_full_name + ) + # Call _repo_data_from_config() again to update self args from .github-webhook-server.yaml + self._repo_data_from_config(repository_config=local_repository_config) else: self.logger.error(f"Failed to get GitHub API and token for repository {self.repository_name}.") @@ -302,16 +309,21 @@ def process_pull_request_check_run_webhook_data(self) -> None: return self.check_if_can_be_merged() - def _repo_data_from_config(self) -> None: + def _repo_data_from_config(self, repository_config: dict[str, Any]) -> None: self.logger.debug(f"Read config for repository {self.repository_name}") - self.github_app_id: str = self.config.get_value(value="github-app-id") - self.pypi: dict[str, str] = self.config.get_value(value="pypi") - self.verified_job: bool = self.config.get_value(value="verified-job", return_on_none=True) - self.tox: dict[str, str] = self.config.get_value(value="tox") - self.tox_python_version: str = self.config.get_value(value="tox-python-version") - self.slack_webhook_url: str = self.config.get_value(value="slack_webhook_url") - - self.build_and_push_container: dict[str, Any] = self.config.get_value(value="container", return_on_none={}) + + self.github_app_id: str = self.config.get_value(value="github-app-id", extra_dict=repository_config) + self.pypi: dict[str, str] = self.config.get_value(value="pypi", extra_dict=repository_config) + self.verified_job: bool = self.config.get_value( + value="verified-job", return_on_none=True, extra_dict=repository_config + ) + self.tox: dict[str, str] = self.config.get_value(value="tox", extra_dict=repository_config) + self.tox_python_version: str = self.config.get_value(value="tox-python-version", extra_dict=repository_config) + self.slack_webhook_url: str = self.config.get_value(value="slack_webhook_url", extra_dict=repository_config) + + self.build_and_push_container: dict[str, Any] = self.config.get_value( + value="container", return_on_none={}, extra_dict=repository_config + ) if self.build_and_push_container: self.container_repository_username: str = self.build_and_push_container["username"] self.container_repository_password: str = self.build_and_push_container["password"] @@ -322,17 +334,23 @@ def _repo_data_from_config(self) -> None: self.container_command_args: str = self.build_and_push_container.get("args", "") self.container_release: bool = self.build_and_push_container.get("release", False) - self.pre_commit: bool = self.config.get_value(value="pre-commit", return_on_none=False) + self.pre_commit: bool = self.config.get_value( + value="pre-commit", return_on_none=False, extra_dict=repository_config + ) self.auto_verified_and_merged_users: list[str] = self.config.get_value( - value="auto-verified-and-merged-users", return_on_none=[] + value="auto-verified-and-merged-users", return_on_none=[], extra_dict=repository_config ) self.can_be_merged_required_labels = self.config.get_value( - value="can-be-merged-required-labels", return_on_none=[] + value="can-be-merged-required-labels", return_on_none=[], extra_dict=repository_config + ) + self.conventional_title: str = self.config.get_value(value="conventional-title", extra_dict=repository_config) + self.set_auto_merge_prs: list[str] = self.config.get_value( + value="set-auto-merge-prs", return_on_none=[], extra_dict=repository_config + ) + self.minimum_lgtm: int = self.config.get_value( + value="minimum-lgtm", return_on_none=0, extra_dict=repository_config ) - self.conventional_title: str = self.config.get_value(value="conventional-title") - self.set_auto_merge_prs: list[str] = self.config.get_value(value="set-auto-merge-prs", return_on_none=[]) - self.minimum_lgtm: int = self.config.get_value(value="minimum-lgtm", return_on_none=0) def _get_pull_request(self, number: int | None = None) -> PullRequest: if number: diff --git a/webhook_server/utils/github_repository_settings.py b/webhook_server/utils/github_repository_settings.py index 06f61001..71e10a6d 100644 --- a/webhook_server/utils/github_repository_settings.py +++ b/webhook_server/utils/github_repository_settings.py @@ -212,7 +212,7 @@ def set_repositories_settings(config: Config, apis_dict: dict[str, dict[str, Any futures = [] with ThreadPoolExecutor() as executor: for repo, data in config_data["repositories"].items(): - config = Config(repository=repo, repository_full_name=data["name"]) + config = Config(repository=repo) branch_protection = get_repo_branch_protection_rules(config=config) futures.append( executor.submit( @@ -331,7 +331,7 @@ def set_all_in_progress_check_runs_to_queued(repo_config: Config, apis_dict: dic with ThreadPoolExecutor() as executor: for repo, data in repo_config.root_data["repositories"].items(): - repo_config = Config(repository=repo, repository_full_name=data["name"]) + repo_config = Config(repository=repo) futures.append( executor.submit( set_repository_check_runs_to_queued, From e35cfa753ac60a3549620dc292dc2d2b6adb3e2b Mon Sep 17 00:00:00 2001 From: Meni Yakove Date: Mon, 28 Apr 2025 15:41:54 +0300 Subject: [PATCH 6/7] Fix tests --- webhook_server/tests/conftest.py | 3 --- webhook_server/tests/test_branch_protection.py | 5 ----- webhook_server/tests/test_repo_data_from_config.py | 2 +- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/webhook_server/tests/conftest.py b/webhook_server/tests/conftest.py index 0063faba..8426aa1e 100644 --- a/webhook_server/tests/conftest.py +++ b/webhook_server/tests/conftest.py @@ -103,9 +103,6 @@ def process_github_webhook(mocker, request): mocker.patch("github.AuthenticatedUser", return_value=True) mocker.patch(f"{base_import_path}.get_api_with_highest_rate_limit", return_value=("API", "TOKEN", "USER")) mocker.patch(f"{base_import_path}.get_github_repo_api", return_value=Repository()) - mocker.patch( - "webhook_server.libs.config.Config.repository_local_data", new_callable=mocker.PropertyMock, return_value={} - ) process_github_webhook = ProcessGithubWehook( hook_data={"repository": {"name": Repository().name, "full_name": Repository().full_name}}, diff --git a/webhook_server/tests/test_branch_protection.py b/webhook_server/tests/test_branch_protection.py index 6fb1972d..e2677685 100644 --- a/webhook_server/tests/test_branch_protection.py +++ b/webhook_server/tests/test_branch_protection.py @@ -26,11 +26,6 @@ def branch_protection_rules(request, mocker): return_value=root_data["repositories"][repo_name], ) - mocker.patch( - f"{config_path}.repository_local_data", - new_callable=mocker.PropertyMock, - return_value={}, - ) return get_repo_branch_protection_rules(config=config) diff --git a/webhook_server/tests/test_repo_data_from_config.py b/webhook_server/tests/test_repo_data_from_config.py index 5bca191d..ba1812cc 100644 --- a/webhook_server/tests/test_repo_data_from_config.py +++ b/webhook_server/tests/test_repo_data_from_config.py @@ -1,5 +1,5 @@ def test_repo_data_from_config_repository_found(process_github_webhook): - process_github_webhook._repo_data_from_config() + process_github_webhook._repo_data_from_config(repository_config={}) assert process_github_webhook.repository_full_name == "my-org/test-repo" assert process_github_webhook.github_app_id == 123456 From 6b21e8518e354d45f493ec8711164a8c33896583 Mon Sep 17 00:00:00 2001 From: Meni Yakove Date: Mon, 28 Apr 2025 15:51:49 +0300 Subject: [PATCH 7/7] revert get_apis_and_tokes_from_config --- webhook_server/libs/github_api.py | 2 +- webhook_server/utils/helpers.py | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/webhook_server/libs/github_api.py b/webhook_server/libs/github_api.py index aa7dc483..58f96a7f 100644 --- a/webhook_server/libs/github_api.py +++ b/webhook_server/libs/github_api.py @@ -227,7 +227,7 @@ def _prepare_retest_welcome_comment(self) -> str: return " * This repository does not support retest actions" if not retest_msg else retest_msg def add_api_users_to_auto_verified_and_merged_users(self) -> None: - apis_and_tokens = get_apis_and_tokes_from_config(config=self.config, repository_name=self.repository_name) + apis_and_tokens = get_apis_and_tokes_from_config(config=self.config) self.auto_verified_and_merged_users.extend([_api[0].get_user().login for _api in apis_and_tokens]) def _get_reposiroty_color_for_log_prefix(self) -> str: diff --git a/webhook_server/utils/helpers.py b/webhook_server/utils/helpers.py index 5c263304..e006ea6f 100644 --- a/webhook_server/utils/helpers.py +++ b/webhook_server/utils/helpers.py @@ -119,14 +119,9 @@ def run_command( return False, out_decoded, err_decoded -def get_apis_and_tokes_from_config(config: Config, repository_name: str) -> list[tuple[github.Github, str]]: +def get_apis_and_tokes_from_config(config: Config) -> list[tuple[github.Github, str]]: apis_and_tokens: list[tuple[github.Github, str]] = [] - - repository = config.root_data.get("repositories", {}).get(repository_name, {}) - tokens = repository.get("github-tokens") - - if not tokens: - tokens = config.root_data["github-tokens"] + tokens = config.get_value(value="github-tokens") for _token in tokens: apis_and_tokens.append((github.Github(auth=github.Auth.Token(_token)), _token)) @@ -163,7 +158,7 @@ def get_api_with_highest_rate_limit( logger.debug(msg) - apis_and_tokens = get_apis_and_tokes_from_config(config=config, repository_name=repository_name) + apis_and_tokens = get_apis_and_tokes_from_config(config=config) for _api, _token in apis_and_tokens: _api_user = _api.get_user().login